Douyin TikTok Download API:自托管抖音 / TikTok 数据采集与无水印下载 API

Douyin TikTok Download API 项目标识:花括号中嵌入下载箭头

Douyin TikTok Download API(代码中简称 DTK)是一个开源的、可自托管的抖音与 TikTok 数据采集接口项目,作者是 GitHub 上的 Evil0ctal。很多人最早知道它,是因为它能解析短视频分享链接、取出无水印的媒体地址;而到了现在的 v5,它已经不只是一个「去水印解析器」,更像是一整套抖音 / TikTok 数据服务:作品、作者、评论、合集、收藏夹等数据都能通过接口拿到,同时提供 REST API、MCP 和 CLI 三种调用方式,解析过的内容还会自动归档进你自己的 PostgreSQL。

它是自托管的——数据、身份池、归档都在你自己的服务器上,一条 docker compose up 就能跑起来。截至 2026 年 9 月,项目在 GitHub 上已获得 2 万以上 Star,最新正式版本为 v5.1.1(2026 年 9 月 23 日发布),采用 Apache-2.0 许可,允许商业使用与闭源集成。

一、Douyin TikTok Download API 是什么?

简单说,它相当于在抖音、TikTok 的 Web 数据和你自己的应用之间架了一层接口服务。你的程序通过 REST API 拿 JSON;支持 Model Context Protocol 的 AI 客户端(如 Claude Code、Codex CLI)通过 MCP 调用它提供的工具;终端里可以用 dtk 命令直接操作。Web 控制台则负责管理身份池、调度器、任务、资料库、下载、日志和 API Key。

三种调用方式共用同一套 service 层——MCP 并不是把 REST API 再转发一遍,而是直接调用相同的业务逻辑。入口分别位于:

  • REST API:/api/v1/...,适合脚本、后台程序与自动化服务;
  • MCP:/mcp,可接入 Claude Code、Claude Desktop、Codex CLI 等支持 Model Context Protocol 的客户端;
  • CLI:dtk --help,适合直接在服务器终端操作。

接口文档可以从 /docs(控制台内嵌的 Swagger UI)、/swagger 或 /redoc 查看,中英双语。

这里需要先说明一点:它是第三方开源项目,不属于抖音或 TikTok 官方 API,和 TikTok 官方的 TikTok for Business MCP Server 也不是同一类东西——后者面向广告投放业务,前者面向内容数据的读取、归档与二次开发。项目访问的是平台 Web 端接口,因此即便部署在你自己的服务器上,账号权限、IP 限制、平台风控和服务条款这些边界依然存在。

Douyin TikTok Download API 控制台总览页面,显示可用身份数、请求量、成功率与归档统计
v5 的 Web 控制台总览:可用身份、请求量、成功率、风控率、平均耗时、归档与磁盘占用一目了然

二、它能抓取哪些抖音和 TikTok 数据?

当前接口覆盖的范围包括单条视频与图集作品、作者公开资料、作者作品列表、作者喜欢列表、合集与播放列表、评论与评论回复、关键词搜索、收藏夹、媒体地址,以及归档后的历史数据。各平台的具体支持情况如下:

采集能力 抖音 Douyin TikTok
单帖(视频或图集) 支持 支持
作者主页 / 作品列表 支持 支持
作者点赞的作品 支持 支持
合集 / 播放列表 支持 支持
收藏夹 支持 支持
评论与评论回复 支持 支持
关键词搜索 支持 支持
粉丝 / 关注列表 不提供 支持
作者转发列表 不提供 支持

抖音的粉丝与关注列表需要登录会话,游客身份拿不到,所以 v5 没有把这两个接口注册成面向所有身份的公开接口。另外,v5 不再支持 B 站(v4 支持),原因是签名与身份机制不同,暂未迁移;小红书、快手、微博也不在 v5 的支持平台内。

链接识别做得比较宽容,下面这些形式都能直接交给解析接口处理:

https://v.douyin.com/L4NpDJ6/
https://www.douyin.com/video/7126745726494821640
https://www.douyin.com/jingxuan?modal_id=7660875690212492466
https://www.tiktok.com/@evil0ctal/video/7156033831819037994
https://www.tiktok.com/t/ZTR9nkkmL/
2.84 nqe:/ 复制打开抖音,看看…… https://v.douyin.com/L4FJNR3/

短链接会被跟踪展开,埋在一整段分享文本里的链接也会被提取出来,post id 则先按平台自身的编码规则校验一遍。控制台的调试台把全部接口列在左侧,选中后右侧直接填参数、发起真实调用并查看返回的 JSON:

