如何通过Youtube API正确获取我的完整订阅者列表?
YouTube API subscriptions.list 仅返回部分订阅者问题排查与修复
核心原因
youtube.subscriptions.list接口的mySubscribers参数存在固有返回限制:仅返回订阅时间较近、且用户主动将「订阅列表」设为公开状态的订阅者,无论频道总订阅量多少,该接口最多仅能返回最近1000条符合条件的订阅记录,更早的订阅记录即便用户设置为公开订阅也不会被接口返回。- 新订阅数据存在同步延迟:新产生的订阅行为会有24~48小时的API缓存周期,刚注册的测试账号订阅后不会立刻出现在接口返回结果中。
- 频道匹配错误:如果使用的是品牌频道而非个人账号频道,OAuth2认证时必须明确选择目标频道,否则API返回的是登录个人账号的订阅者列表,而非目标品牌频道的订阅者。
- 权限拦截概率:当前使用的
https://www.googleapis.com/auth/youtube权限足够,可额外添加https://www.googleapis.com/auth/youtube.readonly权限降低权限拦截概率。
代码可优化点
你现有的分页逻辑存在冗余,且缺少错误捕获,可调整为以下形式:
async function doGoogleScan() { try { let request = await youtube.subscriptions.list({ part: "snippet", auth: googleClient, mySubscribers: true, maxResults: 50, pageToken: googleNextKey }); // 输出当前页订阅者ID for (let entry of request.data.items) { console.log("sub: " + entry.snippet.channelId); } // 无下一页时终止遍历,无需重复循环 if (!request.data.nextPageToken) { console.log("===== 所有可获取的订阅者遍历完成,API可返回总数量:", request.data.pageInfo.totalResults, " ====="); googleScanRunning = false; return; } googleNextKey = request.data.nextPageToken; setTimeout(doGoogleScan, 3000); } catch (err) { console.error("API请求异常:", err.response?.data || err.message); googleScanRunning = false; } }
补充说明
如果需要获取全量订阅者数据,目前公开的YouTube Data API没有提供对应的能力,仅可通过YouTube Studio后台的订阅者导出功能获取完整列表。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

