我目前正试图从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。在查看了文档后,我发现了以下内容:
结果计数和可访问结果的限制
对于任何给定的查询,您将无法检索超过1000个即使有更多的结果。API将返回错误如果您尝试检索超过1000个结果。因此,API将如果将起始索引查询参数设置为值,则返回错误1001或更大。如果起始索引和最大结果参数大于1001。
例如,如果将起始索引参数值设置为1000,则必须将最大结果参数值设置为1,如果将将index参数值启动为980,则必须设置最大结果参数值设置为21或更小。
我不知道如何以一致的方式访问普通用户最后上传的第1001个视频及以后的视频,因为不能仅使用最大结果和起始索引对其进行索引。有人对如何避免这个问题有什么有用的建议吗?我希望我已经把困难说清楚了!
支持为给定帐户获取所有视频,但您需要确保您对上传提要的请求是针对后端数据库而不是搜索索引的。因为您在请求URL中包含了orderby=published
,所以您将违背搜索索引。搜索索引提要限制为1000个条目。
去掉orderby=published
,你就会得到你想要的数据。上传提要的默认顺序无论如何都是按时间倒序的。
这是一个特别容易犯的错误,我们有一篇博客文章对其进行了更详细的解释:
http://apiblog.youtube.com/2012/03/keeping-things-fresh.html
好的一点是,这在API版本3中将不再是一个问题。