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

使用Google API爬取YouTube数据时遇HttpError 400错误求助

YouTube API获取视频详情报错排查与解决

问题描述

拥有100+个YouTube视频ID,需要获取每个视频的标题、播放量、点赞数等详情,此前运行正常的Python代码突然报错。

示例ID列表:

video_id=['GGHiHodljug','PY8cEyi2MzM','QTCcJipjgxI']

原获取视频详情函数代码:

def get_video_details(youtube, video_id):
    all_video_stats = []
    
    for i in video_ids:
        request = youtube.videos().list(part='snippet,statistics',id=video_id)
        response = request.execute()
        
        for video in response['items']:
            video_stats = dict(Title = video['snippet']['title'],
                               Published_date = video['snippet']['publishedAt'],
                               Views = video['statistics']['viewCount'],
                               Likes = video['statistics']['likeCount'],
                               #Dislikes = video['statistics']['dislikeCount'],
                               Comments = video['statistics']['commentCount']
                               #Shares = video['statistics']['']
                               )
            all_video_stats.append(video_stats)
    
    return all_video_stats

调用函数video_details = get_video_details(youtube,video_id)时返回错误:

HttpError: <HttpError 400 when requesting returned "The request specifies an invalid filter parameter.". Details: "[{'message': 'The request specifies an invalid filter parameter.', 'domain': 'youtube.parameter', 'reason': 'invalidFilters', 'location': 'parameters.', 'locationType': 'other'}]">

错误分析

  1. 变量名错误:函数参数定义为video_id,但循环中使用了未定义的video_ids,导致每次请求都传递了完整的100+个视频ID列表
  2. API限制触发:YouTube Data API的videos.list接口规定,id参数最多允许一次性传入50个视频ID,当传入数量超过限制时,会返回invalidFilters错误

修复方案

  1. 修正变量名错误,确保循环遍历传入的视频ID列表
  2. 对视频ID列表进行分批处理,每批最多50个ID,批量发起请求以符合API限制
  3. 增加字段缺失的容错处理,避免因部分视频缺少统计字段导致报错

修复后的完整代码

def get_video_details(youtube, video_ids):
    all_video_stats = []
    # 分批处理,每批最多50个ID(API限制)
    batch_size = 50
    for i in range(0, len(video_ids), batch_size):
        batch = video_ids[i:i+batch_size]
        # 将批量ID用逗号拼接,符合API参数要求
        request = youtube.videos().list(
            part='snippet,statistics',
            id=','.join(batch)
        )
        response = request.execute()
        
        for video in response['items']:
            # 容错处理:避免字段缺失导致KeyError
            snippet = video.get('snippet', {})
            statistics = video.get('statistics', {})
            
            video_stats = {
                'Title': snippet.get('title', 'N/A'),
                'Published_date': snippet.get('publishedAt', 'N/A'),
                'Views': int(statistics.get('viewCount', 0)),
                'Likes': int(statistics.get('likeCount', 0)),
                'Comments': int(statistics.get('commentCount', 0))
            }
            all_video_stats.append(video_stats)
    
    return all_video_stats

使用说明

调用修复后的函数时,确保传入的参数名称与函数定义一致:

video_details = get_video_details(youtube, video_id)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:20:26