我目前正在尝试从YouTube用户上传Feed中提取有关视频的数据。此Feed包含特定用户上传的所有视频,并可通过以下请求从API访问:
http://gdata.youtube.com/feeds/api/users/USERNAME/uploads
USERNAME是拥有Feed的YouTube用户的名称。
但是,我在尝试访问超过1000个视频的Feed时遇到了问题。由于每个API请求都可以返回50个项目,因此我使用max_length和start_index迭代Feed,如下所示:
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,按照最近发布的顺序排列。浏览了documentation后,我发现了这个:
限制结果计数和可访问结果
...
对于任何给定的查询,您将无法检索超过1,000个 结果即使有更多。 API将返回错误 如果您尝试检索超过1,000个结果。因此,API会 如果将start-index查询参数设置为值,则返回错误 1001或更高。如果总和,它也将返回错误 start-index和max-results参数大于1,001。
例如,如果将start-index参数值设置为1000,则 必须将max-results参数值设置为1,如果设置了 start-index参数值为980,则必须设置max-results 参数值为21或更小。
我对如何以一致的方式访问通用用户上次上传的视频及其他视频感到茫然,因为它们无法仅使用max-results和start-index进行索引。有没有人对如何避免这个问题有任何有用的建议?我希望我已经清楚地概述了这个难点!
答案 0 :(得分:12)
获取给定帐户的所有视频,但您需要确保您对上传Feed的请求是针对后端数据库而不是搜索索引。因为您在请求网址中包含orderby=published
,所以您将违反搜索索引。搜索索引Feed限制为1000个条目。
摆脱orderby=published
,您将获得您正在寻找的数据。无论如何,上传Feed的默认顺序是反向时间顺序。
这是一个特别容易犯的错误,我们有一个博客文章更详细地解释它:
http://apiblog.youtube.com/2012/03/keeping-things-fresh.html
好消息是,这在API的第3版中不再是问题。