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

如何用Youtube Data APIv3批量获取视频统计数据?报错及限额咨询

问题分析与解决办法

1. 你的代码里的两个关键错误

  • Part参数格式错误:你在part参数里写了'snippet, contentDetails, statistics',注意逗号后面的空格!Youtube Data API要求part的各个值之间只能用逗号分隔,不能加空格。这个错误会导致API识别无效的参数,从而返回400错误。
  • 函数参数命名与逻辑的混淆:你的函数定义是def video_stats(videoID):,但调用时传入的是列表idlist,虽然','.join(videoID)在语法上是对的,但参数名videoID容易让人误以为是单个ID,建议改成video_ids更清晰,避免后续维护出错。

修正后的代码片段:

idlist = ['OSUxrSe5GbI', 'iMOYZJq6XQo', 'bcHTl9h7TWI', 'qS6F64mj6LY', 'kLpH1nSLJSs']
def video_stats(video_ids):
    try:
        print(video_ids)
        # 去掉part参数里的空格
        res = youtube.videos().list(part='snippet,contentDetails,statistics', id=','.join(video_ids)).execute()
        print(','.join(video_ids))
        return res
    except Exception as e:
        return e
print(video_stats(idlist))

2. 关于视频ID数量的限制

Youtube Data API v3的videos.list接口对id参数的传入数量有明确限制:单次请求最多只能传入50个视频ID。你的列表有274个ID,必须分批处理,每次请求最多传50个,循环完成所有请求。

举个分批处理的简单示例:

def batch_video_stats(all_video_ids):
    batch_size = 50
    results = []
    # 按每50个ID分一批
    for i in range(0, len(all_video_ids), batch_size):
        batch_ids = all_video_ids[i:i+batch_size]
        try:
            res = youtube.videos().list(
                part='snippet,contentDetails,statistics',
                id=','.join(batch_ids)
            ).execute()
            results.extend(res['items'])
        except Exception as e:
            print(f"处理批次{i//batch_size +1}时出错: {e}")
            continue
    return results

# 调用示例
all_stats = batch_video_stats(idlist)
print(f"共获取到{len(all_stats)}个视频的统计数据")

这样就能避免因为ID数量过多导致的API错误,同时保证所有数据都能被获取到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:24:24