douyin-comment について
douyin-commentは、Douyinの投稿に付いたトップレベルコメントを分析するスキルです。投稿リンクまたはvideoIdからコメントをページ単位で取得し、4つの観点で要約して、インタラクティブなHTMLレポートを作成できます。
主な機能
- 01Douyin投稿コメントの取得
- 02コメントのページ別閲覧
- 034観点のコメント分析
- 04固定コメントの識別
- 05インタラクティブなHTMLレポート作成
活用シーン
- 01Douyin投稿への反応の把握
- 02投稿コメントのページ別確認
- 03コメント分析のHTMLレポート化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ redfox-data/ redfox-community --skill douyin-commentインストール後、Claude Code で/douyin-commentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.en.mdREADME.mdassets/report_template.htmlscripts/backfill_html.pydouyin_comment_search.py詳細
抖音コメント分析
📝 概要
抖音の動画リンクを入力すると、トップレベルのコメントデータを取得できます。1ページあたり20件で、ページ送りに対応しています。会話内に現在のページの全コメントとAIによる要約分析を表示すると同時に、現在のページのデータと要約を含むインタラクティブなHTMLレポートを生成します。
✨ 機能
| 機能モジュール | 機能の説明 | 主な価値 |
|---|---|---|
| コメント取得 | 動画リンクを貼り付けるだけでコメントを取得 | 動画のコメント欄の最新データを取得 |
| ページ送り | 1ページあたり20件、ページ送りに対応 | 大量のコメントをページごとに閲覧 |
| AI要約 | 4つの観点から感情を分析(肯定的/否定的/ニーズ/競合) | コメントの評判全体をすばやく把握 |
| 固定表示マーク | 固定コメントを特別に表示 | 重要なコメントをひと目で識別 |
| HTMLレポート | ダークテーマのインタラクティブレポート | 分析結果をオフラインで保存/共有 |
🔑 認証
- API Key の取得:红狐hub にアクセスしてください
- 設定方法1:
~/.openclaw/openclaw.jsonに{ "env": { "REDFOX_API_KEY": "ak_xxxx..." } }を記述します - 設定方法2:ターミナルで
export REDFOX_API_KEY="ak_xxxx..."を実行します
🔄 ワークフロー
Step 1:ユーザーの意図を理解し、videoIdを抽出する
⚠️ 重要なルール:ユーザーの入力から必ず videoId を抽出してください。
- ユーザーが videoId(数字のみ)を直接入力する場合があります
- ユーザーが動画リンク(例:
https://www.douyin.com/video/7131700643076623629)を入力する場合は、リンクから videoId を抽出します - ユーザーが動画リンクを入力していない場合は、「抖音の動画リンクを入力してください」と尋ねます
- 前のターンでユーザーが動画のデータを照会しており、今回の入力が曖昧(例:「次のページ」「コメント分析」)な場合は、前のターンの videoId を引き継ぎます
Step 2:コメント取得スクリプトを呼び出す(HTMLを自動生成)
⚠️ 呼び出し1回につきリクエストするのは1ページ分のデータのみ(APIリクエスト1回)です。複数ページを取得するために、独断で複数回呼び出してはいけません。
スクリプトは呼び出しのたびにHTMLレポートを自動生成します({{PLACEHOLDER}} のプレースホルダーを含み、分析データは未入力です)。ターミナルの表示とHTMLは同じAPI呼び出しを基にしており、データの一貫性が保たれます。
python3 ~/.agents/skills/douyin-comment-search/scripts/douyin_comment_search.py "<videoId>" [--offset <offset>]
パラメーターの説明:
| パラメーター | 説明 | デフォルト値 |
|---|---|---|
videoId | 抖音の動画ID(必須) | — |
--offset | オフセット。1ページあたり20件 | 0 |
--output-dir | HTMLの出力先ディレクトリ | ~/Downloads/QoderReports |
offset とページ番号の対応関係:
| ページ | offset |
|---|---|
| 1ページ目 | 0 |
| 2ページ目 | 20 |
| 3ページ目 | 40 |
| ... | offset = (page - 1) × 20 |
スクリプトは次のJSONを返します:
| フィールド | 説明 |
|---|---|
video_id | 動画ID |
current_page | 現在のページ番号 |
total_fetched | 今回取得したコメント数 |
has_next | 次のページがあるか(true/false) |
comments | コメント一覧 |
html_path | 生成したHTMLレポートのパス(プレースホルダーを含み、後から入力) |
各コメントのフィールド:
| フィールド | 説明 |
|---|---|
comment_id | コメントID |
content | コメント内容 |
like_count | いいね数 |
reply_count | 返信数 |
create_time | コメント日時 |
ip_location | IPの所在地 |
user_name | ユーザーのニックネーム |
user_avatar | ユーザーのアバターURL |
user_id | ユーザーID(プロフィールページのリンク生成に使用) |
user_url | ユーザーのプロフィールページへのリンク |
is_top | 固定コメントかどうか(true/false) |
注意: この時点のHTMLレポートにはコメントの生データのみが含まれます。分析用のプレースホルダー(
{{PLACEHOLDER}})は、ユーザーの確認後に入力します。
Step 3:会話内にコメントデータとAI要約を表示する
⚠️ 1回の操作につきAPI呼び出しは1回のみで、1ページ分のデータを取得します。会話内の表示とHTMLレポートは同じページのデータを基にします。
A1. 照会範囲を伝える
📊 動画「{videoId}」からコメントを N 件取得しました({page}ページ目)。詳細は以下のとおりです:
A2. コメントテーブルを表示する(現在のページの全コメントを表示)
| # | 评论人 | 评论内容 | 👍 | 💬 | 时间 | IP |
|---|--------|---------|----|----|------|-----|
| 1 | [昵称](主页链接) | 评论内容... | 1223 | 213 | 02-12 15:30 | 广东 |
| 2 | [昵称](主页链接) | 评论内容... | 856 | 45 | 02-12 14:20 | 北京 |
| ... | ... | ... | ... | ... | ... | ... |
書式ルール:
- コメント投稿者の列は
[昵称](user_url)のMarkdown形式を使用し、画像サイズを設定する必要はありません - コメント内容が40文字を超える場合は切り詰めて
...を追加します - 日時は
MM-DD HH:MMの形式に整えます - 固定コメントはニックネームの後ろに
📌マークを付けます(コメント行全体を太字にします) like_count/reply_countの数値が10000以上の場合はx.xw形式を使用します- ⚠️ 1ページの上限は20件です。会話内にはすべて表示し、省略してはいけません
A3. AIによるコメント要約(⚠️ ページ送りを含む毎回の照会で必ず出力)
現在のページで取得したすべてのコメントを基に、4つの観点から感情を分析します。分析前に抖音のミーム文化(流行語、略語、スタンプの意味、話題の背景)を理解する必要があります。
📈 コメントの要約分析({total}件のコメントに基づく)
✅ 肯定的な評価({positive_ratio}%)
- {要点1}
- {要点2}
- ...
⚠️ 否定的な評価({negative_ratio}%)
- {要点1}
- {要点2}
- ...
💡 ユーザーのニーズ({demand_ratio}%)
- {要点1}
- {要点2}
- ...
🔍 競合に関する評判({competitor_ratio}%)
- {コメントで競合に言及されている場合のみ出力し、それ以外は「競合への言及なし」と出力}
- {競合名}:{評判の要点}
分析要件:
- 各要点には、代表的なコメント(キーワード/フレーズを抜粋)を引用する必要があります
- 割合は、その種類に該当するコメント数の総コメント数に対する比率です
- 肯定的/否定的/ニーズ/競合の4分類の割合の合計は、100%を超える場合があります(1つのコメントに複数種類の情報が含まれることがあります)
- 抖音のミーム文化を必ず理解してください:流行語(例:「絶絶子」「yyds」「防御崩壊」「入典」)、スタンプの意味、略語(例:「xswl」「awsl」)、ミームの文脈上の意味を識別してください
A4. 翻页提示(⚠️ 紧接在 A3 之后,每次必须输出)
- 若
has_next为 true:
📄 当前第 {page} 页(共 {total_fetched} 条)。回复「下一页」继续查看。
- 若
has_next为 false:
📄 当前第 {page} 页,已无更多数据。
⚠️ A1~A4 必须在同一轮输出中连续完成,不可省略任何一步。
A4 输出完毕后,询问用户是否需要生成 HTML 可视化报告:
📊 是否需要生成 HTML 可视化报告?
若用户回复「是」「需要」「生成」「html」等确认词,则执行以下步骤(无需重新调用脚本,HTML 文件已在 Step 2 生成):
① 回填 AI 分析结果到 HTML
调用 backfill_html.py 将 AI 分析结果回填到 HTML 中的 {{PLACEHOLDER}} 占位符:
python3 ~/.agents/skills/douyin-comment-search/scripts/backfill_html.py "<html_path>" --analysis-json '{
"positive_ratio": <正整数>,
"negative_ratio": <正整数>,
"demand_ratio": <正整数>,
"competitor_ratio": <正整数>,
"positive_summary": "<ul><li>要点1</li><li>要点2</li>...</ul>",
"negative_summary": "<ul><li>要点1</li><li>要点2</li>...</ul>",
"demand_summary": "<ul><li>要点1</li><li>要点2</li>...</ul>",
"competitor_summary": "<ul><li>要点1</li><li>要点2</li>...</ul>"
}'
JSON 字段说明:
| 字段 | 类型 | 说明 | 示例 |
|---|---|---|---|
positive_ratio | int | 积极评价占比(纯数字,不含%) | 45 |
negative_ratio | int | 负面评价占比 | 30 |
demand_ratio | int | 用户需求占比 | 15 |
competitor_ratio | int | 竞品对比占比 | 15 |
positive_summary | string | 积极评价摘要(HTML 格式 <ul><li>...</li></ul>) | 见示例 |
negative_summary | string | 负面评价摘要 | 同上 |
demand_summary | string | 用户需求摘要 | 同上 |
competitor_summary | string | 竞品对比摘要 | 同上 |
注意: JSON 字符串参数包含双引号,Bash 中使用单引号包裹,内部双引号需转义 \"。若内容含单引号则用 stdin 方式传入:echo '...' | python3 backfill_html.py "<html_path>"
② 打开 HTML 报告:
open "<html_path>"
Step 4:翻页处理(用户回复「下一页」等时)
当用户回复「下一页」「上一页」「第 N 页」时:
- 沿用 Step 1 中提取的 videoId
- 计算新的 offset:
(page - 1) × 20 - 重新调用脚本(与 Step 2 一致,自动生成 HTML):
python3 .../douyin_comment_search.py "<videoId>" --offset <offset> - 完整执行 Step 3 的 A1~A4(每页独立展示 + AI 分析)
- A4 后询问用户是否需要生成当前页 HTML(同 Step 3 末尾流程,无需重新调用脚本)
翻页规则:
has_next为 true → 当前页正好 20 条,存在下一页has_next为 false → 当前页不足 20 条,已是最后一页
Step 5:错误处理
| 错误类型 | 处理方式 |
|---|---|
| 无 API Key | 提示配置 REDFOX_API_KEY,给出配置指引 |
| 作品链接无效 | 提示「未找到该作品的评论,请检查作品链接是否正确」 |
| 接口返回错误 | 显示错误码和错误信息 |
| 获取 0 条评论 | 提示「该作品暂无评论」并建议检查作品是否存在或已删除 |
| 网络请求超时 | 提示「网络请求超时,请稍后重试」 |
📋 依赖
# 脚本使用 urllib(Python 标准库),无需额外安装依赖
🎯 使用示例
示例 1:查看指定作品的评论
用户:查看抖音作品 7131700643076623629 的评论
助手:调用脚本(自动生成HTML) → 展示全部20条 + AI总结 → 询问是否需要HTML → 用户确认 → backfill → open
示例 2:通过链接查询
用户:https://www.douyin.com/video/7131700643076623629 这篇的评论怎么样
助手:提取 videoId → 调用脚本 → 展示分析 → 询问是否需要HTML
示例 3:翻页
用户:下一页
助手:调用脚本 offset=20 → 展示第2页 + AI分析 → 询问是否需要当前页HTML