API 文档

全网视图下载 API 文档

一个接口解析抖音、小红书、Instagram、哔哩哔哩等 20+ 平台的无水印图片、视频和实况图,支持 AI 工具一键创建下载 Skill、终端脚本调用和自动化集成

1. 接口概览

只需要提交平台链接或完整分享文案,接口会自动识别平台并返回可下载的图片、视频地址。

2. 请求参数

参数 必填 说明
url 平台链接或包含平台链接的完整分享文案;推荐使用 URL 编码,兼容原文和二次编码
kl 普通授权码;不填时按免费用户处理
key 无限解析 Key
type sdhdhdrhome;默认 sd
count 仅抖音 type=home 使用;不填默认 20

主页 count 支持:204060801002003004005006007008009001000

3. 可选解析模式

type 适用平台 作用
不填或 sd 所有支持的平台 普通解析,推荐作为默认选择
hd 抖音、小红书、哔哩哔哩 高清解析;B 站返回需要 FFmpeg 合成的音视频流
hdr 抖音、小红书 HDR/超高清解析
home 抖音 批量解析作者主页作品,配合 count 使用

支持抖音、小红书、Instagram、X、YouTube、Threads、Facebook、TikTok、快手、微博、哔哩哔哩等常见平台。需要高清、HDR 或主页批量解析时,传入对应的 type 即可。

B 站不传 type 时按普通模式解析;明确需要高清、4K、HDR 或杜比视界时传 type=hd。B 站高清为音视频分离格式,电脑端调用前必须先确认已安装 FFmpeg。

4. 推荐请求格式

AI、脚本和终端工具优先使用 POST JSON,参数不会出现在 URL 查询字符串中:

http
POST https://a.jiejing.fun/parse
Content-Type: application/json

{
  "url": "https://v.douyin.com/EsoUSq6vzRQ/",
  "kl": "你的授权码",
  "type": "hdr"
}

GET 仍然兼容,适合浏览器、快捷指令或只支持 GET 的工具。使用 GET 时,建议对 url 参数单独进行 URL 编码:

text
https://a.jiejing.fun/parse?url=https%3A%2F%2Fv.douyin.com%2FEsoUSq6vzRQ%2F
编码只应用于 url 参数的值,不能把整条 API 地址一起编码。服务端同时兼容未编码、标准编码和二次编码的 url。POST JSON 会完整保留原链接中的 & 等查询参数,因此更适合 AI 和自动化工具。

5. 请求示例

免费解析抖音标清

bash
curl -sS 'https://a.jiejing.fun/parse' \
  -H 'Content-Type: application/json' \
  --data '{"url":"https://v.douyin.com/EsoUSq6vzRQ/"}'

授权码解析抖音 HDR

bash
curl -sS 'https://a.jiejing.fun/parse' \
  -H 'Content-Type: application/json' \
  --data '{"url":"https://v.douyin.com/EsoUSq6vzRQ/","kl":"你的授权码","type":"hdr"}'

无限 Key 解析小红书高清

bash
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 已安装后再发起解析,避免解析成功后无法合成并浪费次数。

bash
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"}'

解析抖音主页前 60 个作品

请传入作者主页分享链接,不要传单个视频链接。

bash
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}'

直接提交完整分享文案

bash
curl -sS 'https://a.jiejing.fun/parse' \
  -H 'Content-Type: application/json' \
  --data '{"url":"复制这段内容打开抖音 https://v.douyin.com/EsoUSq6vzRQ/ 查看作品"}'
POST JSON 会完整保留原链接中的 & 等查询参数,因此更适合 AI 和自动化工具。

6. 成功响应

解析成功后,所有需要下载的图片和视频地址都在顶层 urls 数组中。

