查热榜搜视频看用户,扫码登录后可发受控评论
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SakuraMat0u/dsh-douyin-toolkit该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/21) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 19 处,展示前 13 条)
- 写入本地文件lib/backend.js:185
mkdirSync(dir, { recursive: true }); - 读取本地文件lib/backend.js:197
if (candidate && existsSync(candidate)) return candidate; - 读取本地文件lib/backend.js:203
if (this.config.edgePath && existsSync(this.config.edgePath)) return this.config.edgePath; - 读取本地文件lib/backend.js:204
if (process.env.DOUYIN_EDGE_PATH && existsSync(process.env.DOUYIN_EDGE_PATH)) { - 读取本地文件lib/backend.js:211
if (existsSync(candidate)) return candidate; - 执行外部命令来自配置/变量lib/backend.js:239
child = spawn(file, args, { - 读取本地文件lib/backend.js:460
return JSON.parse(readFileSync(path, 'utf8')); - 写入本地文件lib/backend.js:468
writeFileSync(tmp, JSON.stringify(value, null, 2), 'utf8'); - 写入本地文件lib/backend.js:469
renameSync(tmp, path); - 读取本地文件lib/backend.js:499
const cookiePresent = existsSync(this.cookiePath()); - 执行外部命令来自配置/变量lib/backend.js:592
const child = spawn(py, [this.bridgeScript, 'login-daemon'], { - 写入本地文件lib/backend.js:809
appendFileSync(file, line, 'utf8'); - 发起网络请求lib/tools.js:312
const response = await fetch(raw, { redirect: 'follow', signal: exec.signal });
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
抖音工具集,用于 DeepSeek Harness:dy-cli 读取时带 Edge XHR 兜底,二维码/短信登录状态机,账号指纹,受保护的评论功能。
README
由 DeepSeek 最新模型翻译生成dsh-douyin-toolkit
把抖音接入 DeepSeek Harness,作为 DSH 的一等公民工具:热榜、搜索、视频、用户、状态自检,外加一套可轮询的扫码/短信登录状态机和一条默认 dry-run 的受控评论。发布只保留接口,不执行。
这是一个 Cordis Host 插件,不是 MCP server;工具直接注册到 ctx.tools。
和已有项目的区别
GitHub 上已经有一些同类项目。这个仓库不是从零重复造轮子,而是把它们的成熟部分组合成一个完整的 DSH 工具插件:
| 项目 | 关系 |
| Youhai020616/douyin(dy-cli) | 直接复用:热榜、搜索、用户资料的逆向接口、cookie 读取、错误码和 JSON 信封都在这里 |
| Kuhakucai/douyin-mcp | 登录态判定(localStorage.HasUserLogin)、专用 profile、单 worker 的设计参考 |
| WJZ-P/douyin-upload-mcp-skill | 多阶段登录状态机的设计参考 |
| NanmiCoder/MediaCrawler | search_id 链式翻页、翻页风控等已知坑 |
展开完整文档(README 剩余 1 节)
dsh-douyin-toolkit
把抖音接入 DeepSeek Harness,作为 DSH 的一等公民工具:热榜、搜索、视频、用户、状态自检,外加一套可轮询的扫码/短信登录状态机和一条默认 dry-run 的受控评论。发布只保留接口,不执行。
这是一个 Cordis Host 插件,不是 MCP server;工具直接注册到 ctx.tools。
和已有项目的区别
GitHub 上已经有一些同类项目。这个仓库不是从零重复造轮子,而是把它们的成熟部分组合成一个完整的 DSH 工具插件:
| 项目 | 关系 |
| Youhai020616/douyin(dy-cli) | 直接复用:热榜、搜索、用户资料的逆向接口、cookie 读取、错误码和 JSON 信封都在这里 |
| Kuhakucai/douyin-mcp | 登录态判定(localStorage.HasUserLogin)、专用 profile、单 worker 的设计参考 |
| WJZ-P/douyin-upload-mcp-skill | 多阶段登录状态机的设计参考 |
| NanmiCoder/MediaCrawler | search_id 链式翻页、翻页风控等已知坑 |
| nisew2/dsh-whale-dive | 最接近的 DSH 插件:用真实 Edge/CDP 读抖音 hot/feed/video/search/status,只读 |
| canadaeee/dsh-douyin | 同生态,但做的是企业号私信通道,不是内容工具 |
和 dsh-whale-dive 的主要差异:
- 只读路径优先走 dy-cli 的逆向 API(更快、更省浏览器),接口失效时才回退到页面 XHR;
- 有 login_start -> login_status -> login_submit 的扫码/短信状态机,而不是只看 cookie 是否存在;
- 有用户作品、账号指纹、单条评论、发布接口占位;
- 有单 worker、3–8 秒页间抖动、小时配额和指数退避。
工具
| 工具 | 入参 | 说明 | 通道 |
| douyin_hot | count? | 热榜条目、热度、搜索链接 | 逆向 API |
| douyin_search | keyword, limit?, pages?, cursor?, sort? | 搜索;next_cursor 走 search_id 链式分页 | 逆向 API |
| douyin_video | aweme_id 或 url, comment_limit? | 文案、作者、互动数据、前 N 条评论 | 逆向 API → 浏览器 XHR 回退 |
| douyin_user | user 或 sec_uid, post_limit? | 简介、粉丝、近期作品 | 逆向 API + 浏览器 XHR |
| douyin_status | — | 一句话结论、登录态、配额、上次错误 | 本地 |
| douyin_login_start | — | 打开专用 Edge,返回 qrcode 和截图路径 | 浏览器 |
| douyin_login_status | — | 轮询 idle/qrcode/sms_/challenge_required/logged_in/expired/failed/stopped | 本地/浏览器 |
| douyin_login_submit | codes | 提交 4–8 位短信验证码 | 浏览器 |
| douyin_verify | keyword?, timeout_seconds? | 打开验证页让你手动过滑块/验证,插件只轮询 | 浏览器 |
| douyin_comment | aweme_id 或 url, content, dry_run?, confirm? | 单条评论;dry_run 默认 true | 浏览器 |
| douyin_publish | 接口参数 | 恒返回 implemented:false,不发请求 | — |
架构
DSH Cordis 插件(dsh-douyin-toolkit) ├─ 工具注册 / 参数校验 / 错误码 / 限频 / 配额 / 并发锁 / 日志脱敏 ├─ 只读后端:dy-cli(子进程) │ ├─ 热榜、用户资料、视频详情:python -m dy_cli.main <cmd> --json-output │ └─ 搜索:python dy_query.py search(复用 dy-cli client,只补 offset + search_id) └─ 浏览器后端:系统 Edge(Playwright,独立 profile) ├─ 扫码 / 短信登录状态机 ├─ 视频详情与评论:截获页面自己发出的签名 XHR ├─ 用户作品:截获页面自己发出的签名 XHR └─ 单条评论
插件本身不实现 X-Bogus、不重写登录协议、不绕过验证码。
环境要求
- Windows(当前只在 Windows 上实测;代码里没有 Windows 专属 API,但 Edge 路径发现和 profile 清理是 Windows 优先)
- Python 3.10+(实测 3.14)
- Node.js 22+(DSH 自带)
- 系统已安装 Microsoft Edge。默认路径: C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
- 不需要 playwright install chromium,也不使用 Chrome
安装
方式 A:克隆到固定目录(推荐)
bash
git clone https://github.com/SakuraMat0u/dsh-douyin-toolkit.git
cd dsh-douyin-toolkit
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r python\requirements.txt
然后用插件管理器把它作为本地 bundle 安装,target 传这个克隆目录的绝对路径: text plugin_manager install_bundle target = <克隆目录>
或者用 DSH 的插件命令: powershell
dsh plugin --profile desktop add <克隆目录的绝对路径>
这样 .venv 就在插件包旁边,pythonPath 不需要额外配置,data/ 也默认落在这个目录里。
方式 B:直接从 GitHub 安装 powershell
dsh plugin --profile desktop add github:SakuraMat0u/dsh-douyin-toolkit
pnpm 安装的是包副本,不会带 .venv。安装后需要在 profile 的 cordis.patch.yml 里补两项配置:
yaml
- id: douyin
name: dsh-douyin-toolkit
config:
pythonPath: C:\path\to\python.exe # 已安装 dy-cli 和 playwright 的解释器 dataDir: C:\path\to\writable\dir # 专用 Edge profile、cookie、日志都写这里
无论哪种方式,改完配置后重启 DSH。
挂载与配置
bundle 自带 cordis.patch.yml,安装时会插入: yaml
- insert:
- id: douyin
name: dsh-douyin-toolkit
config:
enabled: true
writesEnabled: false
...
不要再用 insert 手工挂同一个 id;要改配置,在 profile 的 cordis.patch.yml 顶层加同 id 覆盖行: yaml
- id: douyin
name: dsh-douyin-toolkit
config:
writesEnabled: true
maxSearchPages: 2
或者用启动时的额外 patch 层: powershell
dsh --profile desktop --patch <仓库>\examples\standalone.patch.yml
配置合成结果可以用 dsh --profile desktop --dump-config 检查。
配置项
| 字段 | 默认 | 说明 |
| enabled | true | 关闭后不注册任何工具 |
| writesEnabled | false | 写操作总开关;为 false 时 douyin_comment 只返回 writes_disabled |
| toolEnabled | 全部 true | 每条工具单独开关:hot / search / video / user / status / login / verify / comment / publish;设为 false 就不注册该工具 |
| maxResults | 20 | 单次返回上限,硬上限 20 |
| maxSearchPages | 3 | 单次搜索最多翻页数,硬上限 3 |
| hourlyRequestBudget | 60 | 滚动 1 小时的后端请求预算 |
| pageDelayMinMs / pageDelayMaxMs | 3000 / 8000 | 翻页之间的高斯抖动区间 |
| callDelayMinMs / callDelayMaxMs | 1800 / 3200 | 独立调用之间的最小间隔 |
| pythonPath | 空 | 默认 <插件目录>\.venv\Scripts\python.exe |
| dataDir | 空 | 默认 <插件目录>\data |
| edgePath | 空 | 默认自动发现系统 Edge |
| logLevel | info | silent / error / info / debug |
登录状态机
1. douyin_login_start:打开独立 Edge(<dataDir>\browser-profile),返回 phase: qrcode 和二维码截图路径。
2. 用抖音 App 扫码,在手机上确认。
3. 轮询 douyin_login_status。成功后插件把 storage_state 写到 <dataDir>\home\.dy\cookies\default.json(dy-cli 读取的路径),并记录 sec_uid、昵称和作品指纹。
4. 若切到验证码登录:先自己填手机号,再调用 douyin_login_submit 传 codes。
5. 若出现滑块/安全验证:插件不会绕过。调用 douyin_verify 打开可见窗口,手动完成后重试。
只有同时满足以下条件才判定为已登录:
- 页面 localStorage.HasUserLogin 为真,或
- cookie 中存在 sessionid / sessionid_ss(兜底)
两者都拿不到时返回 unknown,不会武断报「未登录」,也不会自动触发重新登录。
login_start 每次启动都会重置登录状态;换号后旧 sec_uid 不会沿用。账号与首次记录不一致时,写工具返回 account_mismatch,删除 <dataDir>\state\account.json 后重试。
风控与数据语义
- 全局单 worker,并发 1;所有 dy / 浏览器调用串行。
- 翻页之间 3–8 秒高斯抖动;独立调用之间 1.8–3.2 秒。
- 滚动 1 小时请求预算,默认 60;douyin_status 显示已用/剩余。
- 触发 rate_limited / challenge_required 后按指数退避(1、2、4、8、15 分钟),不立即重试。
- 搜索返回 verify_check 时映射为 challenge_required,不会静默返回 0 条。
- 缺失字段一律 null,不填 0、不猜。
- 部分成功返回 partial: true + failures[] + coverage。
- 分页使用不透明 next_cursor,不要用页码推算。
- 错误码固定:not_authenticated / challenge_required / rate_limited / not_found / parse_failed / profile_in_use / backend_unavailable;写操作另有 account_mismatch、invalid_args。
- cookie、sessionid、passport_、localStorage、storage_state 不会进入工具返回值、日志或报错。
故障排查
| 现象 | 处理 |
| profile_in_use | 专用配置档已被登录窗口占用;先 douyin_login_status,或关闭那个 Edge 窗口。插件只会清理命令行里带本插件配置档的 Edge 进程。 |
| not_authenticated | 调用 douyin_login_start 重新扫码;不会静默重试。 |
| challenge_required | 调用 douyin_verify,在可见窗口手动完成验证。 |
| backend_unavailable + 找不到 Python | 检查 <插件目录>\.venv\Scripts\python.exe 是否存在,或配置 pythonPath。 |
| backend_unavailable + Playwright 启动失败 | 确认 Edge 路径;插件会先清理自己的残留 Edge 再重试一次。Edge 自动更新替换 msedge.exe 时属于偶发断连,重启登录即可。 |
| 控制台中文乱码 | 插件已给子进程设置 PYTHONIOENCODING=utf-8 / PYTHONUTF8=1;手工执行时也要设置。 |
| 搜索/详情为空 | 先看 douyin_status 的 last_error;如果是 challenge_required,按上一条处理。 |
| dataDir 不可写 | 方式 B 从 pnpm 安装时尤其常见;把 dataDir 指到一个可写目录。 |
插件把子进程的 USERPROFILE / HOME / TMP / TEMP 都重定向到 <dataDir>\home 和 <dataDir>\tmp,因此 dy-cli 的 ~/.dy 落在插件数据目录内,不会污染日常 .dy 或浏览器配置档。
自检 powershell powershell -ExecutionPolicy Bypass -File scripts\selfcheck.ps1
它会打印 Python/Edge 探测结果、桥接状态和一次真实热榜(3 条)。在 DSH 里也可以直接调用 douyin_status。
加一个新工具
1. 在 lib/tools.js 的 createTools() 数组里加一个 defineTool({...})。
2. parameters 用作者 DSL:属性上的 required: true 会被本地 defineTool 提升为对象级 required。
3. 只读命令优先走 backend.runDy([...]) 或 backend.runDyQuery([...]);需要浏览器时走 backend.runBrowser(command, [...])。
4. 结果先用 lib/normalize.js 归一化,再 return backendNote({...});不要返回 cookie/localStorage。
5. 在 cordis.patch.yml、README.md 和 lib/tools.js 的开关映射里补一行,重新安装 bundle。
能力边界
能做的:
- 读热榜、按关键词搜索、search_id 链式翻页、读视频详情与前 N 条评论、读用户资料与近期作品。
- 用专用 Edge 配置档扫码/短信登录,状态可轮询、可中断、可重试。
- 发出单条评论(默认 dry-run,且默认 writesEnabled:false)。
不能做 / 不做的:
- 批量评论、批量点赞、批量关注、私信群发、养号、多账号矩阵。
- 自动过验证码、接打码平台、新的签名逆向。
- headless 运行这个小号。
- 未经确认的发布;douyin_publish 只保留接口。
明显提高风控的操作:
- 高频搜索/翻页、短时间重复同一关键词、无间隔连续调用。
- 在没有登录态时反复请求搜索/详情。
- 用同一个配置档同时开多个浏览器/插件实例。
安全
- <dataDir> 含 cookie、登录状态和账号指纹,不要提交、不要分享。
- 工具返回值和日志都做了凭证脱敏。
- 写操作默认关闭,真实发送需要 writesEnabled: true + dry_run: false + confirm: true。
- 插件不会自动解决验证码,也不会把 cookie 发给第三方。
许可与致谢
MIT。见 LICENSE。
感谢 dy-cli、douyin-mcp、douyin-upload-mcp-skill、MediaCrawler 和 dsh-whale-dive 的作者;这个项目主要是在它们的基础上做集成和 DSH 适配。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
SakuraMat0u/dsh-douyin-toolkit
查热榜搜视频看用户,扫码登录后可发受控评论
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,826已汉化DSH
72.2
花束设计alchaincyf/huashu-design
一句话生成网页、原型、PPT 与信息图等可交付设计
★ 28,638已汉化DSH
71.7
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
这是你的仓库?认领条目