API 文档
一个接口解析抖音、小红书、Instagram、哔哩哔哩等 20+ 平台的无水印图片、视频和实况图,支持 AI 工具一键创建下载 Skill、终端脚本调用和自动化集成
https://a.jiejing.fun/parsecode 固定为 0urls 数组Referer、User-Agent、Accept,下载时原样使用只需要提交平台链接或完整分享文案,接口会自动识别平台并返回可下载的图片、视频地址。
| 参数 | 必填 | 说明 |
|---|---|---|
url |
是 | 平台链接或包含平台链接的完整分享文案;推荐使用 URL 编码,兼容原文和二次编码 |
kl |
否 | 普通授权码;不填时按免费用户处理 |
key |
否 | 无限解析 Key |
type |
否 | sd、hd、hdr、home;默认 sd |
count |
否 | 仅抖音 type=home 使用;不填默认 20 |
主页 count 支持:20、40、60、80、100、200、300、400、500、600、700、800、900、1000。
20 至 100:返回主页最前面的 N 个作品。200:返回第 101 至 200 个作品;300 返回第 201 至 300 个作品,后续以此类推。type |
适用平台 | 作用 |
|---|---|---|
不填或 sd |
所有支持的平台 | 普通解析,推荐作为默认选择 |
hd |
抖音、小红书、哔哩哔哩 | 高清解析;B 站返回需要 FFmpeg 合成的音视频流 |
hdr |
抖音、小红书 | HDR/超高清解析 |
home |
抖音 | 批量解析作者主页作品,配合 count 使用 |
支持抖音、小红书、Instagram、X、YouTube、Threads、Facebook、TikTok、快手、微博、哔哩哔哩等常见平台。需要高清、HDR 或主页批量解析时,传入对应的 type 即可。
type 时按普通模式解析;明确需要高清、4K、HDR 或杜比视界时传 type=hd。B 站高清为音视频分离格式,电脑端调用前必须先确认已安装 FFmpeg。AI、脚本和终端工具优先使用 POST JSON,参数不会出现在 URL 查询字符串中:
POST https://a.jiejing.fun/parse
Content-Type: application/json
{
"url": "https://v.douyin.com/EsoUSq6vzRQ/",
"kl": "你的授权码",
"type": "hdr"
}
GET 仍然兼容,适合浏览器、快捷指令或只支持 GET 的工具。使用 GET 时,建议对 url 参数单独进行 URL 编码:
https://a.jiejing.fun/parse?url=https%3A%2F%2Fv.douyin.com%2FEsoUSq6vzRQ%2F
url 参数的值,不能把整条 API 地址一起编码。服务端同时兼容未编码、标准编码和二次编码的 url。POST JSON 会完整保留原链接中的 & 等查询参数,因此更适合 AI 和自动化工具。curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data '{"url":"https://v.douyin.com/EsoUSq6vzRQ/"}'
curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data '{"url":"https://v.douyin.com/EsoUSq6vzRQ/","kl":"你的授权码","type":"hdr"}'
curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data '{"url":"http://xhslink.cn/o/示例短链","key":"你的无限Key","type":"hd"}'
先运行 ffmpeg -version。确认 FFmpeg 已安装后再发起解析,避免解析成功后无法合成并浪费次数。
ffmpeg -version
curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data '{"url":"https://www.bilibili.com/video/BVxxxxxxxxxx","kl":"你的授权码","type":"hd"}'
请传入作者主页分享链接,不要传单个视频链接。
curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data '{"url":"https://www.douyin.com/user/作者sec_user_id","type":"home","count":60}'
curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data '{"url":"复制这段内容打开抖音 https://v.douyin.com/EsoUSq6vzRQ/ 查看作品"}'
& 等查询参数,因此更适合 AI 和自动化工具。解析成功后,所有需要下载的图片和视频地址都在顶层 urls 数组中。
{
"code": 0,
"msg": "解析成功✅一共1个视频",
"total": 10,
"remaining": 9,
"urls": ["https://example-cdn.com/video.mp4"],
"Referer": "https://www.douyin.com/",
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) ...",
"Accept": "*/*"
}
调用程序以 code === 0 判断成功,然后遍历顶层 urls 下载文件。
B 站 type=hd 的顶层 urls 和 body.merges 返回 justlive://merge 合并任务。它不是普通下载链接,需要分别取出 video 和 audio 后用 FFmpeg 合并。
{
"code": 0,
"msg": "解析成功✅一共 2 个可合并视频规格",
"urls": [
"justlive://merge?video=https%3A%2F%2Fexample.com%2Fvideo.m4s&audio=https%3A%2F%2Fexample.com%2Faudio.m4s"
],
"body": {
"title": "视频标题",
"merges": {
"4K(1.20GB)": "justlive://merge?video=...&audio=...",
"1080P(320MB)": "justlive://merge?video=...&audio=..."
}
},
"Referer": "https://www.bilibili.com/",
"User-Agent": "Mozilla/5.0 ...",
"Accept": "*/*"
}
body.merges 中的名称选择。video、audio,分别流式下载,下载请求携带本次响应中的非空请求头。ffmpeg -y -i video.m4s -i audio.m4s -map 0:v:0 -map 1:a:0 -c copy -movflags +faststart output.mp4。使用 type=home 时,顶层 urls 仍然是所有媒体的汇总下载列表;body 是作品数组,保留每个作品的标题和媒体对应关系,适合按作品标题重命名下载文件。
{
"code": 0,
"msg": "成功获取第 1-20 条作品,共 20 个",
"urls": [
"https://example-cdn.com/video.mp4",
"https://example-cdn.com/image-1.jpg",
"https://example-cdn.com/image-2.jpg"
],
"body": [
{
"id": "7667408696426679588",
"type": "video",
"title": "将近三万包月拿下蔚来ES9,今天聊聊电动门",
"time": 1785236400,
"url": "https://example-cdn.com/video.mp4",
"cover_url": "https://example-cdn.com/cover.jpeg"
},
{
"id": "7667408696426679000",
"type": "images",
"title": "这是一个抖音图集作品",
"time": 1785236300,
"count": 2,
"urls": [
"https://example-cdn.com/image-1.jpg",
"https://example-cdn.com/image-2.jpg"
]
}
],
"Referer": "https://www.douyin.com/",
"User-Agent": "Mozilla/5.0 ...",
"Accept": "*/*"
}
body 作品字段:
| 字段 | 说明 |
|---|---|
id | 抖音作品唯一 ID,可用于防止文件重名 |
type | video 为视频,images 为图集 |
title | 作品标题或文案,可用于生成文件名 |
time | 作品发布时间,Unix 秒级时间戳 |
url | 视频作品的下载地址 |
cover_url | 视频封面地址 |
urls | 图集作品的图片下载地址数组 |
count | 图集中的图片数量 |
需要保留作品标题时,不要只遍历顶层 urls:
type=video:下载 item.url,文件名可使用 item.title + item.id。type=images:遍历 item.urls,文件名可使用 item.title + item.id + 图片序号。title 可能包含换行、斜杠或其他不适合文件名的字符,保存前应先替换非法字符并限制长度。body 中的媒体时,同样携带顶层返回的 Referer、User-Agent和 Accept。下载 urls 中的媒体时,必须把响应中的以下字段作为 HTTP 请求头原样带上:
| JSON 字段 | 下载请求头 |
|---|---|
Referer | Referer |
User-Agent | User-Agent |
Accept | Accept |
403、空文件或下载失败。不同平台返回的请求头可能不同,请以每次解析结果中的实际内容为准。安装 jq 后只输出下载地址:
curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data '{"url":"https://v.douyin.com/EsoUSq6vzRQ/"}' \
| jq -r 'if .code == 0 then .urls[] else .msg end'
使用环境变量保存授权码,避免反复写进脚本:
export QSY_KL='你的授权码'
curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data "$(jq -n --arg url 'https://v.douyin.com/EsoUSq6vzRQ/' --arg kl "$QSY_KL" \
'{url: $url, kl: $kl, type: "hd"}')" \
| jq .
解析并下载所有媒体,同时携带 API 返回的请求头:
response_file="$(mktemp)"
curl -sS 'https://a.jiejing.fun/parse' \
-H 'Content-Type: application/json' \
--data "$(jq -n --arg url 'https://v.douyin.com/EsoUSq6vzRQ/' --arg kl "${QSY_KL:-}" \
'{url: $url, kl: $kl}')" \
> "$response_file"
referer="$(jq -r '.Referer // ""' "$response_file")"
user_agent="$(jq -r '."User-Agent" // ""' "$response_file")"
accept="$(jq -r '.Accept // ""' "$response_file")"
header_args=()
[[ -n "$referer" ]] && header_args+=(-H "Referer: $referer")
[[ -n "$user_agent" ]] && header_args+=(-H "User-Agent: $user_agent")
[[ -n "$accept" ]] && header_args+=(-H "Accept: $accept")
index=0
jq -r '.urls[]' "$response_file" | while IFS= read -r media_url; do
index=$((index + 1))
curl --fail --location --retry 2 \
"${header_args[@]}" \
--output "qsy-download-$index" \
"$media_url"
done
rm -f "$response_file"
$body = @{
url = "https://v.douyin.com/EsoUSq6vzRQ/"
kl = "你的授权码"
type = "hd"
} | ConvertTo-Json
$result = Invoke-RestMethod `
-Method Post `
-Uri "https://a.jiejing.fun/parse" `
-ContentType "application/json" `
-Body $body
if ($result.code -eq 0) {
$downloadHeaders = @{}
if ($result.Referer) { $downloadHeaders["Referer"] = $result.Referer }
if ($result."User-Agent") { $downloadHeaders["User-Agent"] = $result."User-Agent" }
if ($result.Accept) { $downloadHeaders["Accept"] = $result.Accept }
for ($i = 0; $i -lt $result.urls.Count; $i++) {
Invoke-WebRequest `
-Uri $result.urls[$i] `
-Headers $downloadHeaders `
-OutFile ("qsy-download-{0}" -f ($i + 1))
}
} else {
Write-Error $result.msg
}
Windows 也可以直接使用系统自带的 curl.exe:
curl.exe "https://a.jiejing.fun/parse" `
-H "Content-Type: application/json" `
--data-raw '{"url":"https://v.douyin.com/EsoUSq6vzRQ/","type":"hd","kl":"你的授权码"}'
import requests
response = requests.post(
"https://a.jiejing.fun/parse",
json={
"url": "https://v.douyin.com/EsoUSq6vzRQ/",
"type": "hd",
"kl": "你的授权码",
},
timeout=260,
)
response.raise_for_status()
data = response.json()
if data.get("code") != 0:
raise RuntimeError(data.get("msg", "解析失败"))
download_headers = {
key: data.get(key)
for key in ("Referer", "User-Agent", "Accept")
if data.get(key)
}
for index, download_url in enumerate(data.get("urls", []), start=1):
with requests.get(
download_url,
headers=download_headers,
stream=True,
timeout=260,
) as media:
media.raise_for_status()
with open(f"qsy-download-{index}", "wb") as output:
for chunk in media.iter_content(chunk_size=1024 * 256):
if chunk:
output.write(chunk)
给 AI Agent 或自动化工具的固定规则可以写成:
收到社交平台分享链接或分享文案后,优先使用 POST https://a.jiejing.fun/parse。 请求使用 application/json,把原始文本完整放入 url 字段;默认不传 type。 用户明确要求高清、HDR 或抖音主页时,分别传 type=hd、type=hdr、type=home。 哔哩哔哩高清使用 type=hd;调用 API 前先运行 ffmpeg -version,未安装时先停止并指导用户安装。 仅当 code=0 时视为成功,最终下载地址只读取顶层 urls 数组。 哔哩哔哩高清的 justlive://merge 不是普通下载链接;解析 video 和 audio,分别下载后用 FFmpeg 合并,默认选择最高规格。 抖音主页批量解析如果需要按作品标题命名,必须遍历 body:视频下载 item.url,图集下载 item.urls。 下载每个 urls 地址时,必须携带响应中的 Referer、User-Agent、Accept 请求头;空字段可省略。 解析失败时必须向用户展示 msg 和 list,不要只显示“请求失败”。 免费额度不足时引导用户获取授权码;已有授权码次数不足时引导用户给当前授权码补充次数。 授权码用户同样优先消耗当天免费的 10 次额度,用完后才扣授权码次数;带 kl 请求次数不足时不要删掉 kl 改用免费模式重试,直接引导充值当前授权码。 code=500 时向用户提供解析需求提交入口。 不得猜测或泄露 kl、key,也不要把授权凭据写入日志。
import { writeFile } from 'node:fs/promises';
const response = await fetch('https://a.jiejing.fun/parse', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url: 'https://v.douyin.com/EsoUSq6vzRQ/',
type: 'hd',
kl: process.env.QSY_KL || ''
}),
signal: AbortSignal.timeout(260000)
});
const data = await response.json();
if (!response.ok || data.code !== 0) {
throw new Error(data.msg || `HTTP ${response.status}`);
}
const downloadHeaders = Object.fromEntries(
['Referer', 'User-Agent', 'Accept']
.filter((name) => data[name])
.map((name) => [name, data[name]])
);
for (const [index, mediaUrl] of data.urls.entries()) {
const mediaResponse = await fetch(mediaUrl, { headers: downloadHeaders });
if (!mediaResponse.ok) {
throw new Error(`下载失败:HTTP ${mediaResponse.status}`);
}
await writeFile(`qsy-download-${index + 1}`, Buffer.from(await mediaResponse.arrayBuffer()));
}
接口失败时,请同时读取 HTTP 状态码、JSON 中的 code、msg 和 list:
msg 会说明本次失败的原因。list 中可能包含获取授权码、补充次数、提交需求或联系作者的入口。出现 402 或 429,并且 msg 提示免费额度不足或当天次数已用完时,可以选择:
获取授权码后,在 POST JSON 中增加 "kl": "你的授权码" 即可重新请求。
已有授权码时,如果返回 401 或 402,并且 msg 提示剩余次数不足或次数已经用完,请直接给当前授权码补充次数:
https://mai.huiyuan.site/?code=你的授权码
补充完成后次数会自动到账,继续使用原来的授权码即可,不需要重新获取或替换授权码。
kl 的请求一旦提示次数不足,说明当天免费额度必然已经用完,不要为了“省授权码次数”而删掉 kl 改用免费模式重试——这样只会立刻收到 429,不会节省任何次数。请直接按上方链接给当前授权码充值。返回 401 或 403,并且 msg 提示授权码或 Key 无效时:
kl 或 key。返回 429 时先查看 msg:
返回 400 时:
url 参数已经正确编码。type=hd,HDR 使用 type=hdr。type=hd,并确保电脑已经安装 FFmpeg。type=home,并传入支持的 count 数值。返回 500 时,可以先确认链接能否在未登录的浏览器中正常打开。私密内容、已删除内容、付费内容或受年龄限制的内容可能无法解析。
公开内容仍然无法解析时,可以提交需求,通常会在 1 小时内处理:
https://a.jiejing.fun/request?url=ENCODED_URL
其中 ENCODED_URL 是经过 URL 编码的原始平台链接。
返回 504 时,等待片刻后使用相同参数重试。主页批量、HDR 和较大的图集可能需要更长时间,客户端建议把请求超时设置为至少 260 秒。
Referer、User-Agent 和 Accept。urls 下载,不要只下载第一项。