如何用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
相关产品推荐
相关产品推荐

