我目前正在开展一个项目,我需要收集一些特定YouTube视频的所有评论 我可以使用commentThreads()。list function(More here)获得最多100条评论。有没有办法得到所有评论?
我使用的是Google YouTube数据API开发人员指南提供的以下功能。
def get_comment_threads(youtube, video_id):
results = youtube.commentThreads().list(
part="snippet",
maxResults=100,
videoId=video_id,
textFormat="plainText"
).execute()
for item in results["items"]:
comment = item["snippet"]["topLevelComment"]
author = comment["snippet"]["authorDisplayName"]
text = comment["snippet"]["textDisplay"]
print "Comment by %s: %s" % (author, text)
return results["items"]
答案 0 :(得分:0)
如上面的评论所述,您可以简单地使用next_page_token并调用while循环,直到停止获取下一页令牌为止。但请注意,某些视频的评论确实非常多,因此加载时间会很长。
此外,我正在写扩展您上面提到的代码。
我还从一些我不记得的github仓库中复制了这段代码的一部分。
更新您先前在get_comment_threads函数中使用的youtube和video_id变量。
def load_comments(match):
for item in match["items"]:
comment = item["snippet"]["topLevelComment"]
author = comment["snippet"]["authorDisplayName"]
text = comment["snippet"]["textDisplay"]
print("Comment by {}: {}".format(author, text))
if 'replies' in item.keys():
for reply in item['replies']['comments']:
rauthor = reply['snippet']['authorDisplayName']
rtext = reply["snippet"]["textDisplay"]
print("\n\tReply by {}: {}".format(rauthor, rtext), "\n")
def get_comment_threads(youtube, video_id):
results = youtube.commentThreads().list(
part="snippet",
maxResults=100,
videoId=video_id,
textFormat="plainText"
).execute()
return results
video_id = ""
youtube = ""
match = get_comment_thread(youtube, video_id)
next_page_token = match["nextPageToken"]
load_comments(match)
while next_page_token:
match = get_comment_thread(youtube, video_id)
next_page_token = match["nextPageToken"]
load_comments(match)
答案 1 :(得分:0)
要添加到@minhaj的答案中,
while循环将一直运行到最后一个commentThreads.list()响应,但是最后一个响应将没有nextPageToken
键,并且会抛出键错误。
一个简单的尝试,除了可以解决这个问题之外:
try:
while next_page_token:
match = get_comment_thread(youtube, video_id)
next_page_token = match["nextPageToken"]
load_comments(match)
except KeyError:
match = get_comment_thread(youtube, video_id)
load_comments(match)