Skip to content

fix(bilibili): use official API instead of HTML parsing#1575

Open
wql00 wants to merge 1 commit into
imputnet:mainfrom
wql00:fix/bilibili-api
Open

fix(bilibili): use official API instead of HTML parsing#1575
wql00 wants to merge 1 commit into
imputnet:mainfrom
wql00:fix/bilibili-api

Conversation

@wql00

@wql00 wql00 commented Jul 9, 2026

Copy link
Copy Markdown

Bilibili no longer embeds playinfo data in HTML pages. The previous approach checked for '<script>window.playinfo=' which has been removed, causing all bilibili.com downloads to fail with fetch.empty.

This commit:

  • Replaces HTML scraping with the official view API (/x/web-interface/view) to fetch video cid and pages list
  • Uses the playurl API (/x/player/playurl) with fnval=16 to get DASH streams
  • Adds proper BILIBILI_HEADERS (browser UA + referer) for API and stream requests
  • Fixes internal stream to merge service-specific headers via getHeaders(), preventing ffmpeg's Lavf user-agent from being sent to bilibili CDN (which returns 403 for non-browser user agents)
  • Preserves existing getBest/extractBestQuality logic, filename format, duration check, multi-part support, and bilibili.tv (intl) support
  • Fixes vite dev server glob pattern to follow pnpm symlinks, so libav.js modules load correctly under local processing (was 404 -> probe_failed)

Bilibili no longer embeds playinfo data in HTML pages. The previous
approach checked for '<script>window.__playinfo__=' which has been
removed, causing all bilibili.com downloads to fail with fetch.empty.

This commit:
- Replaces HTML scraping with the official view API (/x/web-interface/view)
  to fetch video cid and pages list
- Uses the playurl API (/x/player/playurl) with fnval=16 to get DASH streams
- Adds proper BILIBILI_HEADERS (browser UA + referer) for API and stream
  requests
- Fixes internal stream to merge service-specific headers via getHeaders(),
  preventing ffmpeg's Lavf user-agent from being sent to bilibili CDN
  (which returns 403 for non-browser user agents)
- Preserves existing getBest/extractBestQuality logic, filename format,
  duration check, multi-part support, and bilibili.tv (intl) support
- Fixes vite dev server glob pattern to follow pnpm symlinks, so libav.js
  modules load correctly under local processing (was 404 -> probe_failed)
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.

1 participant