startindex> = 100时空响应

ale*_*lex 7 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"
Run Code Online (Sandbox Code Playgroud)

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

深入挖掘,在我的响应中,值为openSearch$totalResults100,所以根据这个资源,这似乎是预期的结果(尽管它告诉我某些错误信息,我没有得到?).

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

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

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

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

有没有人有任何想法?

dav*_*vec 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'

嵌入在“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 使用令牌中的某些内容来跟踪您在默认 orderby 中看到的评论)很大的空间)。已发布的 orderby 的某些内容使“start-token”保持较小,而在使用默认 orderby 进行大约 500 条评论后,您将开始收到 414 请求 URI 太长错误。

希望这可以帮助。