DTK 调试台的接口列表,包含作品详情、评论、作者资料等抖音接口
调试台:左侧是全部接口,右侧是参数表单,支持直接解析分享链接
在调试台解析一条抖音分享链接后返回的 JSON 结果
发起调用后,结果会归一化成与平台原始响应一致的 JSON,显示在右侧

三、v5 相比 v4,变了什么?

v5 并不是在 v4 上继续改出来的小版本。main 和 v4 没有共同祖先,v5 是从新的空分支重新实现的,所以接口、部署方式、配置结构和数据模型都发生了明显变化。其中有三处变化最值得说。

1. 身份池取代手工贴 Cookie

v4 时代的常见做法是:从浏览器里复制 Cookie,粘贴进 config.yaml。Cookie 一失效,相关请求就跟着一起失败。v5 把 Cookie、浏览器环境和相关状态整理成了独立的身份池;启用可选的 CloakBrowser 浏览器组件后,系统会自动铸造游客身份,并根据实际请求结果维护每个身份的健康度。调度器会处理身份健康度、身份轮换、每个身份的独占锁、每个「身份 + 接口」的独立限流、接口级熔断和结构化请求日志。某个身份连续遇到风控或接口错误时,可以降低它的使用优先级,而不是继续把全部请求压在同一个失效身份上。

身份池页面,展示自动铸造的抖音与 TikTok 游客身份及健康状态
身份池:自动铸造的游客身份、来源、健康度与冷却状态都在这里管理

如果没有启用浏览器组件,也仍然可以手动导入 Cookie。个人登录 Cookie 主要用于取需要登录权限的数据,并不是运行整个项目的必要条件。

2. 默认异步任务:返回 202,而不是一直等

v5 的数据接口默认不是「请求发出去就等结果回来」。不传 ?wait= 或传 ?wait=0 时,服务端会直接返回 HTTP 202 和一个 task_id:

POST /api/v1/parse      ->  202  {"task_id": "...", "state": "queued"}
GET  /api/v1/tasks/{task_id}  ->  200  {"state": "done", "data": {...}}

拿到 task_id 后可以继续查询任务状态。如果只是想解析一条链接、尽量在一次请求里拿到结果,可以加上 ?wait=N,官方 Quick Start 的调用方式类似这样:

API_KEY='dtk_...'

curl -sS -X POST \
  'http://127.0.0.1:8000/api/v1/parse?wait=25' \
  -H "X-API-Key: ${API_KEY}" \
  -H 'content-type: application/json' \
  -d '{"url":"你的抖音或 TikTok 分享链接"}'

任务在 25 秒内结束会直接返回 200 和结果;如果还没结束,返回的仍然是 202 和任务 ID——这并不表示解析失败,只是任务还在跑。当前 api.max_wait_seconds 默认上限为 30 秒,请求的等待时间超过实例上限会直接返回参数错误。

3. 解析即归档

v4 解析完就结束了,v5 会把解析过的内容存进 PostgreSQL(配套 TimescaleDB),Redis 承担任务状态、缓存与调度数据。好处是:上游内容后来被删除,本地已归档的数据仍然保留,具体取决于实例自己的归档设置。

资料库页面,展示已归档的抖音 TikTok 作品与统计
资料库:本地已采集归档的全部作品,不消耗身份、不发新请求
下载管理页面,可批量下载已归档作品的媒体文件
下载:把归档作品的媒体文件落到本地磁盘,支持按作者批量下载、跳过已下载

v4 与 v5 的主要差异可以概括成这张表:

对比维度 v4 v5
身份来源 手工复制 Cookie 写入配置 身份池 + 可选自动铸造游客身份
调用风格 同步 默认异步任务(202 + task_id)
数据留存 无 PostgreSQL + Redis,解析内容可归档
访问控制 较简单 带 scope 和 role 的 API Key
管理界面 单个 PyWebIO 页面 React Web 控制台
接入方式 REST REST + MCP + CLI
支持平台 抖音、TikTok、B站 抖音、TikTok
部署方式 pip 安装后运行脚本 docker compose up

v4 的代码仍然保留在 v4 分支,最后一个正式发布版是 V4.1.2。要留在 v4 必须锁定镜像 tag,因为 latest 已经跟随 main 走到 v5。

四、REST API、MCP 和 CLI 怎么选?

