Skip to content
baxinkPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

去水印下载 Worker

基于 Cloudflare Workers 的公开媒体解析与签名下载服务,当前支持四个平台:

  • 抖音公开视频
  • 小红书公开视频、图集、实况图
  • 哔哩哔哩公开视频、分 P 视频、合集分页
  • X/Twitter 公开原生视频与 animated GIF

当前限制

  • 仅支持公开可访问内容,不绕过登录、会员、付费、年龄、地区或版权限制。
  • 哔哩哔哩当前只返回已经包含音频的 progressive MP4;仅有 DASH 分离音视频时返回 422 BILIBILI_SINGLE_FILE_UNAVAILABLE。
  • X 仅支持公开 guest 模式可读取的原生视频和 animated GIF,不处理外链卡片,不转码 HLS。
  • X 需要配置当前可用的 GraphQL 查询 ID,未配置时接口会以 502 UPSTREAM_RESPONSE_INVALID 失败关闭。
  • 所有下载链接都是 Worker 返回的短时效签名 /download?token=... 地址,不返回原始上游媒体地址。

API

自动识别平台

GET /api/parse?url=<分享链接>

抖音

GET /api/douyin?url=<抖音链接>

小红书

GET /api/xhs?url=<小红书链接>

哔哩哔哩

GET /api/bilibili?url=<B站链接>&page=<分P页码>

  • page 可选,优先取 URL 自带 p,否则默认 1
  • 合集分页使用 collectionPage,每次最多返回 20 条摘要

X / Twitter

GET /api/x?url=<X或Twitter状态链接>

  • 只接受精确状态页链接:https://x.com/<user>/status/<numeric-id> 或 https://twitter.com/<user>/status/<numeric-id>

下载

GET /download?token=<signed-token>

  • 仅允许已签名的平台媒体地址
  • 支持浏览器 Range 请求透传
  • 响应流式返回,不在 Worker 或前端做整文件缓冲

响应说明

  • 顶层格式保持 { code, msg, data }
  • data.url 为默认下载地址,已是 Worker 签名链接
  • streams 为同一媒体的可选清晰度列表
  • media 用于 X 多媒体结果;若某个原生媒体没有 MP4,会返回 url: null、streams: []、error: 'NO_SUPPORTED_MP4'
  • episodes 用于 B 站分 P
  • collection 用于 B 站合集分页摘要

错误码

  • 400 INVALID_URL
  • 400 UNSUPPORTED_PLATFORM
  • 400 INVALID_PAGE
  • 401 AUTHENTICATION_REQUIRED
  • 403 ACCESS_RESTRICTED
  • 404 CONTENT_NOT_FOUND
  • 404 PAGE_NOT_FOUND
  • 422 BILIBILI_SINGLE_FILE_UNAVAILABLE
  • 422 NO_NATIVE_VIDEO
  • 422 NO_SUPPORTED_MP4
  • 429 UPSTREAM_RATE_LIMITED
  • 500 DOWNLOAD_SIGNING_UNAVAILABLE
  • 502 UPSTREAM_RESPONSE_INVALID
  • 502 UPSTREAM_MEDIA_UNAVAILABLE
  • 504 UPSTREAM_TIMEOUT

本地测试

npm test

部署

先配置签名密钥。密钥必须是 32 个字符或更长的随机字符串:

npx wrangler secret put DOWNLOAD_SIGNING_SECRET

X 需要同时配置当前有效的 guest bearer token 和 TweetResultByRestId 查询 ID。bearer token 是 secret:

npx wrangler secret put X_BEARER_TOKEN

查询 ID 本身不敏感,但会随 X 页面版本变化。为避免 wrangler deploy --var 替换已有绑定并导致 X_BEARER_TOKEN 丢失,将查询 ID 也持久化为 Wrangler secret;仅配置查询 ID 不能恢复 X 解析:

npx wrangler secret put X_GRAPHQL_QUERY_ID

当 X 更换查询 ID 时,使用同一命令轮换它。完成上述两个 X 配置后使用普通部署命令:

npx wrangler deploy

再配置允许跨域访问的前端来源。ALLOWED_ORIGIN 是普通 Wrangler 变量,不是 secret。当前仓库没有已确认的生产前端域名,因此没有把 [vars] 写入 wrangler.toml;部署时请通过环境配置提供,例如:

npx wrangler deploy --var ALLOWED_ORIGIN:https://your-frontend.example

正式部署命令:

npx wrangler deploy

发布前校验:

npx wrangler deploy --dry-run

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages