从Youtube API中检索While循环中的数据

时间:2013-10-02 03:05:24

标签: youtube-api

我有一个hughe数据库,其中一些数据集链接到某些YouTube视频。我们都知道有些youtube视频会在youtube上一段时间后消失,这也会导致我的解决方案和我的问题 - >我想检查youtube视频是否仍然存在,只需通过JSON检查是否有要从视频中检索的数据。如果不是我只是删除那个特定的数据集。

因此,我的解决方案的第一部分是遍历我的数据表的每一行并检查每个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可能会对此负责吗?

第二)这可能是我的服务器问题,在x秒后停止查询(但我已经通过设置一行set_time_limit(10000000)扩展了时间限制;进入我的PHP代码但没有成功)?

希望你能提前帮助。

1 个答案:

答案 0 :(得分:0)

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个等等,这会给你带来更好的表现。