我目前正在尝试从 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 无法对它们进行索引。有没有人对如何避免这个问题有任何有用的建议?我希望我已经清楚地概述了困难!