批量请求YouTube视频数据时遭遇'invalid filter parameter'错误求助
解决YouTube API批量获取视频数据的400错误
错误原因
你的请求触发400错误有两个核心问题:
videos.list接口的id参数要求传入逗号分隔的字符串,而非直接传递Python数组- 该接口单次请求最多支持查询50个视频ID,你尝试一次传999个远超官方限制
修复方案
步骤1:分批处理视频ID
将2055个视频ID分成每批50个的子数组,避免单次请求超限。
步骤2:转换参数格式
每批ID数组转成逗号分隔的字符串,符合API参数要求。
步骤3:循环发起请求并合并结果
修复后的完整代码
all_video_data = [] # 每批最多50个ID,分批处理 batch_size = 50 for i in range(0, len(video_ids), batch_size): batch_ids = video_ids[i:i+batch_size] # 将数组转为逗号分隔的字符串 ids_str = ','.join(batch_ids) try: request = youtube.videos().list( part="snippet,contentDetails,statistics", id=ids_str ) response = request.execute() for video in response['items']: data_keep = { 'snippet': ['channelTitle', 'title', 'publishedAt'], 'statistics': ['viewCount', 'likeCount', 'commentCount'], 'contentDetails': ['duration'] } video_data = {'video_id': video['id']} for k in data_keep.keys(): for v in data_keep[k]: # 处理可能缺失的字段(比如部分视频关闭了评论,commentCount可能不存在) video_data[v] = video[k].get(v, None) all_video_data.append(video_data) except Exception as e: print(f"处理批次{i//batch_size +1}时出错: {str(e)}") continue
额外注意事项
- 加入了字段缺失的容错处理(
get(v, None)),避免因部分视频缺少统计字段导致代码崩溃 - 保留异常捕获,某一批次出错不会中断整个任务
- 严格遵循API限制,既保证请求合法,也能避免触发限流
内容的提问来源于stack exchange,提问作者Panda Panda
相关产品推荐
相关产品推荐