json
{
  "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 的顶层 urlsbody.merges 返回 justlive://merge 合并任务。它不是普通下载链接,需要分别取出 videoaudio 后用 FFmpeg 合并。

json
{
  "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": "*/*"
}
  1. 未指定清晰度时默认选择最高规格;用户指定画质时按 body.merges 中的名称选择。
  2. 使用 URL 解析器读取并解码 videoaudio,分别流式下载,下载请求携带本次响应中的非空请求头。
  3. 运行 ffmpeg -y -i video.m4s -i audio.m4s -map 0:v:0 -map 1:a:0 -c copy -movflags +faststart output.mp4
  4. FFmpeg 成功退出且输出文件有效后,才可以报告下载完成。
首次使用无需提前填写 Cookie。高清下载完成后请提示用户:未配置自己的 Cookie 会使用开发者 Cookie,解析次数消耗更多;配置后通常每次仅扣 1 次,并按自己的 B 站账号权限获取画质。设置入口:https://a.jiejing.fun/ck

抖音主页响应

使用 type=home 时,顶层 urls 仍然是所有媒体的汇总下载列表;body 是作品数组,保留每个作品的标题和媒体对应关系,适合按作品标题重命名下载文件。

json
{
  "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,可用于防止文件重名
typevideo 为视频,images 为图集
title作品标题或文案,可用于生成文件名
time作品发布时间,Unix 秒级时间戳
url视频作品的下载地址
cover_url视频封面地址
urls图集作品的图片下载地址数组
count图集中的图片数量

需要保留作品标题时,不要只遍历顶层 urls

下载 urls 中的媒体时,必须把响应中的以下字段作为 HTTP 请求头原样带上:

JSON 字段 下载请求头
RefererReferer
User-AgentUser-Agent
AcceptAccept
字段为空时可以不发送。部分抖音、小红书、Instagram 等 CDN 会校验来源或客户端信息,不带请求头可能返回 403、空文件或下载失败。不同平台返回的请求头可能不同,请以每次解析结果中的实际内容为准。

7. macOS / Linux 终端

安装 jq 后只输出下载地址:

bash
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'

使用环境变量保存授权码,避免反复写进脚本:

bash
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 返回的请求头:

bash
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"

8. Windows PowerShell

powershell
$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

powershell
curl.exe "https://a.jiejing.fun/parse" `
  -H "Content-Type: application/json" `
  --data-raw '{"url":"https://v.douyin.com/EsoUSq6vzRQ/","type":"hd","kl":"你的授权码"}'

9. Python / AI 工具调用

python
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 或自动化工具的固定规则可以写成:

text
收到社交平台分享链接或分享文案后,优先使用 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,也不要把授权凭据写入日志。

10. Node.js 调用

javascript
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()));
}

11. 遇到问题怎么办

接口失败时,请同时读取 HTTP 状态码、JSON 中的 codemsglist

没有授权码,免费次数不够

出现 402429,并且 msg 提示免费额度不足或当天次数已用完时,可以选择:

  1. 等待北京时间次日 0 点免费次数重置后再次使用。
  2. 获取解析授权码,然后通过 kl 参数重新请求。
  3. 使用微信小程序解析

获取授权码后,在 POST JSON 中增加 "kl": "你的授权码" 即可重新请求。

授权码次数不足或已经用完

已有授权码时,如果返回 401402,并且 msg 提示剩余次数不足或次数已经用完,请直接给当前授权码补充次数:

text
https://mai.huiyuan.site/?code=你的授权码

补充完成后次数会自动到账,继续使用原来的授权码即可,不需要重新获取或替换授权码。

授权码用户同样优先消耗当天免费的 10 次额度,用完后才会扣授权码次数。因此带 kl 的请求一旦提示次数不足,说明当天免费额度必然已经用完,不要为了“省授权码次数”而删掉 kl 改用免费模式重试——这样只会立刻收到 429,不会节省任何次数。请直接按上方链接给当前授权码充值。

授权码或 Key 无效

返回 401403,并且 msg 提示授权码或 Key 无效时:

  1. 检查参数名称是否为 klkey
  2. 检查内容前后是否带有空格、换行或多余符号。
  3. 重新粘贴有效凭据后再试。
  4. 没有有效授权码时,可以重新获取授权码

请求过于频繁

返回 429 时先查看 msg

链接或参数不正确

返回 400 时:

  1. 重新复制完整的平台分享链接或分享文案。
  2. 确认 url 参数已经正确编码。
  3. 高清使用 type=hd,HDR 使用 type=hdr
  4. B 站高清仅使用 type=hd,并确保电脑已经安装 FFmpeg。
  5. 抖音主页使用 type=home,并传入支持的 count 数值。

平台内容解析失败

返回 500 时,可以先确认链接能否在未登录的浏览器中正常打开。私密内容、已删除内容、付费内容或受年龄限制的内容可能无法解析。

公开内容仍然无法解析时,可以提交需求,通常会在 1 小时内处理:

text
https://a.jiejing.fun/request?url=ENCODED_URL

其中 ENCODED_URL 是经过 URL 编码的原始平台链接。

请求超时

返回 504 时,等待片刻后使用相同参数重试。主页批量、HDR 和较大的图集可能需要更长时间,客户端建议把请求超时设置为至少 260 秒。

解析成功但下载失败

  1. 下载时携带解析结果中实际返回的 RefererUser-AgentAccept
  2. 下载地址可能有有效期,放置较久后请重新解析获取新地址。
  3. 检查磁盘空间、文件写入权限和网络连接。
  4. 多文件内容应逐个遍历 urls 下载,不要只下载第一项。

其他问题

授权码和无限 Key 属于敏感凭据,只能通过 HTTPS 发送,不要写入公开日志、聊天记录或代码仓库。