youtube.300live.com 设置 › 系统方案 › Related channels

Related channels — 规则说明

YouTube 关联频道分析的技术原理、采用方案、指标定义与合规约束。本文为 InnerTube_Sidebar 标签页的配套规则文档,供研究人员理解结果含义、复用 研究方法、并避免触发平台风控。

章节
  1. YouTube 关联频道的推荐位置
  2. 技术方案对比 — 为何选 InnerTube 直调
  3. InnerTube 核心端点速览
  4. 参考的开源实现
  5. 本系统采用的分析流程
  6. 结果指标解读 — Coverage / Hits / Source coverage
  7. 研究方法建议
  8. 限流与合规 — YouTube 频率检测机制

1. YouTube 关联频道的推荐位置

YouTube 没有"同类作者推荐"独立模块,但通过多个推荐位事实上承担了 同类作者发现的功能。其策略偏向以视频为单位推荐,而非以频道为单位 推荐。研究关联频道时,主要观测点如下:

位置触发场景稳定性是否本系统采用
Up Next 右侧推荐栏
(接下来播放)
播放页主推荐位,根据当前视频内容、标签、观众画像生成相似主题视频 最高
视频下方"来自相关频道"
(From related channels)
移动端及部分桌面端布局聚合同类作者的视频 否(移动端布局,难批量化)
首页 Feed / 搜索结果 观看后混入同类型创作者的隐性推荐 否(高度个性化,难匿名复现)
People also watched 移动端"其他人也观看了"模块 否(信号子集已包含在 Up Next)

综合稳定性、可批量化、可匿名复现三个维度,Up Next 右侧推荐栏 是关联频道分析的最佳锚点,也是本系统唯一采用的数据源。

2. 技术方案对比 — 为何选 InnerTube 直调

"拿到 Up Next sidebar"在工程上有两条路:直接调用 YouTube 内部 InnerTube API,或用 headless 浏览器模拟真实播放。我们选择前者, 原因如下:

维度 InnerTube 直调 本系统 模拟浏览器 (Playwright)
个性化 无 — 匿名 + 算法默认推荐 可登录账号拿到个性化结果
速度 毫秒级 HTTP 调用 10–30 秒每页 (要等渲染)
可批量 极易 (并发限流即可) 难 (CDP 资源密集)
稳定性 API 层稳定,schema 偶尔变 受 DOM 反爬、A/B 渲染影响大
能否做链式追踪 要自己重复调 next 串起来 天然支持(连续点击)
ToS 风险 灰色地带(开源生态广泛使用) 同等灰色,且更易被识别为爬虫

研究"该达人在标准推荐池里和谁绑定"用 InnerTube 直调最干净; 研究"被推荐链条会把用户带到哪里"才需要模拟浏览器。本系统聚焦前者。

合规说明:InnerTube 是 YouTube 内部 RPC,未公开但已被开源 生态长期逆向使用(yt-dlp、youtube.js、NewPipe、Invidious 等)。 本系统仅供产品研究、非商业用途,且严格遵守第 8 章的频率约束。

3. InnerTube 核心端点速览

InnerTube 端点形如 https://www.youtube.com/youtubei/v1/<name>, 所有调用 POST JSON,必须带 context.client 表明客户端身份。 key 是 YouTube Web 客户端发请求时一直在用的公共 key,多年未变。

端点用途本系统使用
/search 搜索视频 / 频道 / 播放列表
/browse 浏览频道、播放列表、首页 Feed 间接(HTML scrape 替代)
/player 视频播放数据 (流地址、字幕)
/next watchNext 播放页下一首推荐、评论入口、相关视频列表 — Up Next 真正来源 主用
/resolve_url 把短链或 vanity URL 解析成内部 ID 否(用 HTML 反查)

4. 参考的开源实现

本系统的解析逻辑参考以下开源项目,遇到 schema 变动可对照修复:

