从youtube检索评论会导致非确定性行为

时间:2014-08-12 20:17:42

标签: python youtube youtube-api

目前我正在尝试使用python检索YouTube视频的所有评论。我使用以下代码来获取评论

#!/usr/bin/env python
import time
from gdata.youtube import service
import xmltodict

def comments_generator(client, video_id):
    baseUrl="http://gdata.youtube.com/feeds/api/videos/%s/comments?orderby=published&max-results=50" %video_id
    comment_feed = client.GetYouTubeVideoCommentFeed(baseUrl)
    while comment_feed is not None:
        for comment in comment_feed.entry:
            yield comment
        next_link = comment_feed.GetNextLink()
        if next_link is None:
            comment_feed = None
        else:
            try:
                comment_feed = client.GetYouTubeVideoCommentFeed(next_link.href)
            except:
                print "Something went wrong. Couldn't follow next link"
                comment_feed = None

client = service.YouTubeService()
commentNumber=0
for comment in comments_generator(client, "Ci0HsPELE2o"):
        commentNumber+=1
        dictVersion=xmltodict.parse(str(comment))
        replyCount = str(dictVersion["ns0:entry"]["ns1:replyCount"])
        author_name = comment.author[0].name.text
        date = comment.published
        text = comment.content.text
        publishTime = date.text.split("T")[0]
        print "Comment #%s %s" %(commentNumber,date.text)
        print("{}: {}".format(author_name, text))
        print "Reply-Count: %s" %replyCount
        print "\n"

这是thread中答案的改进/调整版本。

原则上它起作用但有一些非确定性行为。 当我尝试检索某些Youtube视频的所有评论时,我会不时收到不同数量的评论,但是当我在浏览器中打开视频时,评论的数量并没有改变。

然后我进一步调查,发现在时间顺序列表中间的一些评论有时会丢失,有时不会,似乎对所有尝试都有相同的评论,但数量不一。这适用于某些特定的YouTube视频,但显然不是全部。 对于某些视频,评论数量最多为100条评论中的100条。

这种非确定性行为的一个例子是具有ID的视频: Ci0HsPELE2o

预期的行为是,我得到30条真正的评论(没有回复),有时候我会得到每一条评论,但是当我在1小时左右尝试完全相同的程序时,缺少一条评论,大部分时间都是这样的:

Comment #19 2011-09-03T10:44:07.000Z
Author: Stephane Keeper

我尝试了一切,但没有找到任何系统的问题,因此无法修复它。

任何帮助表示感谢。

编辑:添加了再现问题的工作示例

0 个答案:

没有答案