目前我正在尝试使用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
我尝试了一切,但没有找到任何系统的问题,因此无法修复它。
任何帮助表示感谢。
编辑:添加了再现问题的工作示例