经过大量的调试后,终于发现我看到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不允许进行注释检索,这对我来说非常糟糕。
有没有人有任何想法?
答案 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条评论。链接看起来像:
原始网址为:
如果你按照下一个链接,它将返回类似的json到原始链接,另外50条评论。一遍又一遍地继续这个过程,直到你得到所有的评论(在我的代码中我检查json中没有这个项目或json中的零注释以确定何时停止)。
您需要在原始网址中使用“& orderby = published”,否则“下一个”链接最终会变得太大并导致错误(API会使用该标记来跟踪您看过哪些评论在默认的orderby中需要很多空间)。关于已发布的orderby的某些内容使“start-token”保持较小,而在使用默认orderby约500条注释之后,您将开始获得414 Request URI太长的错误。
希望这有帮助。