Python调用YouTube API查询自定义ID频道订阅数无items标签如何解决
问题根因
你混淆了YouTube两种频道ID的适用场景:
- 接口
id参数仅支持查询UC开头的原生频道ID - 你传入的自定义频道ID(格式多为
@xxx或用户自定义的短标识)无法被id参数识别,所以返回空结果集报错
修复方案
1. 接口参数调整
查询自定义ID的频道时,将请求参数替换为forHandle={自定义ID},该参数专门用于匹配用户自定义的频道标识。
2. 新增异常兼容逻辑
对API返回结果做非空判断,避免直接索引items字段抛出异常。
修复后参考代码
import urllib.request import json API_KEY = "你的API密钥" def get_subscriber_count(channel_identifier): # 先判断是原生UC ID还是自定义ID,选择对应参数 if channel_identifier.startswith("UC"): url = f"https://www.googleapis.com/youtube/v3/channels?part=statistics&id={channel_identifier}&key={API_KEY}" else: # 自定义ID如果带@前缀可以先去掉,forHandle支持带@和不带@两种格式 handle = channel_identifier.lstrip("@") url = f"https://www.googleapis.com/youtube/v3/channels?part=statistics&forHandle={handle}&key={API_KEY}" data = urllib.request.urlopen(url).read() res = json.loads(data) # 先判断结果是否为空 if res["pageInfo"]["totalResults"] == 0: raise ValueError("未查询到对应频道信息,请检查传入的频道ID是否正确") subs = int(res["items"][0]["statistics"]["subscriberCount"]) return subs # 测试示例:原生ID查询 # print(get_subscriber_count("UC8butISFwT-Wl7EV0hUK0BQ")) # 测试示例:自定义ID查询,支持带@和不带@ # print(get_subscriber_count("@freecodecamp")) # print(get_subscriber_count("freecodecamp"))
内容的提问来源于stack exchange,提问作者Charo
相关产品推荐
相关产品推荐

