dsh-douyin:把抖音接入 DeepSeek Harness

前言

DeepSeek Harness(DSH)的插件化设计让很多能力可以像调用系统命令一样使用。当智能体需要了解抖音上的内容、视频画面或与用户、群组交互时,一个能直接接入抖音的工具链会很有用。dsh-douyin 就是为这个场景准备的 DSH 插件,它把热榜、搜索、视频详情、下载与抽帧、以及私信/群聊都作为一等公民工具暴露出来,并附带一个本地 HTTP API。

这是什么

dsh-douyin 是一个 DSH 插件(Cordis Host 插件,工具注册到 ctx.tools),同时提供一组可以独立运行的 Python 脚本。它基于 SakuraMat0u/dsh-douyin-toolkit(MIT)改造,在保留上游核心设计的基础上增加了 Linux/headless 适配、私信与群聊驱动、视频下载与抽帧、本地 HTTP API,并将所有服务器路径参数化。插件由维护者 JianHeShui 维护,归类为「联网工具」。

核心能力

它主要解决四个问题:

  1. 读得动:获取热榜条目、热度与搜索链接;关键词搜索;获取视频详情、作者、互动数据、评论;查看用户主页。
  2. 看得懂:下载视频后用 ffmpeg 均匀抽 4–12 帧,把帧路径交给支持视觉的模型(如 DeepSeek flash 的原生视觉),不需要自己实现视频理解。
  3. 说得上话:通过 Playwright 驱动抖音网页版,给单个用户发送私信、给群聊发消息。
  4. 接得住:所有能力通过本地 HTTP API(默认 127.0.0.1:7709)暴露,任何语言写的上层程序都能调用。

它不做:发布视频、批量点赞关注、养号、多账号矩阵、自动过验证码、签名逆向。

特性一览

能力 说明 需要登录
热榜 抖音热榜条目、热度、搜索链接 否
搜索 关键词搜索,search_id 链式翻页 是(多数情况)
视频详情 文案、作者、互动数据、前 N 条评论 是
用户主页 简介、粉丝、近期作品 是
视频下载 移动端分享页解析无水印直链 是
抽帧 ffmpeg 均匀抽 4–12 帧 是
私信 / 群聊 Playwright 驱动网页版,dry-run 默认,三道闸 是
登录状态机 可轮询的扫码/短信状态机(有头环境) —
状态自检 依赖、登录态、配额、上次错误一句话总结 否
HTTP API 上述能力的 JSON 接口 视接口

其它工程特性:

  • 单 worker + 抖动:所有后端调用串行,翻页 3–8 秒高斯抖动,独立调用 1.8–3.2 秒,避免明显的机器人节奏。
  • 小时配额 + 指数退避:滚动 1 小时请求预算(默认 60),触发限流后 1/2/4/8/15 分钟退避,不立即重试。
  • 凭证脱敏:cookie、sessionid、passport_*、localStorage、storage_state 不会出现在返回值、日志或报错里。
  • 账号指纹:记录首个登录账号的不可逆指纹,换号后写操作直接拒绝。
  • 缺失即 null:抖音数据稀疏,缺字段返回 null,不填 0、不猜。

安装与启用

  1. 克隆仓库并创建虚拟环境
git clone https://github.com/JianHeShui/dsh-douyin.git
cd dsh-douyin

python3 -m venv .venv
# Linux / macOS
.venv/bin/pip install -r python/requirements.txt
# Windows
# .venv\Scripts\pip install -r python\requirements.txt

需要 HTTP API 的话,再装一层:

.venv/bin/pip install -r python/requirements-http.txt
  1. 准备浏览器
    Windows 上装了 Edge 就不用管。Linux / macOS:
.venv/bin/playwright install chromium

也可以用系统包(apt install chromium),插件会自动发现。要指定就用 DOUYIN_BROWSER=/usr/bin/chromium,或在插件配置里设 edgePath。

  1. 装进 DSH
dsh plugin --profile desktop add file:$PWD
# 或按你的 profile 名: --profile web

插件自带 cordis.patch.yml,安装时会插入 id: douyin 的配置行。装完重启 DSH。自检:

./scripts/selfcheck.sh          # Windows: .\scripts\selfcheck.ps1

4.(可选)起 HTTP 服务

./scripts/run-http.sh           # Windows: .\scripts\run-http.ps1
curl -s http://127.0.0.1:7709/health | jq .

登录

必须在有显示器的电脑上登录,再把 cookie 送到服务器。服务器 headless 环境无法扫码、无法过滑块。

本地执行:

.venv/bin/python tools/export_login_state.py

扫码登录成功后,自动写出 data/home/.dy/cookies/default.json。再通过 scp 传到服务器:

scp data/home/.dy/cookies/default.json user@server:~/dsh-douyin/data/home/.dy/cookies/default.json
ssh user@server 'chmod 600 ~/dsh-douyin/data/home/.dy/cookies/default.json'

完整流程与过期处理见 docs/COOKIE-GUIDE.md。登录后可验证:

curl -s -X POST http://127.0.0.1:7709/im/status | jq .

典型用法

在 DSH 里:

douyin_status                                   # 先看状态
douyin_hot({"count": 10})                       # 热榜
douyin_search({"keyword": "开源", "limit": 5})   # 搜索
douyin_video({"aweme_id": "7xxxxxxxxxxxxxx"})   # 视频详情

看视频内容(推荐路径):

POST /frames {"aweme_id": "...", "n": 8}   # 拿到 8 张帧
→ 把帧路径交给视觉模型,问"这条视频讲了什么"

HTTP 侧:

# 热榜
curl -s -X POST http://127.0.0.1:7709/trending | jq .

# 搜索
curl -s -X POST http://127.0.0.1:7709/search \
  -H 'Content-Type: application/json' \
  -d '{"keyword":"猫","count":5}' | jq .

# 下载 + 抽帧
curl -s -X POST http://127.0.0.1:7709/frames \
  -H 'Content-Type: application/json' \
  -d '{"aweme_id":"7xxxxxxxxxxxxxx","n":8}' | jq .

# 私信(默认 dry-run:只填框 + 截图 + 清空)
curl -s -X POST http://127.0.0.1:7709/im/send \
  -H 'Content-Type: application/json' \
  -d '{"to":"某某","text":"在吗"}' | jq .

完整接口、错误码、dry-run 语义见 docs/HTTP-API.md。

适用场景与注意

适合需要让智能体主动了解抖音内容、通过视频画面进行理解、或在 DSH 生态中直接操作私信/群聊的场景。使用前请检查源码与许可证(MIT),确认符合你的合规要求。

短结尾

dsh-douyin 把抖音的热榜、搜索、视频理解与私信/群聊都作为 DSH 的一等公民工具暴露出来,并附带本地 HTTP API。它基于 SakuraMat0u/dsh-douyin-toolkit 改造,增加了 Linux/headless 适配、私信与群聊驱动、视频下载与抽帧、本地 HTTP API,并将所有服务器路径参数化。适合需要让智能体主动了解抖音内容、通过视频画面进行理解、或在 DSH 生态中直接操作私信/群聊的场景。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye