使用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接口的配额消耗不同,具体以官方文档标注为准
二、评论及回复总数限制的有效实现
你的原代码存在几个问题导致计数器无效:
- 初始化
replycount = 0后直接判断replycount > 0,永远不会处理评论回复 - 分页请求时未传递
pageToken,导致重复获取第一页数据 - 未在添加评论/回复时累计计数并判断阈值
以下是修正后的代码,实现了总数限制功能:
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
相关产品推荐
相关产品推荐

