10

我目前正在尝试从 YouTube 用户上传提要中提取有关视频的数据。此提要包含某个用户上传的所有视频,并通过以下请求从 API 访问:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads

其中 USERNAME 是拥有该提要的 YouTube 用户的名称。

但是,我在尝试访问超过 1000 个视频的提要时遇到了问题。由于对 API 的每个请求都可以返回 50 个项目,因此我使用 max_length 和 start_index 遍历提要,如下所示:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=1&max-results=50&orderby=published
http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=51&max-results=50&orderby=published

依此类推,每次调用时将 start_index 递增 50。这可以完美运行,直到:

http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?start-index=1001&max-results=50&orderby=published

此时我收到 400 错误,通知我“您不能请求超过第 1000 项。” 这让我很困惑,因为我假设查询只会返回 50 个视频:1001-1051,按最近发布的顺序排列。浏览了文档后,我发现了这一点:

结果计数和可访问结果的限制

...

对于任何给定的查询,即使有超过 1,000 个结果,您也无法检索到超过 1,000 个结果。如果您尝试检索超过 1,000 个结果,API 将返回错误。因此,如果您将 start-index 查询参数设置为 1001 或更大的值,API 将返回错误。如果 start-index 和 max-results 参数的总和大于 1,001,它也会返回错误。

例如,如果将 start-index 参数值设置为 1000,则必须将 max-results 参数值设置为 1,如果将 start-index 参数值设置为 980,则必须将 max-results 参数设置为值为 21 或更低。

我不知道如何以一致的方式访问通用用户的第 1001 个最后上传的视频及以后的视频,因为仅使用 max-results 和 start-index 无法对它们进行索引。有没有人对如何避免这个问题有任何有用的建议?我希望我已经清楚地概述了困难!

4

1 回答 1

12

支持获取给定帐户的所有视频但您需要确保您对上传提要的请求是针对后端数据库而不是搜索索引。因为您包含orderby=published在您的请求 URL 中,所以您将违反搜索索引。搜索索引提要限制为 1000 个条目。

摆脱 ,orderby=published你会得到你正在寻找的数据。无论如何,上传提要的默认顺序都是按时间倒序排列的。

这是一个特别容易犯的错误,我们有一篇博客文章更详细地解释了它:

http://apiblog.youtube.com/2012/03/keeping-things-fresh.html

好消息是这在 API 版本 3 中将不再是问题。

于 2012-10-04T18:12:31.410 回答