从 Youtube API 循环中检索数据



我确实有一个拥抱数据库,其中某些数据集链接到某些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 秒后停止查询(但我已经通过将一行set_time_limit (10000000(; 扩展到我的 php 代码但没有成功(来扩展时间限制?

希望你能帮忙,提前谢谢。

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 个,依此类推,这应该会给你更好的表现。

相关内容

  • 没有找到相关文章

最新更新