Skip to content

fix(bilibili/download): 付费内容下载前抛结构化 PAID_CONTENT#1947

Merged
jackwener merged 2 commits into
jackwener:mainfrom
huanghe:pr/bilibili-download-paid-precheck
Jun 15, 2026
Merged

fix(bilibili/download): 付费内容下载前抛结构化 PAID_CONTENT#1947
jackwener merged 2 commits into
jackwener:mainfrom
huanghe:pr/bilibili-download-paid-precheck

Conversation

@huanghe

@huanghe huanghe commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

下游需要在抓视频流之前就知道「付费 / 会员内容拿不到流」。原来对会员 / 付费视频直接调 yt-dlp,跑一半吐一坨 stderr 才失败,下游难以判定到底是「付费拦截」还是「真的下载出错」。本 PR 在 download 入口加一道付费预检。

配套的 bilibili / youtube video 付费字段透出是纯增量,拆在单独的 PR(#1946),本 PR 只含 download 的预检行为。

行为

  • 付费内容(view API 的 rights.pay 等付费标记)→ 在调 yt-dlp 之前抛结构化 CliError(code PAID_CONTENT,exit 77),而非 yt-dlp stderr;
  • 大会员专享(vip)再查一次 nav API:当前账号大会员有效就放行(cookie 喂给 yt-dlp 能拿到流);
  • 新增 --force:跳过预检(已购买 / 已充电 / 已开通会员场景的逃生舱);
  • 预检自身的 API 失败不阻塞下载(保守,保持旧行为 —— 预检只做拦截增强,不引入新失败面)。

副作用边界(行为改动)

  • 仅对付费 / 会员内容改变行为(从「yt-dlp 中途失败」变成「下载前结构化报错」);普通视频路径完全不变;
  • --force 让已购用户保留原下载能力,不会误伤;
  • 预检失败 fail-open(继续下载),最坏情况退回旧行为,不会因为预检本身挂掉而拦正常下载。

测试

  • 新增 clis/bilibili/download.test.js:付费内容拦截、vip 账号有效放行、--force 跳过预检、预检 API 失败不阻塞
  • bilibili 全量适配器测试 93 通过;tsc --noEmit 干净;check:silent-column-drop new=0;manifest 已重新生成(新增 --force 参数声明)

ml-scout and others added 2 commits June 14, 2026 06:45
下游需要在抓视频流之前就知道「付费 / 会员内容拿不到流」。原来对会员 / 付费视频直接调 yt-dlp,跑一半吐一坨 stderr 才失败,下游难以判定到底是「付费拦截」还是「真的下载出错」。本 PR 在 download 入口加一道付费预检。

## 行为

- 付费内容(view API 的 `rights.pay` 等付费标记)→ 在调 yt-dlp **之前**抛结构化 `CliError`(code `PAID_CONTENT`,exit 77),而非 yt-dlp stderr;
- 大会员专享(`vip`)再查一次 `nav` API:当前账号大会员有效就**放行**(cookie 喂给 yt-dlp 能拿到流);
- `--force` 跳过预检(已购买 / 已充电场景的逃生舱);
- 预检自身的 API 失败**不阻塞**下载(保守,保持旧行为 —— 预检只做拦截增强,不引入新的失败面)。

## 副作用边界

- 仅对**付费 / 会员**内容改变行为(从「yt-dlp 中途失败」变成「下载前结构化报错」);普通视频路径完全不变;
- `--force` 让已购用户保留原下载能力,不会误伤;
- 预检失败 fail-open(继续下载),所以最坏情况退回旧行为,不会因为预检本身挂掉而拦正常下载。

## 测试

- 新增 `clis/bilibili/download.test.js`:付费内容拦截、vip 账号有效放行、`--force` 跳过预检、预检 API 失败不阻塞
- bilibili 全量适配器测试 93 通过;`tsc --noEmit` 干净;`check:silent-column-drop` new=0
@jackwener jackwener merged commit 237741a into jackwener:main Jun 15, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants