如何解决YouTube API因同名频道导致订阅数查询不准确的问题?
解决YouTube API同名频道导致订阅数错误的问题
这个问题我太熟悉了!你遇到的情况是因为forUsername参数会返回第一个匹配到的同名频道,而不是你真正想找的那个大博主——毕竟总有小频道会蹭热门博主的名字,导致API返回了错误的结果。
为什么会这样?
YouTube的旧版用户名(forUsername对应的字段)并不是完全唯一的,或者有些用户注册了和热门博主同名的旧用户名,API会默认返回第一个匹配到的结果,这就导致你输入"Markiplier"时,拿到的是某个小同名频道的订阅数,而非主频道的27.8M。
解决方案:改用搜索API并按影响力排序
与其依赖容易重复的用户名,不如直接搜索频道名称,然后筛选出粉丝/浏览量最高的那个频道。这样不管有多少同名频道,都能拿到你想要的主频道数据。
修改后的代码如下:
import requests import json key = 'your_api_key_here' # 替换成你的API密钥 youtuber = input('What\'s the name of the youtuber: ') # 先用搜索API找到匹配的频道,按浏览量降序排序(浏览量高的通常是主频道) search_url = f'https://www.googleapis.com/youtube/v3/search?part=snippet&q={youtuber}&type=channel&order=viewCount&maxResults=5&key={key}' r = requests.get(search_url) search_results = json.loads(r.text) if not search_results.get('items'): print('Your youtuber doesn\'t exist ):') exit() # 获取第一个匹配频道的ID(频道ID是YouTube唯一标识,不会重复) channel_id = search_results['items'][0]['id']['channelId'] # 用频道ID获取准确的统计数据 channel_url = f'https://www.googleapis.com/youtube/v3/channels?part=statistics&id={channel_id}&key={key}' r = requests.get(channel_url) channel_data = json.loads(r.text) subs = channel_data['items'][0]['statistics']['subscriberCount'] # 可选:格式化订阅数让输出更友好 formatted_subs = f"{int(subs)/1000000:.1f}M" if int(subs) >= 1000000 else f"{int(subs)/1000:.1f}K" print(f"{youtuber} has {formatted_subs} subscribers! Woohoo!")
代码改动说明:
- 改用
search.list接口:搜索频道名称,指定type=channel并按order=viewCount排序,确保返回的第一个结果是最具影响力的主频道。 - 依赖唯一频道ID:从搜索结果中提取频道ID(YouTube的唯一标识),彻底避免同名冲突。
- 优化输出体验:添加了订阅数格式化逻辑,让大数字更易读(比如27800000显示为27.8M)。
额外小技巧:
可以让用户输入频道的@handle(比如@Markiplier),现在YouTube的handle是全局唯一的,搜索结果会更精准。
内容的提问来源于stack exchange,提问作者MmBaguette
相关产品推荐
相关产品推荐

