基于 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=...地址,不返回原始上游媒体地址。
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 条摘要
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 站分 Pcollection用于 B 站合集分页摘要
400 INVALID_URL400 UNSUPPORTED_PLATFORM400 INVALID_PAGE401 AUTHENTICATION_REQUIRED403 ACCESS_RESTRICTED404 CONTENT_NOT_FOUND404 PAGE_NOT_FOUND422 BILIBILI_SINGLE_FILE_UNAVAILABLE422 NO_NATIVE_VIDEO422 NO_SUPPORTED_MP4429 UPSTREAM_RATE_LIMITED500 DOWNLOAD_SIGNING_UNAVAILABLE502 UPSTREAM_RESPONSE_INVALID502 UPSTREAM_MEDIA_UNAVAILABLE504 UPSTREAM_TIMEOUT
npm test先配置签名密钥。密钥必须是 32 个字符或更长的随机字符串:
npx wrangler secret put DOWNLOAD_SIGNING_SECRETX 需要同时配置当前有效的 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