【问题标题】:Retrieving Data in a While Loop from the Youtube API从 Youtube API 在 While 循环中检索数据
【发布时间】:2013-10-02 03:05:23
【问题描述】:

我确实有一个庞大的数据库,其中一些数据集链接到某些 youtube 视频。众所周知,一些 youtube 视频会在一段时间后从 youtube 上消失,这导致了我的解决方案和我的问题 --> 我想通过简单地通过 JSON 检查是否有要检索的数据来检查 youtube 视频是否仍然存在从一个视频。如果不是,我会简单地删除该特定数据集。

因此,我的解决方案的第一部分是遍历我的数据表的每一行,并检查每个 id 是否有要从 youtube 检索的数据,如以下代码所示:

   $result = $db->query("SELECT id, link FROM songs");
    while($row = $result->fetch_assoc())
    {
        $number    = 1+$rown++;
        $id        = $row['id'];
        $link      = $row['link'];
        $video_ID = $link;
        $JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos/{$video_ID}?v=2&alt=json");
        $JSON_Data = json_decode($JSON);
        $views = $JSON_Data->{'entry'}->{'yt$statistics'}->{'viewCount'};

        echo $number .' row<br />';
        echo $link .' link<br />';
        echo $views .' views<br /><br />';

    }

这种尝试效果很好,并输出了我需要的数据。唯一的问题是,它只是从前 150-190 行中获取数据,仅此而已。现在我正在检查一个解决方案,检查每一行是否有空的 youtube 数据,这导致我有两个具体问题:

1st) 由于从单个查询中检索数据的限制,youtube 可能对此负责吗?

2nd)这可能是我的服务器问题,它在 x 秒后停止查询(但我已经通过在我的 php 代码中添加一行 set_time_limit (10000000); 来扩展时间限制但没有成功)?

希望您能提供帮助,在此先感谢。

【问题讨论】:

    标签: youtube-api


    【解决方案1】:

    YouTube 自然会限制您在一段时间内可以提出多少请求。不幸的是,对于这些限制是什么没有明确的指导方针......对于 v2,指导方针只是说明:

    YouTube API 强制实施配额以防止与 不规则的 API 使用。具体来说,一个 too_many_recent_calls 错误 表示 API 服务器已收到太多来自 在很短的时间内同一个来电者。如果您收到此类 错误,那么我们建议您等待几分钟,然后尝试您的 再次请求。

    如果时间对您来说不是问题,您可以减慢每个查询的速度,以便每 10-15 秒左右只发出 1 个请求。或者,你可能会有更好的运气批处理。有了这个,您一次最多可以发出 50 个请求(这算作 50 个请求与您每天的总请求配额相比,但仅算作您的每次配额一个)。使用 API 的 v2 进行批处理有点涉及,因为您首先向批处理端点发出 POST 请求,然后根据这些结果您可以发送多个请求。这是文档:

    https://developers.google.com/youtube/2.0/developers_guide_protocol?hl=en#Batch_processing

    使用 v3 进行批处理要容易得多,因为您只需将 videoId 参数设置为您想要获取信息的视频的逗号分隔列表 - 所以在您的情况下,您可以在这样的 URL 上执行 file_get_contents

    https://www.googleapis.com/youtube/v3/videos?part=id&id={comma-separated-list-of-IDs}&maxResults=50&key={YOUR_API_KEY}
    

    您列表中未在 JSON 响应中返回的任何视频 ID 都不再存在。如果你一次做 50 个,等待 15 秒,再做 50 个,等等,这应该会给你更好的表现。

    【讨论】:

      猜你喜欢
      • 2016-03-02
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多