0

我确实有一个 Hughe 数据库,其中一些数据集链接到某些 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); 来扩展时间限制但没有成功)?

希望能帮到你,先谢谢了。

4

1 回答 1

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 参数设置为您想要获取信息的视频的逗号分隔列表 - 所以在您的情况下,您可以file_get_contents在这样的 URL 上执行:

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 个,等等,那应该会给你更好的表现。

于 2013-10-02T04:47:31.650 回答