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

如何解决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!")

代码改动说明:

  1. 改用search.list接口:搜索频道名称,指定type=channel并按order=viewCount排序,确保返回的第一个结果是最具影响力的主频道。
  2. 依赖唯一频道ID:从搜索结果中提取频道ID(YouTube的唯一标识),彻底避免同名冲突。
  3. 优化输出体验:添加了订阅数格式化逻辑,让大数字更易读(比如27800000显示为27.8M)。

额外小技巧:

可以让用户输入频道的@handle(比如@Markiplier),现在YouTube的handle是全局唯一的,搜索结果会更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:12:28