You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用YouTube Data API v3获取评论:Quota说明与数量限制问询

YouTube Data API v3评论获取:Quota说明与总数限制实现

一、Quota定义说明

  • YouTube Data API v3的Quota(配额)是Google Cloud为每个开发者项目分配的每日API调用额度,以「配额单位(Quota Units)」为计算单位
  • 调用commentThreads.list接口(获取评论线程),每次成功请求会消耗1个配额单位
  • 免费版项目默认每日配额为10000个单位,当日用完后API会返回错误,需等待次日太平洋时间零点重置;若需更高额度,可在Google Cloud控制台升级付费方案
  • 注意:不同API接口的配额消耗不同,具体以官方文档标注为准

二、评论及回复总数限制的有效实现

你的原代码存在几个问题导致计数器无效:

  1. 初始化replycount = 0后直接判断replycount > 0,永远不会处理评论回复
  2. 分页请求时未传递pageToken,导致重复获取第一页数据
  3. 未在添加评论/回复时累计计数并判断阈值

以下是修正后的代码,实现了总数限制功能:

from googleapiclient.discovery import build

api_key = 'your_api_key_here'

def video_comments(video_id, max_total=100):
    comments = []
    total_count = 0

    youtube = build('youtube', 'v3', developerKey=api_key)

    # 初始请求,设置maxResults控制每页返回数量(默认20,最大100)
    video_response = youtube.commentThreads().list(
        part='snippet,replies',
        videoId=video_id,
        maxResults=100
    ).execute()

    while video_response and total_count < max_total:
        for item in video_response['items']:
            # 添加顶级评论
            comment_text = item['snippet']['topLevelComment']['snippet']['textDisplay']
            comments.append(comment_text)
            total_count += 1
            if total_count >= max_total:
                break

            # 处理评论回复
            if 'replies' in item:
                for reply in item['replies']['comments']:
                    reply_text = reply['snippet']['textDisplay']
                    comments.append(reply_text)
                    total_count += 1
                    if total_count >= max_total:
                        break
                if total_count >= max_total:
                    break

        if total_count >= max_total:
            break

        # 分页请求必须传递pageToken
        if 'nextPageToken' in video_response:
            video_response = youtube.commentThreads().list(
                part='snippet,replies',
                videoId=video_id,
                pageToken=video_response['nextPageToken'],
                maxResults=100
            ).execute()
        else:
            break

    print(f"共获取{total_count}条评论及回复")
    print(comments)

video_id = "cOQQEvemIHs"
video_comments(video_id, max_total=100)  # 传入需要限制的总数

关键实现细节:

  • 新增total_count计数器,每次添加评论或回复时递增
  • 每一步添加后判断是否达到max_total阈值,达到则逐层跳出循环
  • 分页请求时传递pageToken,确保获取下一页数据
  • 设置maxResults=100减少API调用次数,降低配额消耗
  • 修复了原代码中无法获取回复的逻辑错误

内容的提问来源于stack exchange,提问作者Viknesh TPK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:13:15