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

如何通过Youtube Data API获取多个视频ID的评论?

如何通过YouTube API批量获取多个视频的评论列表

问题背景

你尝试通过拼接多个视频ID的方式调用commentThreads.list接口,但返回了videoNotFound错误。你的视频ID列表:

video_ids = [
    'QSWYyoF79oE', 
    'Wh66ThpxvI4', 
    'weG-sqHHCB8', 
    '8dgEh5crj0I', 
    'SydRcrZ166A', 
    'Svz5F8J1Ap0', 
    'Lj_zPn3GsjE', 
    'g89VhNDBrsY', 
]

错误代码:

request = youtube.commentThreads().list(part='snippet, replies', videoId= ','.join(video_ids), maxResults = 50)
response = request.execute()

返回错误:

returned "The video identified by the videoId parameter could not be found.". Details: "[{'message': 'The video identified by the videoId parameter could not be found.', 'domain': 'youtube.commentThread', 'reason': 'videoNotFound', 'location': 'videoId', 'locationType': 'parameter'}]"

错误原因

YouTube Data API的commentThreads.list接口不支持在单个请求中传入多个videoId参数。你拼接的字符串会被API当作一个完整的视频ID去查找,自然无法匹配到有效视频,因此返回videoNotFound错误。

解决方法

1. 循环遍历单个请求(最直接方案)

遍历视频ID列表,对每个ID单独调用API获取评论,同时处理分页逻辑(如果评论超过50条):

video_ids = [
    'QSWYyoF79oE', 
    'Wh66ThpxvI4', 
    'weG-sqHHCB8', 
    '8dgEh5crj0I', 
    'SydRcrZ166A', 
    'Svz5F8J1Ap0', 
    'Lj_zPn3GsjE', 
    'g89VhNDBrsY', 
]

all_comments = []

for video_id in video_ids:
    try:
        # 初始请求获取第一页评论
        request = youtube.commentThreads().list(
            part='snippet, replies',
            videoId=video_id,
            maxResults=50
        )
        response = request.execute()
        
        # 收集当前视频的评论
        all_comments.extend(response.get('items', []))
        
        # 处理分页,直到没有下一页
        while 'nextPageToken' in response:
            next_request = youtube.commentThreads().list(
                part='snippet, replies',
                videoId=video_id,
                maxResults=50,
                pageToken=response['nextPageToken']
            )
            response = next_request.execute()
            all_comments.extend(response.get('items', []))
            
    except Exception as e:
        print(f"视频 {video_id} 评论获取失败: {str(e)}")

print(f"累计获取评论数: {len(all_comments)}")

2. 批量请求优化(提升效率)

如果视频数量较多,可使用YouTube API的批量请求功能,将多个API调用打包成一个HTTP请求发送,减少网络开销:

from googleapiclient.http import BatchHttpRequest

video_ids = [
    'QSWYyoF79oE', 
    'Wh66ThpxvI4', 
    'weG-sqHHCB8', 
    '8dgEh5crj0I', 
    'SydRcrZ166A', 
    'Svz5F8J1Ap0', 
    'Lj_zPn3GsjE', 
    'g89VhNDBrsY', 
]

all_comments = []

# 定义批量请求的回调函数
def batch_callback(request_id, response, exception):
    if exception:
        print(f"请求 {request_id} 失败: {str(exception)}")
    else:
        all_comments.extend(response.get('items', []))

# 创建批量请求对象
batch = youtube.new_batch_http_request(callback=batch_callback)

# 为每个视频ID添加请求到批量任务
for video_id in video_ids:
    request = youtube.commentThreads().list(
        part='snippet, replies',
        videoId=video_id,
        maxResults=50
    )
    batch.add(request, request_id=video_id)

# 执行批量请求
batch.execute()

# 注意:批量请求仅处理第一页评论,若需获取全部评论,仍需针对单视频单独处理分页
print(f"累计获取评论数: {len(all_comments)}")

注意事项

  • 配额限制:每个commentThreads.list请求(包括批量请求中的子请求)会消耗1个API配额单位,需控制每日请求量避免超出配额。
  • 异常处理:部分视频可能关闭评论、已删除或存在权限限制,需在代码中捕获异常,避免循环中断。
  • 分页逻辑:单视频评论超过50条时,必须通过nextPageToken获取后续页的评论。

内容的提问来源于stack exchange,提问作者A fish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:40