使用YouTube Data API v3时遇AttributeError: 'str'对象无'request'属性
解决AttributeError: 'str' object has no attribute 'request'(YouTube Data API v3调用问题)
错误原因
调用googleapiclient.discovery.build()时参数传递错误。build函数的第三个位置参数是用于处理HTTP请求的http对象,你直接传入了API密钥字符串,导致生成的youtube对象内部将该字符串作为HTTP客户端使用,而字符串没有request方法,触发报错。
修正方案
1. 修正build函数调用
必须显式指定developerKey参数传递API密钥,而非直接传位置参数。
2. 区分频道ID与用户名参数
如果传入的是UC开头的频道ID,使用id参数;如果是用户名,才用forUsername参数,避免返回空结果。
修正后的完整代码
from googleapiclient.discovery import build # 替换为你的实际API密钥 API_KEY = "your_real_api_key" # 替换为目标频道ID(UCxxx格式)或用户名 CHANNEL_TARGET = "your_target_channel_id_or_username" # 正确构建YouTube API客户端 youtube = build("youtube", "v3", developerKey=API_KEY) def get_channel_stats(youtube, channel_identifier): # 根据传入的类型选择对应参数 request_params = { "part": "snippet,contentDetails,statistics" } if channel_identifier.startswith("UC"): request_params["id"] = channel_identifier else: request_params["forUsername"] = channel_identifier request = youtube.channels().list(**request_params) response = request.execute() return response # 调用函数并打印结果 channel_stats = get_channel_stats(youtube, CHANNEL_TARGET) print(channel_stats)
额外注意事项
- 确保Google Cloud控制台中已启用YouTube Data API v3,且API密钥未被限制或超出配额。
- 若仍有问题,检查API密钥是否正确,以及目标频道是否公开可访问。
内容的提问来源于stack exchange,提问作者Fazal
相关产品推荐
相关产品推荐