项目语言用途
LuanRT/YouTube.js Node / TS 当前最完整的 InnerTube 客户端,youtube.getInfo(videoId) 直接返回 watch_next_feed,是端点结构的首要参考
yt-dlp/yt-dlp Python extractor 内有大量 InnerTube 调用细节,包括签名绕过和不同 client 配置
TeamNewPipe/NewPipeExtractor Java Android 客户端 NewPipe 的核心库,把 InnerTube 各端点封装得很清楚
iv-org/invidious Crystal 开源 YouTube 前端代理,大量调用 InnerTube
tombulled/innertube Python 偏文档性质,README 列出主要端点和用途,适合快速了解全貌

5. 本系统采用的分析流程

从一个达人 handle 出发,到最终生成 Top 10 关联频道榜:

输入 @handleUCxxx
解析 channelId
(handle 反查)
拿最近 N 条视频
(默认 5)
逐条调 /next
抓 sidebar
聚合 + 去重
(排除原始频道)
Top 10 排名
+ HTML 报告

关键解析逻辑

Sidebar 在 InnerTube 响应中曾用 compactVideoRenderer schema,新版改用 lockupViewModel,路径为 metadata.lockupMetadataViewModel.metadata.contentMetadataViewModel.metadataRows。 本系统按精确路径优先提取,再用一个 _deep_find_uc 兜底——整棵渲染器子树扫一遍找 UC 开头的 browseId,几乎不可能漏。

多源支持

支持同时分析多个达人,聚合时按 Source coverage(在多少个源 频道里出现)排序,能区分"该圈子核心同类"和"单达人特定关联"。

诊断与降级

每条视频解析时会记录"items 数"和"with channelId 数",差距大说明 schema 又变了;对应视频的原始 JSON 会自动落到 raw_next_<videoId>.json,便于后续修复定位。

6. 结果指标解读

Coverage(视频覆盖率)— 单源场景

在 N 条源视频的 sidebar 中,该关联频道出现在多少条里(每条只算一次)。 5/5 = 该频道在所有 5 条源视频的 sidebar 里都出现过, 是"无论该达人发什么内容 YouTube 都稳定推"的结构性同类绑定证据。 1/52/5 更多是单视频上下文相关。

Hits(总命中次数)

该关联频道在所有源视频 sidebar 里出现的总次数, 同一条 sidebar 里出现 2 次也分别计为 2,不去重

Source coverage(源频道覆盖率)— 多源场景

在 K 个源频道(每个源跑了 N 条视频)中,该关联频道出现在多少个源 频道的 sidebar 里。K/K 是"该达人圈子内通用核心", (K−1)/K 是"几乎通用,仅缺一个源"。这两档默认勾选, 映射自单源版本的 5/5 + 4/5 规则。

组合判读:研究结构性同类创作者,看 Source coverage 高的; 研究内容深度绑定,看 Hits 远大于 Videos 的;研究单视频偶发推荐, 看 Coverage 低但 Hits 集中的。

7. 研究方法建议

8. 限流与合规 — YouTube 频率检测机制

短时间内同一账号 / IP 大量请求会触发:

维度本系统约束
请求间隔 每次 sidebar 请求间隔 ≥ 1 秒(加随机抖动 0.5–2 秒)
批量大小 单次分析最多 20–30 个频道的 sidebar,不要一次跑几百个
每日上限 带登录态的请求每天不超过 200 次
错误处理 遇到 429 立即暂停,等待 5–10 分钟后重试
缓存策略 同一 (videoId, hl, gl) 30 分钟内复用结果,避免重复请求
并发上限 后端默认 concurrency=3,可通过环境变量 INNERTUBE_CONCURRENCY 调节
风控触发后的标准处置:
  • 立即停止所有 sidebar 拉取,进入 cooldown 模式 5–10 分钟
  • 检查 PM2 日志 pm2 logs innertube-api,确认错误状态码
  • 若多次 429 在短时间复发,暂停一天后再恢复
  • 避免在风控期间登录 Google 账号访问 YouTube,以免账号被关联到 IP

本文档对应 InnerTube_Sidebar 标签页 v1.0,配套部署: /var/www/youtube-tools/innertube-server/(Express + PM2) + nginx /innertube-api/ 反代 + 前端 /innertube_sidebar.html