
douyin-cli
面向抖音开放平台与网页工作流的 Rust 命令行工具,提供 OAuth、OpenAPI、Cookie 抓取、媒体下载、本地字幕和自动化集成。
功能
- 官方 OAuth 授权链接生成、code 换 token、token 刷新
- 官方
client_token、access_token 管理
- 授权用户信息查询
- 官方评论列表、评论回复列表、评论回复
- 企业号私信消息发送
- 任意官方 OpenAPI 路径请求
- 网页作品、账号、话题、音乐、合集与搜索结果采集/下载
- 网页评论与回复采集
- stdio MCP 服务器,供 MCP 客户端调用抖音 OpenAPI 工具
- whisper.cpp 本地字幕生成
- Obscura/自动化运行时集成
安装
从源码安装 Rust CLI:
cargo install --path .
开发构建和验证:
cargo build --release --locked
cargo test --locked
cargo clippy --locked --all-targets -- -D warnings
./target/release/douyin --help
Agent Skill
安装本仓库配套 skill:
bunx skills add LIghtJUNction/douyin -g
npx skills add LIghtJUNction/douyin -g
官方 OAuth 接入
准备抖音开放平台应用的 client_key、client_secret、回调地址和所需 scope。
douyin auth login \
--client-key "$DOUYIN_CLIENT_KEY" \
--client-secret "$DOUYIN_CLIENT_SECRET" \
--redirect-uri "https://example.com/callback" \
--scope user_info \
--scope item.comment
命令会输出官方授权链接。用户授权后,将回调中的 code 保存为 token:
douyin auth code --code "授权码"
也可以一步完成:
douyin auth login \
--client-key "$DOUYIN_CLIENT_KEY" \
--client-secret "$DOUYIN_CLIENT_SECRET" \
--redirect-uri "https://example.com/callback" \
--scope user_info \
--code "授权码"
本地开发或内网回调调试时,也可以让 CLI 临时监听回调并自动捕获 code。此模式会把回调地址设置为本机监听地址,需确保开放平台应用允许对应回调地址:
douyin auth login \
--client-key "$DOUYIN_CLIENT_KEY" \
--client-secret "$DOUYIN_CLIENT_SECRET" \
--scope user_info \
--listen \
--callback-port 8787
检查和刷新授权:
douyin auth status
douyin auth refresh
douyin auth logout
授权后,官方 OpenAPI 命令会自动读取已保存的 token 和 open_id,自动化调用不需要重复传参:
douyin api userinfo
douyin api comment-list --item-id "$DOUYIN_ITEM_ID"
网页端 Cookie 与兼容采集
除官方 OpenAPI 外,douyin 还保留网页端 Cookie 流程,用于搜索、主页作品、单作品和评论等兼容采集场景。Cookie 会保存到用户配置目录;测试或自动化时可用 DOUYIN_HOME 隔离状态。
douyin auth cookie-login --cookie "sessionid=...; ttwid=..."
douyin auth cookie-status
douyin -u "搜索关键词" -t search -l 5 --no-download
douyin -u "https://www.douyin.com/video/..." -t aweme
douyin auth cookie-logout
douyin comment 是隐藏兼容命令,不会出现在根命令帮助中,适合从单个作品 URL 抓取评论,也可以输出适合对话微调的数据格式:
douyin comment "https://www.douyin.com/video/..." --limit 100 --output comments.json
douyin comment "https://www.douyin.com/video/..." \
--with-replies \
--format chatml-jsonl \
--output comments.jsonl
Obscura 集成
douyin 提供稳定的 JSON 输出和集成 manifest,Obscura 可以直接发现命令能力并调用官方 OpenAPI。
douyin obscura manifest
douyin obscura status
douyin auth status --json
网页评论抓取
评论抓取继续使用网页 Cookie,并复用仓库原有的 Node.js 签名脚本:
douyin auth cookie-login --cookie "sessionid=...; ttwid=..."
douyin comment "https://www.douyin.com/video/..." --limit 100
douyin comment "https://www.douyin.com/video/..." --with-replies --format chatml-jsonl --output comments.jsonl
网页采集与下载
根命令兼容 URL、ID、搜索关键词和目标文件,默认读取 douyin auth cookie-login 保存的 Cookie:
douyin -u "搜索关键词" -t search -l 5 --no-download
douyin -u "https://www.douyin.com/video/..." -t aweme
douyin -u "https://www.douyin.com/user/..." -t post -l 20
douyin -u targets.txt -p ./downloads --download-title --download-cover
支持 post、favorite、music、hashtag、search、following、follower、collection、mix 与 aweme 类型。采集结果保存为 JSON 和 aria2 兼容下载清单;未指定 --no-download 时由 Rust 下载器写入媒体文件。
MCP 服务器
douyin mcp 会通过 stdio 启动 MCP 服务器,默认复用 douyin auth 保存的官方 OpenAPI 授权信息。
douyin mcp
MCP 客户端配置示例:
{
"mcpServers": {
"douyin": {
"command": "douyin",
"args": ["mcp"]
}
}
}
Claude Code 命令行配置:
claude mcp add douyin -- douyin mcp
claude mcp list
claude mcp get douyin
Codex CLI 命令行配置:
codex mcp add douyin -- douyin mcp
codex mcp list
codex mcp get douyin
可用工具包括授权状态、用户信息、评论列表、评论回复、企业号私信发送和通用 OpenAPI 请求。首次使用前先完成授权:
douyin auth login \
--client-key "$DOUYIN_CLIENT_KEY" \
--client-secret "$DOUYIN_CLIENT_SECRET" \
--redirect-uri "https://example.com/callback" \
--scope user_info
douyin auth code --code "授权码"
douyin mcp
推荐接入顺序:
douyin auth login \
--client-key "$DOUYIN_CLIENT_KEY" \
--client-secret "$DOUYIN_CLIENT_SECRET" \
--redirect-uri "https://example.com/callback" \
--scope user_info
douyin auth code --code "授权码"
douyin auth status --json
官方 OpenAPI
douyin api client-token \
--client-key "$DOUYIN_CLIENT_KEY" \
--client-secret "$DOUYIN_CLIENT_SECRET"
douyin api userinfo \
--token "$DOUYIN_ACCESS_TOKEN" \
--open-id "$DOUYIN_OPEN_ID"
douyin api comment-list \
--token "$DOUYIN_ACCESS_TOKEN" \
--open-id "$DOUYIN_OPEN_ID" \
--item-id "$DOUYIN_ITEM_ID"
douyin api comment-reply \
--token "$DOUYIN_ACCESS_TOKEN" \
--open-id "$DOUYIN_OPEN_ID" \
--item-id "$DOUYIN_ITEM_ID" \
--comment-id "$DOUYIN_COMMENT_ID" \
--content "谢谢反馈"
企业号私信发送需要应用已开通 enterprise.im 权限,并从私信事件回调中拿到接收方 to_user_id:
douyin auth login \
--client-key "$DOUYIN_CLIENT_KEY" \
--client-secret "$DOUYIN_CLIENT_SECRET" \
--redirect-uri "https://example.com/callback" \
--scope enterprise.im
douyin api im-message-send \
--to-user-id "$DOUYIN_TO_USER_ID" \
--text "你好,已收到" \
--yes
通用请求:
douyin api request GET /oauth/userinfo/ \
--token "$DOUYIN_ACCESS_TOKEN" \
--param open_id="$DOUYIN_OPEN_ID"
本地字幕
douyin subtitle video.mp4 --language zh
douyin subtitle voice.mp3 --language zh
douyin subtitle meeting.wav --format txt
douyin subtitle video.mp4 --model small --format srt
输入可以是本地视频或音频文件,输出支持 SRT、VTT、TXT 和 JSON。默认写到同名字幕文件,例如 voice.mp3 会生成 voice.srt。首次使用模型别名时会从 whisper.cpp 的 Hugging Face 仓库下载 GGML 模型;也可以直接传入本地 .bin 模型:
douyin subtitle video.mp4 --model ./ggml-small.bin --local-files-only
douyin subtitle *.mp4 --output subtitles/ --format vtt
macOS 构建默认启用 Metal。其他平台默认使用 CPU;需要 CUDA 时以对应特性构建:
cargo install --path . --features cuda
douyin subtitle video.mp4 --device cuda --language zh
--backend auto 与 --backend whisper-cpp 使用同一 Rust 原生后端。--compute-type 仅为旧命令兼容参数;实际量化精度由所选 GGML 模型决定。
环境变量
DOUYIN_CLIENT_KEY
DOUYIN_CLIENT_SECRET
DOUYIN_ACCESS_TOKEN
技术栈
- Rust 2024 edition
- Clap
- Reqwest + rustls
- Serde JSON
- Symphonia + whisper.cpp
- Cargo