所有请求需携带请求头(或 query 参数 access_key):
x-access-key: 你从管理员处获取的 API Key
限流:解析接口每 IP 每分钟 120 次,超限进入 3 分钟安全冷却(HTTP 429);转存/裁剪接口单独计数。Key 自身若配配额,用尽后同样返回 429。
POST https://ddan.tech/api/x/parse
Content-Type: application/json
x-access-key: 你的Key
{"url": "把用户发的分享链接或口令【全文】直接放这里"}
{
"code": 200, "success": true, "cached": false,
"source": "bilibili_direct",
"message": "Bilibili 视频解析成功",
"data": {
"platform": "bilibili", // 平台标识
"mediaType": "video", // video=视频 / image=图集
"title": "视频标题",
"uploader": "作者名",
"duration": 1044, // 秒
"thumbnail": "封面图URL",
"bestVideo": { // ⭐ 最佳视频直链(直接下载/播放)
"url": "https://...", "quality": "1080p",
"width": 1920, "height": 1080
},
"formats": [...], // 多清晰度列表(部分平台)
"imageUrls": [...], // mediaType=image 时:图集各张原图
"totalImages": 0
}
}
| HTTP | 含义 |
|---|---|
400 | 未能从输入中提取到有效链接/口令 |
403 | Key 无效 / 被禁用 / 已过期 |
422 | 平台解析失败(响应带 debug.lastError 可看原因) |
429 | 触发限流或 Key 配额用尽 |
503 | 该平台通道熔断冷却中(持续失败后自动进入 60s 冷却,稍后重试) |
504 | 解析超时(20s 熔断),可重试 |
POST https://ddan.tech/api/x/parse/v2
Content-Type: application/json
x-access-key: 你的Key
{"url": "分享链接或口令全文"}
推荐使用的增强版解析接口,请求体与 /api/x/parse 完全一致(旧接口保持完全兼容)。增强能力:
| 能力 | 说明 |
|---|---|
source 字段 | 响应中标明命中的解析通道(如 bilibili_direct / pipixia_direct / ytdlp_v3) |
响应头 X-Channel-Layer | 格式 hit;平台;通道名 或 miss;...,用于观测解析路径与排障 |
| 平台级熔断 | 某平台持续失败自动进入 60 秒冷却,期间快速返回 503,不浪费时间等待 |
| 热缓存 | 同链接 5 分钟内重复解析秒回(响应带 cached:true) |
| 异步任务 | 配合 POST /api/x/tasks 提交后台解析,GET /api/x/tasks/:id 轮询结果,适合慢平台 |
推荐接口:POST /api/x/parse/v2(模块化通道层:多解析器容灾、失败归因、热缓存)。老的 /api/x/parse 已逐步淘汰,仅保留兼容,不建议新接入使用。
const res = await fetch('https://ddan.tech/api/x/parse/v2', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'x-access-key': 'YOUR_KEY' },
body: JSON.stringify({ url: rawTextFromUser })
});
const { code, data } = await res.json();
if (code === 200 && data.mediaType === 'video') {
console.log(data.bestVideo.url); // 视频直链
} else if (code === 200) {
console.log(data.imageUrls); // 图集
}
import requests
r = requests.post('https://ddan.tech/api/x/parse/v2',
headers={'x-access-key': 'YOUR_KEY'},
json={'url': raw_text_from_user}, timeout=25)
d = r.json()
if d['code'] == 200:
print(d['data']['bestVideo']['url'])
curl -X POST https://ddan.tech/api/x/parse/v2 \
-H "Content-Type: application/json" \
-H "x-access-key: YOUR_KEY" \
-d '{"url":"https://b23.tv/xxxx"}'
| 接口 | 说明 |
|---|---|
POST /api/x/ingest | 转存视频到服务器,返回 24 小时有效的临时分享码 playCode |
GET /api/x/play/:code | 查询转存结果(videoUrl / downloadUrl / 过期时间),无需鉴权 |
GET /api/x/download/:code | 直接下载转存文件,无需鉴权 |
POST /api/x/trim | 片尾智能裁剪:传 {videoUrl:"直链"} 或 {url:"分享链接"},可选 removeCornerMark:true 抹角标(重编码有痕迹,慎用)。自动检测白色片尾并无损剪切,返回本地直链 |
GET /api/x/stream?u= | 代理流:传编码后的直链,自动摘 Referer + 移动 UA 转发,带 Range 断点续传。用于客户端播放器直连部分防盗链 CDN 403 的场景。单流 512MB 上限 |
POST /api/x/keys/usage | Key 自助查询:携带自己的 Key 调用,返回配额 / 已用 / 剩余,适合给下游客户自查 |