经过大量的调试,我终于发现,在使用 v2 YouTube-API 获取评论时,看似 Youtube 只发布前 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 不允许检索评论,这对我来说将是一件非常令人沮丧的事情。
有没有人有任何想法?
最佳答案
我已经弄清楚如何使用嵌入在 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'
嵌入在“feed”下(以及评论之前)的 json 中将是一个名为“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
对于原始 URL:
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 中的零评论以确定何时停止)。
您需要原始 URL 中的“&orderby=published”,否则“下一个”链接最终会变得太大并导致错误(API 使用 token 中的某些内容来跟踪您在默认 orderby 中看到的评论)很大的空间)。关于已发布的 orderby 的某些内容使“start-token”保持较小,而在使用默认 orderby 进行大约 500 条评论后,您将开始收到 414 Request URI too long 错误。
希望这可以帮助。
关于youtube-api - startindex >= 100 时的空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22288123/