startindex> = 100时空响应

时间:2014-03-09 21:01:16

标签: youtube-api

经过大量的调试后,终于发现我看到Youtube在使用v2 YouTube-API获取评论时只发出了前100条评论。我终于尝试使用:

curl -Lk -X GET "http://gdata.youtube.com/feeds/api/videos/MShbP3OpASA/comments?alt=json&start-index=100&max-results=50"

我得到的只是没有entry参数的回复。也就是说,我没有收到错误响应或类似的东西 - 我得到了非常好的响应,但没有entry参数。

深入挖掘,在我的回复中openSearch$totalResults的值为100,所以根据this resource这似乎是预期的结果(虽然它告诉我某种错误信息,我不明白?)。

但是这里有踢球者:当我使用

curl -Lk -X GET "http://gdata.youtube.com/feeds/api/videos/MShbP3OpASA/comments?alt=json&start-index=1&max-results=50&orderby=published"

openSearch$totalResults等于3141,即评论的实际数量。

现在我的问题是:由于v2 API大约在一周前被正式弃用,Google是否可能只对评论设置限制?那么只有前100条评论可以访问吗?由于v3 API不允许进行注释检索,这对我来说非常糟糕。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:3)

我已经找到了如何使用json响应中嵌入的导航链接检索所有注释。

假设您使用类似的链接检索第一个链接(这里是python,但您明白了这一点):

r'https://gdata.youtube.com/feeds/api/videos/'+ aVideoID + r'/ comments?alt = json& start-index = 1& max-results = 50& prettyprint = true& orderby = published'

嵌入在json下的“feed”(和注释之前)将是一个名为“link”的四元素数组。第四个元素将被称为“rel”:“next”,在“href”下面会有一个链接,您可以使用它来获取下一个50条评论。链接看起来像:

https://gdata.youtube.com/feeds/api/videos/fH0cEP0mvlU/comments?alt=json&orderby=published&alt=json&start-token=EgkI2NqyoZDRvgIosK%2FPosPRvgIw653cmsXRvgI4AUAC&max-results=50&orderby=published

原始网址为:

https://gdata.youtube.com/feeds/api/videos/fH0cEP0mvlU/comments?alt=json&start-index=1&max-results=50&prettyprint=true&orderby=published

如果你按照下一个链接,它将返回类似的json到原始链接,另外50条评论。一遍又一遍地继续这个过程,直到你得到所有的评论(在我的代码中我检查json中没有这个项目或json中的零注释以确定何时停止)。

您需要在原始网址中使用“& orderby = published”,否则“下一个”链接最终会变得太大并导致错误(API会使用该标记来跟踪您看过哪些评论在默认的orderby中需要很多空间)。关于已发布的orderby的某些内容使“start-token”保持较小,而在使用默认orderby约500条注释之后,您将开始获得414 Request URI太长的错误。

希望这有帮助。