YouTube API V3获取订阅时出现404 subscriberNotFound错误求助
我之前帮朋友排查过类似的问题,新账号调用subscriptions.listSubscriptions返回404的subscriberNotFound错误,旧账号正常,大概率是下面这几个原因之一,你可以逐个排查:
1. 新账号的YouTube频道未完成初始化
很多时候新注册的Google账号,虽然可以登录YouTube,但其实频道还没完成创建流程(比如没设置频道名称、没上传过视频/头像,甚至没在网页端打开过YouTube频道页面)。YouTube API的mine=true是基于关联的YouTube频道来查询的,如果频道处于未激活状态,API就找不到对应的订阅者实体。
解决方法:
- 用新账号登录YouTube网页端,进入「我的频道」页面,按照提示完成频道的基本设置(比如设置频道名称),确保频道正常显示。
- 完成后等待5-10分钟(Google的系统同步需要时间),再重新调用API试试。
2. OAuth授权的权限范围不匹配
调用订阅列表接口需要至少https://www.googleapis.com/auth/youtube.readonly的权限范围,如果你的新账号在授权时没有请求这个(或者用了更低的范围),accessToken就没有权限访问订阅数据,也可能触发这个错误(虽然通常权限不够会返回403,但某些场景下会返回404)。
解决方法:
- 检查你的OAuth授权流程,确认请求的权限范围包含
youtube.readonly(或者更高的youtube/youtube.force-ssl)。 - 注意:如果之前已经授权过,需要让新账号重新授权——可以在Google账号的「安全」-「第三方应用访问」里移除你的应用,再重新走授权流程获取新的token。
3. AccessToken没有正确关联新账号
有可能你的PHP客户端缓存了旧账号的accessToken,或者授权流程中不小心用了旧账号登录,导致当前使用的token其实是旧账号的,但你误以为是新账号的。
解决方法:
- 可以调用
oauth2.v2.userinfo.get接口打印当前accessToken对应的用户信息,确认是不是新账号的信息。 - 清除PHP客户端的token缓存(比如如果用了文件缓存就删除缓存文件,用session缓存就清空session),然后重新走新账号的授权流程,获取全新的accessToken。
4. 新账号的API配额是否耗尽?
这个可能性相对较低,因为配额耗尽通常会返回403的quotaExceeded错误,但还是可以检查一下:
- 登录Google Cloud Console,进入你的项目,查看YouTube Data API v3的配额使用情况,确认新账号的请求没有超出配额限制。
补充测试建议
你可以先尝试用新账号在Google官方的API测试工具里调用subscriptions.list接口,选择mine=true参数,看看能不能拿到结果。如果测试工具里也报错,那基本就是账号本身的问题;如果测试工具里正常,那就是你的PHP代码或者token的问题。
内容的提问来源于stack exchange,提问作者袠胁邪薪 袥邪锌褌械褏芯胁