三个入口共用同一套业务逻辑,选哪个取决于你的使用场景:

  • REST API 适合网站、后台程序、Python 脚本或自动化服务。知道接口路径和参数后直接发 HTTP 请求即可。
  • MCP 适合 Claude Code、Claude Desktop、Codex CLI 以及其他支持 Model Context Protocol 的客户端。Agent 可以发现实例提供的工具,再根据指令调用对应功能——也就是说,你可以直接让 AI 助手去查一个抖音作者的全部作品。
  • CLI 适合直接在服务器终端操作,能力和 REST 一致。

Web 控制台不属于另一套数据协议,它负责实例管理。另外项目还提供 iOS 快捷指令入口(/api/v1/ios/shortcut),可以做成手机上的解析动作。

MCP 页面,展示 DTK 的 MCP 接入地址与 Claude Code 客户端配置方法
MCP 页面:给出接入地址与各客户端的配置方法,复制即用

五、部署:一条 docker compose up 跑起来

v5 主要通过 Docker Compose 部署,建议使用 v2.24 或更新的版本。核心服务包含 API、Worker、数据库和 Redis;下载器和用于自动铸造游客身份的浏览器组件可以按需启用。

方式一:引导式安装脚本(最省事)

curl -fsSL https://raw.githubusercontent.com/Evil0ctal/Douyin_TikTok_Download_API/main/install/install.sh -o install.sh
less install.sh    # 先读一遍是个好习惯
bash install.sh

这个脚本装完之后同时也是一个运维工具:再次运行会找到已有安装并打开管理菜单,可以查看状态、升级(对比最新 GitHub Release)、改密码、增加管理员、备份恢复、调整运行时设置、清理磁盘、停止或卸载。加 --manage 可以直接进入管理菜单。

方式二:手动 Docker Compose

先获取源码,再生成 .env(仓库中不含默认密码或密钥):

git clone https://github.com/Evil0ctal/Douyin_TikTok_Download_API.git
cd Douyin_TikTok_Download_API

POSTGRES_PASSWORD=$(openssl rand -hex 24)
REDIS_PASSWORD=$(openssl rand -hex 24)
cat > .env <<EOF
DTK_SECRET_KEY=$(openssl rand -base64 48)
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
REDIS_PASSWORD=${REDIS_PASSWORD}
DTK_DATABASE_URL=postgresql+asyncpg://dtk:${POSTGRES_PASSWORD}@postgres:5432/dtk
DTK_REDIS_URL=redis://:${REDIS_PASSWORD}@redis:6379/0
EOF

然后启动。默认 API 绑定在 127.0.0.1:8000,日志里会打印一个 setup token,用它创建第一个管理员:

docker compose -p dtk -f docker/compose.yml up -d
docker compose -p dtk -f docker/compose.yml logs api

想跳过本地构建、直接用已发布的镜像,设置好这两个环境变量再 pull 即可:

export DTK_IMAGE=evil0ctal/douyin_tiktok_download_api
export DTK_IMAGE_TAG=latest
docker compose -p dtk -f docker/compose.yml pull
docker compose -p dtk -f docker/compose.yml up -d

镜像同时支持 linux/amd64 和 linux/arm64,群晖、威联通这类 x86 / ARM 机型都能跑。如果你手上正好有 NAS,部署思路和「一站式通用 NAS Docker Compose 模板」那套流程是一致的,把它当成一个普通的 Compose 项目即可。

中国大陆服务器注意:拉取镜像前建议先切换镜像源,否则很可能因为网络超时失败。

更新与回滚

# 走已发布镜像的推荐方式
docker compose -p dtk -f docker/compose.yml pull api worker downloader
docker compose -p dtk -f docker/compose.yml run --rm migrate
docker compose -p dtk -f docker/compose.yml up -d

数据不会丢:命名卷(postgres-data、redis-data、media-data)在重建容器后依然存在。回滚需要把 DTK_IMAGE_TAG 指向之前的版本号或 sha- 值;migrations 没有自动降级,升级前务必备份数据库。

部署完成后,控制台的调度器页面能实时看到身份健康度、接口成功率与熔断情况,方便判断实例是否正常:

调度器页面,展示身份健康度、接口成功率与熔断状态
调度器:一次请求要经过身份健康度检查、轮换、限流与熔断,全部可观测

六、接口文档、Web 控制台与在线 Demo

不想先部署、只想看看长什么样,可以直接访问作者提供的公开 Demo:https://demo.douyin.wtf/。Demo 是共享的只读实例,登录页已经填好演示账号,无需注册;可以查看调试台、调度器、资料库和接口文档,但所有操作都不会被保存,涉及凭据的页面也做了隐藏。

