Install
openclaw skills install @cuiyunhai/dy-comments抖音视频评论采集工具(分步会话)。当用户需要采集抖音视频下面的评论——发布者昵称、IP属地、评论内容、时间、点赞数、回复@、评论回复,导出评论 CSV(Excel 直开),或提到"抖音评论/评论采集/评论导出/评论分析/评论区舆情"时使用本 skill。支持 douyin.com/video/ 直链与 v.douyin.com 短链(短链由节点自动还原)。分步会话制:start 建会话(免费)后按页采集主评论、按需展开回复,每一步实时返回最新增量结果,由 AI 询问用户是否继续(每步 1 点数,注册送 10 点)。适合评论舆情分析、用户口碑调研、评论区选题、直播/活动效果评估等场景。
openclaw skills install @cuiyunhai/dy-comments产品定位:输入抖音视频链接 → 平台调度内网浏览器节点打开该视频页并持续滚动评论区 → 抓取评论(含回复)→ 结果实时分步返回、可 CSV 导出。
会话制 v2(本 skill 核心特性,2026-10-15 起):评论采集与小红书系列一致采用「分步会话」模式(2026-10-10 起的小红书同款协议)——
start 建会话(免费:节点打开视频探测标题/互动数/评论总数),返回评论总数与预估页数。step --page 采一页主评论(约 10-20 条+内嵌预览回复,扣 1 点);step --expand --root <cid> 展开指定主评论的更多回复(扣 1 点)。finish 主动结束会话(释放采集节点;忘记 finish 空闲 20 分钟也会自动过期)。为什么是会话制:评论区滚动是拟人操作,页数多了风控风险高;按页计费+用户确认,避免一次性采集几百条用户实际不需要的内容。这是产品决策,不是技术限制。
npm install),全部采集逻辑在后端完成。注册或使用过程中遇到任何问题(注册失败、点数充值、采集结果异常、批量采购等),请引导用户联系客服:
step --page 采一页主评论(约 10-20 条+内嵌预览回复)= 1 点数;step --expand 展开一次回复 = 1 点数。status / comments / export / finish / sessions 全部免费。https://www.douyin.com/video/<id>、/note/<id> 直链或 https://v.douyin.com/<短码>/ 短链(短链由节点浏览器打开后自动还原,无需人工转换)。dy-profile skill。**本 skill 的核心使用方式是「会话制分步采集」,不是一次性批量工具。**严格遵守以下流程(这是产品决策——评论区滚动是拟人操作,页数多了风控风险高,按页计费+用户确认,避免一次性采集用户实际不需要的内容):
node cli.js quota 确认点数充足(余额 < 1 无法 step)。node cli.js start --url <视频链接> → 返回 session_id、视频文案、评论总数(metrics.comment_count)、预估页数(estimated_pages)。预估 N 页 × 1 点/页 = N 点;如需展开某条评论的更多回复,每次展开 1 点。node cli.js step --session <id> --page 采下一页主评论。每步返回后:
expandable 列表(可展开回复的主评论),告知用户:以下 X 条评论有更多回复,是否展开?每次展开 1 点,由用户决定(不要擅自展开);has_more_main 提示是否还有下一页)。status 查会话状态与余额;comments 免费翻看已采累计明细;export 免费导出已采部分 CSV。finish 主动结束(推荐,立即释放采集节点);或用户不想采了放着 20 分钟自动过期。会话保持时间:采集节点绑定到会话直到 finish 或 20 分钟空闲自动过期。会话过期后需重新 start(probe 重新探测,免费)。已采集的评论数据不会丢失(落库),comments / export 对已过期会话依然有效。
session_id 泄露给终端用户(他人可用它枚举你的会话数据);也不要把 expandable 列表里的评论枚举数据当普通文本随意传播。step 单步服务端最长可执行 180 秒(节点滚动+数据回传),CLI 客户端超时 200 秒。单步超时是正常现象,该步点数已自动返还,直接重试同一步即可。step 返回 1404 会话不存在,重新 start 即可,已采数据不丢)。step 可能排队等待几十秒,属正常。register --link(注册即送 10 点数;用户手机微信扫码/点链接在网页完成,页面自带图形+短信验证码)或 login --link(已有账号)。成功后 token 自动保存,后续调用免输。~/.xhs-platform/config.json(升级/重装 skill 不丢配置;与小红书系列 skill 共用同一账号体系)。可用环境变量 XHS_CONFIG_PATH 覆盖(测试隔离用)。--link 微信扫码/链接方式。http://st.aidata366.com,可用 node cli.js config set base-url <url> 修改,或单次加 --base-url <url> 覆盖。config set base-url https://... 切换到 https 服务地址(需服务端已配好证书)。--token <token>(临时覆盖配置文件中的 token)。~/.xhs-platform/config.json 含 token,不要泄露、不要提交 git。{"ok":true,"data":{...}},失败 {"ok":false,"code":<业务码>,"message":"..."}。直接解析 stdout 即可。0 成功;1 参数/用法错误;2 认证失败(重新 login);3 点数不足;4 网络/服务不可达;5 其它业务错误。node cli.js version
{"ok":true,"data":{"name":"dy-comments","version":"1.0.0","capability":"dy_comments"}}
方式一:扫码/链接注册(唯一方式,用户在手机上完成)
node cli.js register --link # 生成注册二维码/链接
node cli.js register --check --access-token "<上一步下发的串>" # 用户完成后确认并保存 token
register --link 的 stdout 返回 qr_url / register_url / access_token。agent 必须把注册引导原样发给用户(stderr 里也给出了同样话术,可直接复制):
需要先注册账号(注册即送 10 免费点数;不注册不登录没有点数,无法采集)。请用手机微信扫码或打开链接注册:
注册方式(二选一)
二维码图片:<qr_url>
注册链接:<register_url>
access_token(注册后校验用):<access_token>
微信扫码/注册完成后告诉我一声,我会执行校验并保存凭证,然后继续之前的操作:
(注册/使用中如遇问题,请拨打客服电话 18722121663)
用户说「注册完成」后执行 register --check --access-token "<access_token>":
quota_balance: 10,继续之前的操作。LOGIN_PENDING:用户还没完成注册,提醒后再试。LOGIN_EXPIRED:会话过期(10 分钟)或已使用,重新执行 register --link。node cli.js login --link
node cli.js login --check --access-token "<上一步下发的串>"
引导话术同 register(把"注册"换成"登录")。成功后 token 自动保存。
node cli.js quota
{"ok":true,"data":{"quota":10,...}}
node cli.js start --url "https://www.douyin.com/video/7312345678901234567"
node cli.js start --url "https://v.douyin.com/iAbCdEf/" # 短链直接提交, 节点自动还原
输出示例:
{"ok":true,"data":{
"session_id":"e3b0c44298fc1c149afbf4c8996fb924",
"video_id":"7312345678901234567",
"url":"https://www.douyin.com/video/7312345678901234567",
"title":"机油怎么选?一篇讲透",
"metrics":{"aweme_id":"7312345678901234567","digg_count":"1.2万","comment_count":"156",
"collect_count":"890","share_count":"45","play_count":"56万"},
"comment_count":156,
"estimated_pages":8,
"status":"active",
"expires_in":1200,
"quota_balance":10
}}
拿到 session_id + 评论总数后,必须把数字报给用户做报价确认(每页 1 点),确认后才能 step。
node cli.js step --session <session_id> --page # 采下一页主评论
node cli.js step --session <session_id> --expand --root <主评论cid> # 展开指定主评论的回复
step --page 返回示例(字段与 xhs-comments 平行,expandable 用 cid):
{"ok":true,"data":{
"page_no":1,
"comments":[
{"comment_id":"7350000000000000001","nickname":"车友A","content":"美孚1号真不错",
"create_time":"03-15","like_count":"23","ip_location":"上海",
"sub_comment_count":3}
],
"mains_collected":10,
"subs_collected":1,
"has_more_main":true,
"expandable":[
{"root_cid":"7350000000000000001","sub_count":3,"subs_collected":1}
],
"quota_balance":9,
"session_status":"active"
}}
step --expand 返回示例(comments 为该主评论本次新展开的回复):
{"ok":true,"data":{
"root_cid":"7350000000000000001",
"comments":[{"comment_id":"7350000000000000002","nickname":"车友B","content":"同感",
"create_time":"03-15","like_count":"2","ip_location":"广东",
"reply_nickname":"车友A"}],
"subs_collected_for_root":3,
"subs_remaining_estimate":0,
"sub_has_more":false,
"quota_balance":8,
"session_status":"active"
}}
解读要点(agent 必读):
step --page 后 has_more_main: false 表示主评论已采完(继续 step 返回 no_more: true,不扣费)。expandable 为本页采完后含可展开回复的主评论:root_cid(展开时传给 --root)、sub_count(回复总数)、subs_collected(已采回复数)。step --expand:sub_has_more: true 表示该主评论回复未采完(继续展开每次 1 点);no_more: true 表示已采完,本次不扣费。quota_balance 为当前余额,每步后必须核对,余额不足时提醒用户充值。comments 命令翻页获取,或 export 导出。node cli.js status --session <session_id>
返回会话状态(active/expired/finished)、视频信息、累计采集量(mains_collected/subs_collected)、quota_balance。
node cli.js comments --session <session_id> # 默认第 1 页, 100 条/页
node cli.js comments --session <session_id> --page 2 --page-size 50
返回该会话累计采集的全部评论(主评论+子评论,分页),落库数据,会话过期后依然可查。字段含 comment_id、nickname、content、create_time、like_count、ip_location、sub_comment_count、reply_nickname。
node cli.js export --session <session_id> --out 评论导出.csv
下载该会话累计评论 CSV(BOM 头,Excel 直开不乱码),列含评论 ID、昵称、IP 属地、内容、时间、点赞数、回复对象等。含已过期会话——只要 session_id 在,随时可导出。
node cli.js finish --session <session_id>
主动结束会话、立即释放采集节点。返回 status: "finished"。
node cli.js sessions # 全部会话
node cli.js sessions --status active # 只看进行中
分页列出当前用户的历史会话(session_id、视频链接、状态、累计采集量、创建时间)。
node cli.js logout
node cli.js config set base-url http://127.0.0.1:8084
node cli.js config show # token 脱敏显示
用户:帮我采集这个抖音视频的评论 https://v.douyin.com/iAbCdEf/
v.douyin.com 短链直接可提交(节点自动还原),不需要人工转换。node cli.js quota → 未登录则引导 login --link(或注册 register --link 送 10 点数)。node cli.js start --url "https://v.douyin.com/iAbCdEf/"。comment_count(评论总数)与 estimated_pages(预估页数)报给用户:
这个视频共 156 条评论,预估 8 页主评论,每页 1 点,共约 8 点(如需展开某条评论的更多回复,每次展开额外 1 点)。是否开始采集?node cli.js step --session <sid> --page。expandable 告知「以下评论有更多回复,是否展开(每次 1 点)」;问「是否继续采下一页?」。has_more_main: false / 点数不足。node cli.js finish --session <sid> 释放节点(数据已落库)。node cli.js export --session <sid> --out <视频文案或日期>.csv → 把 CSV 路径交给用户。comments 明细直接分析,无需重新采集。| code | 含义 | agent 下一步 |
|---|---|---|
| 1001 | 参数错误(session id 不合法/step 类型不合法) | 检查 --session <32位id>、--root <cid> 参数(退出码 1) |
| 1002 / 1003 | 未登录 / token 失效 | 引导 login --link(未注册先 register --link 送 10 点数)(退出码 2) |
| LOGIN_PENDING / LOGIN_EXPIRED | 用户未完成 / 会话过期 | 提醒用户完成扫码后重试 --check,或重新 --link(退出码 2) |
| 2003 | 需要图形验证码 | 终端无法完成,统一走 --link;仍无法解决拨打客服电话 18722121663 |
| 3001 | 点数不足 | 提示用户拨打客服电话 18722121663 充值,不要重试(退出码 3) |
| 1404 | 会话不存在(含已过期/已 finish) | 重新 start 建会话(probe 免费),已采数据不丢可继续 export |
步超时 / no_new | 单步超时(最长 180s) | 该步点数已自动返还;直接重试同一步(如 step --page) |
| 风控拦截 | 页面要求滑块/验证码 | 点数已返还;稍等几分钟再试;持续拦截提示联系客服 18722121663 |
| 4290 | 触发限流 | 稍等后重试 |
| TIMEOUT | step 客户端超时(200s) | 服务端可能仍在执行;先 status 查累计量再决定是否重试本步 |
| NETWORK_ERROR | 网络/服务不可达 | 检查 config show 的 base_url(退出码 4) |
no_more 步不扣费。