跳转到内容

自部署的抖音 / TikTok 数据接口

一条 docker compose up,你就有了抖音和 TikTok 的 REST 接口、MCP 服务端和 Web 控制台 —— 跑在你自己的机器上,身份池自己维护自己。

数据读取于 2026-09-11,构建时写进页面,不是页面去请求的。

Douyin_TikTok_Download_API 是一个开源、自部署的抖音TikTok 数据接口服务。你用一条 docker compose up 把它跑在自己的机器上。没有托管版、不用注册、没有配额,链路上也没有第三方。

它能取两个平台的作品、作者、评论、合集和搜索,下载视频和图集时拿到的是无水印的流 —— 它挑的是平台本来就提供的那条干净流,而不是「去掉」了什么。采集到的内容归档在 你自己的 PostgreSQL 里,所以上游删掉的作品,本地还读得到。

麻烦的部分它替你处理了,而不是丢给你:抖音的 a_bogusX-Bogus 请求签名和 TikTok 的 签名都是纯 Python 实现;短链会先展开再对照白名单校验,然后才发出任何请求;作品 ID 会先按 平台自己的编码规则验一遍,所以一个不可能存在的 ID 不会浪费一次上游请求。

控制台:总览、身份池、调度器、调试台、资料库、下载与日志

三个入口,一套逻辑

93 个操作的 REST 接口、给 AI agent 用的 MCP 服务端、以及 dtk 命令行。 MCP 不是在 HTTP 上再包一层:三者调的是同一个 service 层, 所以一次工具调用省掉了第二跳和第二次认证。

cookie 不再是负担

无头浏览器按时铸造游客身份,池子自己测试、冷却和退休它们。 你自己的登录态 cookie 是可选增强,不是前提。

签名是纯 Python

a_bogusX-Bogus 和 TikTok 的签名都在进程内算,微秒级。 浏览器留作兜底,同时也是漂移探测器 —— 平台换了算法,是它先发现的。

它会告诉你自己不舒服

每次请求都有结构化记录,每个身份和每个端点都有实时健康度。 风控信号会在池子烧穿之前触发熔断。

在浏览器里

  1. 打开 demo.douyin.wtf,登录页已经替你填好演示账号。
  2. 登录进去,你的角色是 demo
  3. 调试台,粘贴任意抖音或 TikTok 链接,点解析。

在终端里

不用注册:演示账号的口令是实例自己在 /api/v1/auth/demo 公布的。 登录拿到的是会话 cookie,不是 bearer token。

终端窗口
PASS=$(curl -s https://demo.douyin.wtf/api/v1/auth/demo | jq -r .data.password)
curl -s -c jar -o /dev/null \
-X POST https://demo.douyin.wtf/api/v1/auth/login \
-H 'content-type: application/json' \
-d "{\"username\":\"demo\",\"password\":\"$PASS\"}"
curl -s -b jar -X POST 'https://demo.douyin.wtf/api/v1/parse?wait=25' \
-H 'content-type: application/json' \
-d '{"url":"https://www.douyin.com/video/7675505205047348543"}' \
| jq '.data | {platform, kind, description}'

?wait=25 是让这次调用变同步的开关:它会挂住连接直到任务完成,然后用 200 把结果给你。 不加它就是 202 加一个 task id,那是正常的异步路径。这个实例的上限是 30 秒。

接口文档也不用登录就能看 —— /swagger/redoc/openapi.json,中英双语。

TikHub 付费出现在这一页上,这个项目才得以保持免费和 Apache-2.0。整个安排就这么简单: 这里没有付费档、没有被留一手的功能,也没有任何东西会因为你从不点它而停止工作。

终端窗口
git clone https://github.com/Evil0ctal/Douyin_TikTok_Download_API.git
cd Douyin_TikTok_Download_API
cp .env.example .env # 然后设置 DTK_SECRET_KEY
COMPOSE_ENV_FILES=.env docker compose -p dtk -f docker/compose.yml up -d

打开 http://localhost:8000,在浏览器里完成初始化。 完整版在快速开始


Apache-2.0。源码、issue 和发布都在 GitHub · 在 demo.douyin.wtf 上试 · English