Demo 当前限制为 每 10 秒 30 次请求,超出后进入 10 秒冷却。它可能随时重置、暂停或升级,不适合当作正式应用的生产 API,也不要往里提交自己的个人 Cookie、代理账号或其他敏感凭据。

接口文档页面内嵌了按当前界面语言渲染的 Swagger UI,能直接看到全部路径与操作数量:

接口文档页面,内嵌 Swagger UI,包含全部 API 路径与操作
接口文档:内嵌 Swagger UI,中英双语,也可直接打开 /swagger 或 /redoc

七、常见问题(FAQ)

Douyin TikTok Download API 是官方 API 吗?

不是。它是第三方开源项目,与抖音、TikTok 官方 API 以及 TikTok for Business MCP Server 都不是同一项服务。

所谓的「无水印」是 AI 擦除水印吗?

不是。项目做的是媒体地址解析——从平台返回的数据里挑选平台本身就提供的干净媒体流,而不是用 Photoshop 或 AI Inpainting 去修画面。如果上游没有提供对应的媒体流,接口也无法自己重新生成一份原始视频。这一点和站内介绍过的「抖音批量下载工具」思路类似,区别是 DTK 提供的是可编程接口而不是桌面客户端。

必须提供自己的 Cookie 吗?

不一定。启用浏览器身份组件后可以自动铸造游客身份;只有需要登录权限的数据,才可能需要导入自己的登录身份。

为什么接口返回 202?

因为 v5 的数据接口默认异步执行。返回的 task_id 可以继续查询结果,也可以加 ?wait=N 等待一段时间。

可以连接 Claude Code 吗?

可以。项目提供 /mcp 接口,用于连接支持 Model Context Protocol 的客户端。类似的 MCP 实践也可以参考站内的「ai-memory:让 Claude Code、Codex 与 Cursor 共享项目记忆」。

v4 可以直接升级到 v5 吗?

不能按普通小版本升级来处理。v5 是重新实现的版本,旧版接口、配置和部署方式需要重新适配。

自托管之后还会被限流吗?

会。自托管控制的是你自己的 API、数据库、身份池和归档服务,真正的数据仍然来自抖音和 TikTok。上游平台依旧可以根据 IP、Cookie、账号状态、请求频率、签名和地区限制请求。v5 的身份健康度、令牌桶和接口熔断能让问题更容易被发现和隔离,但不能保证某个 Web 接口永久有效。

它和「社媒助手」这类采集工具有什么区别?

站内介绍过的「小红书、抖音数据采集工具:社媒助手」偏向开箱即用的成品工具;DTK 提供的是可以自己部署、自己扩展的接口层,更适合需要把数据接进自有系统的场景。

八、使用边界与合规提醒

几点需要提前想清楚的事:

  • 密钥要自己生成。DTK_SECRET_KEY 用于保护项目保存的 Cookie 和代理凭据,应自行生成并妥善保存,不要使用网上复制来的固定值。
  • 不要把服务直接暴露在公网。PostgreSQL、Redis 和 Web 控制台都没有必要开放公网访问;需要远程访问时,可以配合 HTTPS、反向代理、API Key 或私有网络。
  • Apache-2.0 授权的是项目源码,并不代表抖音或 TikTok 同时授权了数据采集与内容再分发。
  • 能拿到媒体地址 ≠ 拥有转载权。项目文档也明确提醒,自动化采集可能受到平台服务条款限制,使用者需要遵守所在地法律,并自行处理版权、个人数据和内容授权问题。

九、项目地址

  • GitHub 仓库:https://github.com/Evil0ctal/Douyin_TikTok_Download_API
  • 项目文档 / 落地页:https://douyin.wtf/
  • 在线 Demo:https://demo.douyin.wtf/
  • 最新版本:https://github.com/Evil0ctal/Douyin_TikTok_Download_API/releases/latest
  • Docker 镜像:evil0ctal/douyin_tiktok_download_api
Douyin TikTok Download API 的 GitHub 仓库页面
GitHub 仓库:Apache-2.0 许可,Python 实现,配套 17 页中英双语文档

简单总结一下:如果你需要的是一个能自己掌控数据、可以把抖音和 TikTok 内容接进自有系统的接口层,DTK 目前的完成度相当高——自带身份池、异步任务、归档与 Web 控制台,还额外提供了 MCP 入口。但如果只是想偶尔下几个视频,直接用现成的桌面工具会更省事。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像-二楼后座
欢迎您留下宝贵的见解!
提交
头像-二楼后座

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容