文案提取 + 达人主页链接抓取
统一封装成可直接调用的 API 服务

仅限飞书组织内成员使用 · 通过飞书机器人自动开通账号

文案提取 + 达人主页链接抓取 · 统一封装成可直接调用的 API

V
未登录 · 已登录
REST API 抖音解析 TikHub API 阿里云 ASR FFmpeg FastAPI
📁
点击选择或拖拽视频/音频文件
mp4 / mov / mp3 / wav

正在解析...

✅ 提取完成

达人主页视频抓取

输入抖音达人主页链接,自动获取最近发布的视频列表及分享链接。

正在解析主页...

✅ 获取完成

#视频标题分享链接时间

API 接口文档

所有接口需在请求头中携带 API Key 进行鉴权。

鉴权方式
Authorization: Bearer vs_xxxxxxxxxxxxxxxx

// 在「密钥管理」中创建 API Key

POST 视频文案提取

/api/v1/extract

传入抖音分享文本、视频 URL,或直接上传本地文件,自动解析、提取音频、ASR 转写输出逐字稿。短视频可直接走同步接口。

参数类型必填说明
share_textstring二选一抖音分享文本,支持整段口令直接粘贴
urlstring二选一公开视频 URL 或抖音长/短链接
filefile二选一本地音视频文件,使用 multipart/form-data 上传
languagestring可选默认 zh
JSON 请求
POST /api/v1/extract
Content-Type: application/json
Authorization: Bearer vs_xxxx

{
  "share_text": "7- 长按复制此条消息... https://v.douyin.com/xY2_HbZk5Bg/",
  "language": "zh"
}
文件上传
curl -X POST "$BASE_URL/api/v1/extract" \
  -H "Authorization: Bearer vs_xxxx" \
  -F "file=@/path/to/video.mp4" \
  -F "language=zh"
Response
{
  "code": 200,
  "data": {
    "transcript": "完整的逐字稿...",
    "duration": 62.5,
    "source": "douyin_share",
    "sentences": [
      {"text": "大家好", "start_time": 0.5, "end_time": 1.1}
    ]
  }
}

POST 异步文案提取

/api/v1/extract/async

适合大文件和长视频。提交任务后立即返回 task_id,再轮询状态接口获取结果;推荐文件较大或视频较长时优先使用。默认按 poll_after_ms 提示的间隔轮询即可。

JSON 请求
POST /api/v1/extract/async
Content-Type: application/json
Authorization: Bearer vs_xxxx

{
  "url": "https://example.com/video.mp4",
  "language": "zh"
}
文件上传
curl -X POST "$BASE_URL/api/v1/extract/async" \
  -H "Authorization: Bearer vs_xxxx" \
  -F "file=@/path/to/video.mp4" \
  -F "language=zh"
Response
{
  "code": 200,
  "message": "accepted",
  "data": {
    "task_id": "t_xxxxxxxxxxxxxxxx",
    "status": "processing",
    "stage": "queued",
    "is_terminal": false,
    "poll_after_ms": 2000
  }
}

GET 查询异步结果

/api/v1/extract/status/{task_id}

轮询任务状态;状态值固定为 processingcompletedfailed。完成后在 result 字段里返回与同步接口一致的逐字稿结构。

请求示例
curl -X GET "$BASE_URL/api/v1/extract/status/t_xxxxxxxxxxxxxxxx" \
  -H "Authorization: Bearer vs_xxxx"
Response
{
  "code": 200,
  "data": {
    "task_id": "t_xxxxxxxxxxxxxxxx",
    "status": "completed",
    "stage": "completed",
    "is_terminal": true,
    "poll_after_ms": 0,
    "result": {
      "transcript": "完整的逐字稿...",
      "duration": 62.5,
      "source": "file_upload"
    }
  }
}

SDK 示例

下面两段示例都采用异步接口提交任务,并按服务返回的 poll_after_ms 自动轮询直到结束。

Python
import time
import requests

BASE_URL = "https://your-domain.com"
API_KEY = "vs_xxxx"

submit = requests.post(
    f"{BASE_URL}/api/v1/extract/async",
    headers={"Authorization": f"Bearer {API_KEY}"},
    files={"file": open("/path/to/video.mp4", "rb")},
    data={"language": "zh"},
    timeout=60,
)
submit.raise_for_status()
task_id = submit.json()["data"]["task_id"]

while True:
    status = requests.get(
        f"{BASE_URL}/api/v1/extract/status/{task_id}",
        headers={"Authorization": f"Bearer {API_KEY}"},
        timeout=30,
    )
    status.raise_for_status()
    payload = status.json()["data"]
    if payload["is_terminal"]:
        if payload["status"] == "completed":
            print(payload["result"]["transcript"])
        else:
            raise RuntimeError(payload["error"] or "extract failed")
        break
    time.sleep(payload["poll_after_ms"] / 1000)
Node.js
import { readFile } from 'node:fs/promises';

const baseUrl = 'https://your-domain.com';
const apiKey = 'vs_xxxx';
const fileBytes = await readFile('/path/to/video.mp4');

const form = new FormData();
form.append('file', new Blob([fileBytes]), 'video.mp4');
form.append('language', 'zh');

const submitResp = await fetch(`${baseUrl}/api/v1/extract/async`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
  body: form,
});
const submitData = await submitResp.json();
const taskId = submitData.data.task_id;

while (true) {
  const statusResp = await fetch(`${baseUrl}/api/v1/extract/status/${taskId}`, {
    headers: { Authorization: `Bearer ${apiKey}` },
  });
  const statusData = await statusResp.json();
  const payload = statusData.data;
  if (payload.is_terminal) {
    if (payload.status === 'completed') {
      console.log(payload.result.transcript);
    } else {
      throw new Error(payload.error || 'extract failed');
    }
    break;
  }
  await new Promise((resolve) => setTimeout(resolve, payload.poll_after_ms));
}

POST 达人主页视频列表

/api/v1/profile/videos

传入达人主页链接,返回视频列表(标题、分享链接、发布时间、互动数据)。

参数类型必填说明
profile_urlstring必填达人主页链接(长/短链接均可)
countinteger可选数量,默认 20,最大 50
Response
{
  "code": 200,
  "data": {
    "creator": { "nickname": "达人昵称", "follower_count": 128000 },
    "videos": [
      {
        "title": "视频标题",
        "share_url": "https://www.douyin.com/video/730xxxx",
        "publish_time": "2025-03-15 14:30:00",
        "likes": 12000
      }
    ]
  }
}

POST 批量文案提取

/api/v1/batch/extract

传入多个视频链接批量提取文案,最多 50 条。配合主页抓取使用。

参数类型必填说明
urlsstring[]必填视频链接数组,最多 50 条

错误码

Code说明
200成功
401未携带 API Key 或 Key 无效
422参数不合法,例如数量超过 50
500服务器内部错误

API 密钥管理

创建和管理你的 API 密钥。调用任何接口前需在请求头携带有效 Key。

2 个密钥
名称API 密钥今日用量30天用量状态创建时间操作

用量统计

查看 API 调用量和配额使用情况。

37
今日调用
892
近 30 天
50
每日配额

近 30 天调用趋势

最近调用记录

时间接口密钥状态