通过异步接口批量提交 50+ 内容平台的公开作品链接,获取视频地址、图集图片、标题作者与媒体元数据。优先使用已配置的内容解析服务;抖音缺少视频、互动数据或作者信息时由服务器自动补全。规范 JSON、按次计费、异步可追踪——适合研究、获得授权的备份与二次开发。
在首页右上角点「登录 / 注册」,完成滑块验证即可。
进入 API 控制台点「生成密钥」,新密钥自带试用余额。
异步分享页可直接调用;付费开放 API 需在请求头带 X-API-Key。
异步分享页接口使用网页免费配额,不需 API Key;/api/v1/* 开放 API 只通过请求头 X-API-Key: 你的密钥 鉴权。不要把密钥放进 URL 查询参数。
X-API-Key: dy_xxxxxxxxxxxxxxxxxxxx
www.tiktok.com/@作者/video/作品ID、vm.tiktok.com / vt.tiktok.com),不访问源平台;持久化占位页和后台任务后立即返回 202 Accepted。建议每次创建发送 Idempotency-Key,网络重试将返回同一 sid。curl -X POST 'https://你的域名/api/shares' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
-d '{ "text": "3.87 复制打开抖音 https://v.douyin.com/xxxx/", "title": "可选标题" }'
HTTP/1.1 202 Accepted
Location: /s/Ab3xYz7
Retry-After: 2
{ "ok": true, "replayed": false,
"data": { "sid": "Ab3xYz7", "status": "pending", "ready": false,
"shareable": false, "share_url": "https://你的域名/s/Ab3xYz7",
"status_url": "/api/shares/Ab3xYz7", "poll_after_ms": 1500,
"expires_at": 1780000000,
"manage_token": "sm1_...(仅匿名创建响应返回)" } }
curl 'https://你的域名/api/author?item_id=7123456789'
{ "item_id": "7123456789", "nickname": "作者昵称", "author_url": "https://www.douyin.com/user/...",
"sec_uid": "MS4w...", "unique_id": "creator_id", "follower_count": 2000,
"total_favorited": "45434", "following_count": 4, "aweme_count": 55,
"enriched": true }
pending / processing 时按 poll_after_ms 轮询;ready 后若 media_available=false,继续按 media_poll_after_ms 检查,直到媒体可用。完成时可复制 share_url_versioned 到微信;failed 只返回稳定错误码和用户文案,不暴露内部代理信息。分享页 /s/{sid} 会自动轮询。curl 'https://你的域名/api/shares/Ab3xYz7'
{ "ok": true, "data": {
"sid": "Ab3xYz7", "status": "ready", "ready": true, "shareable": true,
"kind": "video", "item_id": "7123456789", "title": "作品标题",
"author": "作者昵称", "media_available": true, "media_pending": false,
"media_poll_after_ms": 0,
"share_url_versioned": "https://你的域名/s/Ab3xYz7?v=1780000008" } }
manage_token 放进 X-Share-Manage-Token 请求头。凭证不会出现在公开状态、分享 URL 或页面中。任务尚未被 worker 领取时会退款;已经开始解析则取消发布但计入一次额度。curl -X DELETE 'https://你的域名/api/shares/Ab3xYz7' \ -H 'X-Share-Manage-Token: sm1_...'
Idempotency-Key:网络重试会返回同一 job_id 而不重复冻结余额;同一 Key 提交不同链接会返回 409。curl -X POST 'https://你的域名/api/v1/jobs' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: dy_xxx' \
-H 'Idempotency-Key: req-20260807-001' \
-d '{ "links": ["https://v.douyin.com/xxxx/", "https://www.xiaohongshu.com/explore/yyyy"] }'
# 也可以直接给整段分享文案(自动提取其中全部链接):
-d '{ "text": "小红书 https://www.xiaohongshu.com/explore/yyyy 抖音 https://v.douyin.com/xxxx/" }'
{ "code": 0, "message": "accepted",
"data": { "job_id": "job_xxx", "total": 2, "status": "pending",
"price_cents": 1, "estimated_cost_cents": 2,
"query_url": "/api/v1/jobs/job_xxx" } }
status 为 done 时 results 为逐条解析结果;处理中建议每 2–5 秒轮询一次。失败条目不计费(自动精确退款)。curl 'https://你的域名/api/v1/jobs/job_xxx' \ -H 'X-API-Key: dy_xxx'
{ "code": 0, "message": "ok",
"data": {
"job_id": "job_xxx", "status": "done", "total": 2, "done": 2, "ok": 1,
"cost_cents": 1, "created": 1786000000, "finished": 1786000008,
"results": [
{ "link": "https://v.douyin.com/xxxx/", "ok": true,
"data": {
"kind": "video", "platform": "douyin", "share_supported": true,
"item_id": "7123456789", "title": "作品标题",
"author": "作者昵称", "cover": "封面图地址", "duration_ms": 15333,
"video": { "url": "短时有效的媒体播放地址",
"proxy_url": "本站同源签名播放地址(12 小时有效)",
"download_url": "本站同源签名下载地址(12 小时有效)",
"width": 1080, "height": 1920, "filename": "作品标题.mp4" },
"music": { "title": "背景音乐" }, "tags": ["话题1", "话题2"] } },
{ "link": "https://www.xiaohongshu.com/explore/yyyy", "ok": false, "error": "链接已失效" }
] } }
curl 'https://你的域名/api/v1/balance' \
-H 'X-API-Key: dy_xxx'
{ "code": 0, "data": { "balance_cents": 978, "reserved_cents": 2,
"spent_cents": 20, "calls": 20, "price_cents": 1 } }
| status | 含义 |
|---|---|
platform / share_supported | 识别到的来源平台;是否支持生成本站分享页 |
pending | 已受理,排队等待处理 |
running | 处理中(已有条目开始或完成) |
done | 全部条目已出结果(逐条看 ok 字段) |
| 字段 | 含义 |
|---|---|
video.url | 短时有效的媒体播放地址;有效期与可用性以服务返回为准 |
video.alt_url | 可选的备用播放地址;失败时可切换使用 |
video.download_url | 可选。按作品 ID 读取本站同源 HMAC 下载地址,默认 12 小时过期 |
video.proxy_url | 可选。本站同源 HMAC 播放地址,适合受限网络环境 |
images[] | 图集作品(kind = note)的原图列表,含 url / filename |
stats | 点赞(digg)、评论、收藏和分享数;抖音缺失值由服务器补全,仍无法获取时为 null |
title / content | 作品标题与可选正文分别保留;content 未提供或为空时使用 title,不包含语音转录文案 |
warning | 成功但带警告时出现(如部分数据缺失) |
提交时按任务全部链接和当时单价整批预授权;可用余额不足则整单拒绝。每条成功结果转为消费,失败结果自动精确退款。任务、租约与账本都持久化,重启后继续处理;建议用 Idempotency-Key 安全重试。
import json, time, urllib.request
KEY = "dy_xxx"
BASE = "https://你的域名"
def call(method, path, payload=None):
req = urllib.request.Request(BASE + path, method=method,
data=json.dumps(payload).encode() if payload else None,
headers={"X-API-Key": KEY, "Content-Type": "application/json"})
with urllib.request.urlopen(req, timeout=30) as r:
return json.loads(r.read())["data"]
job = call("POST", "/api/v1/jobs",
{"links": ["https://www.xiaohongshu.com/explore/xxxx"]})
for _ in range(60): # 每 2 秒轮询,最长 2 分钟
time.sleep(2)
d = call("GET", f"/api/v1/jobs/{job['job_id']}")
if d["status"] == "done":
for r in d["results"]:
print(r["ok"], r.get("data", {}).get("title"), r.get("error", ""))
break
| HTTP | 含义 |
|---|---|
| 400 | 请求体错误 / 无合法链接 / Idempotency-Key 超过 128 字符 |
| 401 | 缺少或无效的 API Key |
| 402 | 余额不足(整单拒绝,不扣费) |
| 404 | 任务不存在或无权访问 |
| 409 | 同一 Idempotency-Key 提交了不同的链接列表 |
| 413 | HTTP 请求体超过 8KB,或分享文案超过 4KB |
| 451 | 作品已因投诉或审核下架 |
| 422 | 分享短链或 Idempotency-Key 格式不合法 |
| 429 | 免费配额用完、持久限频,或同一用户在途任务过多 |
| 503 | 异步分享队列已满,按 Retry-After 稍后重试 |