如何使用YouTube Data API V3获取所有评论(超过100个)?

时间:2016-04-12 23:21:49

标签: python youtube-api youtube-data-api

我目前正在开展一个项目,我需要收集一些特定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"]

2 个答案:

答案 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)