Community研究&データ分析github.com

9398-haha/douyin-benchmark

抖音对标分析ツール · 抖音アカウントを入力すると、公開作品データを全量収集し、対抗調査レポート(生データ + Markdown + 薄色雑誌風HTML)を生成します。Agentフレンドリーなスキル。

douyin-benchmark とは?

このスキルは、指定された抖音(Douyin)アカウントの公開作品データを全量収集し、調査レポート(MarkdownおよびHTML形式)を自動生成するためのものです。Agentが`report_data.json`を基に、データの取得状況を考慮したエビデンスに基づくMarkdownレポートを作成します。また、ブラウザの自動操作を利用してデータを収集するため、ログイン状態の管理やCAPTCHAの回避など、適切なエチケットに従った実装が求められます。対応プラットフォームは抖音(Douyin)で、Node.jsとPlaywrightを使用します。

対応~Claude Code~Codex CLI~Cursor
npx skills add 9398-haha/douyin-benchmark

Installed? Explore more 研究&データ分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

拆抖音对标

公開アカウントの収集、データ集約、HTMLレンダリングをスクリプトに任せ、Agentはreport_data.jsonに基づいてエビデンスの境界を明確にしたMarkdownレポートを作成します。

遵守すべき境界

  • ウェブ上で公開されているデータのみを収集します。署名のクラック、CAPTCHAの回避、アクセス制御の迂回は行いません。
  • 専用のログイン状態は~/.douyin-benchmark/chrome-profileのみを使用します。ユーザーの日常的なChromeユーザーディレクトリを読み取ったり、コピーしたり、直接参照したり、Cookieの値を出力したりしないでください。
  • 欠損値はそのまま欠損として扱い、0に書き換えません。いいねは公開ホットネスの代理指標としてのみ扱い、再生数、エンゲージメント率、フォロワー増加率などとは見なしません。
  • 通常のログインフォーム、実際のセキュリティ認証、ページのサービス異常はそれぞれ個別に判断します。セキュリティ認証、ページのサービス異常、空の応答によるソフトブロックが発生した場合は停止します。ループリトライ、自動IP変更、自動遅延タスク作成、後で完了するという約束は行いません。

初回準備

このスキルのディレクトリで以下を実行します:

npm ci
node scripts/login.js

login.jsは専用ブラウザを開き、実際のアカウントエントリに認証された後、自動的に保存して閉じます。既存のログイン状態を確認するにはnode scripts/login.js --checkを実行します。

ワンクリック実行

ユーザーには、抖音アプリの「プロフィール共有」ショートリンクを提供することを優先してください。数字の抖音IDはsec_uidではありません。/user/<数字>を直接構築すると、通知なくフィードに戻る可能性があります。

OUT="$HOME/douyin-benchmark-output/<アカウント識別子>"
node scripts/run_benchmark.js "<プロフィール共有リンク/sec_uid/抖音ID/ニックネーム>" "$OUT" \
  --expected-id "<抖音ID、省略可>"

デフォルトではヘッド付きChromeを使用し、可観測性を高め、実際のブラウザUAと一致させます。ヘッドレス環境でのみ明示的に--headlessを追加します。スクリプトは順に以下を実行します:

  1. ショートリンクまたはsec_uidを解決します。ニックネーム/抖音IDの場合のみサイト内検索を使用します。
  2. プロフィール、作品、コレクションを収集し、account_full_raw.jsonに書き込みます。
  3. 作品がある場合、report_data.jsonと调研报告.htmlを生成します。
  4. 全工程でrun_status.jsonを更新し、失敗後も分析を継続しません。

ステータスを読み、結論を書く

run_status.jsonとaccount_full_raw.json.captureを読み取ります:

  • complete:APIがhas_more=0を返しました。アカウントレベルのレポートを作成できます。それでもプロフィールの作品数と収集数の差異を確認します。
  • partial:「収集サンプルレポート」のみを作成します。タイトル付近にサンプル数、プロフィールの総作品数、カバレッジを明示します。「全量」「アカウント最高」などの表現は使用しません。
  • blocked_empty_body:作品APIがHTTP 200だが空のボディ。リクエストを停止し、プロフィールスナップショットと診断情報のみを提供します。再試行はユーザーが判断し、最大1回のみです。
  • challenge:ユーザーに専用ブラウザで認証を完了させてから再試行します。回避は試みません。
  • login_required:ページは通常のログインフォームであり、セキュリティ認証ではありません。ログインスクリプトを実行し、成功後1回のみ再試行します。
  • page_service_error:作品エリアに「サービス異常、再読み込みしてデータを取得してください」と明示的に表示されます。更新を停止します。ログイン状態を確認後、最大1回再試行します。
  • no_post_response:入力ミス、ページ/APIの変更が考えられます。まずsec_uidとヘッド付きページを確認し、むやみにスクロール回数を増やさないでください。
  • endpoint_error:作品APIがHTTP/APIエラーまたは非JSONコンテンツを返しました。診断情報を保持し分析を停止し、まずページ/APIの変更を確認します。

Markdownの作成

report_data.jsonが存在し、分析可能な作品が含まれている場合のみ、references/report-template.mdを完全に読み取り、9セクション構造に従って$OUT/调研报告.mdに書き込みます。

内容を3つのカテゴリに分類し、明確に表現します:

  • 事実:JSON内の公開フィールドと計算結果。
  • 観察:タイトル、紹介文、コレクション名、カバー、または実際に開いた動画の表示内容。
  • 推測:ペルソナ、収益化パス、コンテンツフォーミュラ。エビデンスと確信度を記載し、事実として扱いません。

コメント本文がない場合は「ホットコメントの感情」を書かず、動画を視聴していない場合はカメラワーク、ナレーション、演技、演出の詳細を主張しません。ユーザーが自身のジャンルを指定した場合のみ、再現可能なリストを定向的に移行します。

検収

  • account_full_raw.json、run_status.json、report_data.json、调研报告.html、调研报告.mdの状態が一致していること。
  • HTMLとMarkdownの両方に実際の収集サンプル数、プロフィールの作品数、カバレッジ、capture_statusが表示されていること。
  • ブロック時はcapture.diagnostics.pageを確認します。タイトル、パス、ログイン/チャレンジ/サービス異常のブール値シグナル、動画リンク数のみ記録し、本文やCookieは保存しません。
  • 数値はreport_data.jsonと1つずつ照合します。欠損値は—/不明を表示します。
  • HTMLはオフラインで開くことができ、外部テキストはエスケープされています。カバー画像の失敗は本文に影響を与えません。
  • HTMLにページ全体の横方向オーバーフローが発生しないこと。最新作品のタイトルが読めること。公開頻度は直近12ヶ月を公開作品数で表示し、完全収集の場合のみ欠損月を0で補完します。
  • Markdownの9セクションが全て揃っており、データの範囲、エビデンスの境界、再現可能なリスト、そのまま模倣できない項目が含まれていること。

設定

  • DOUYIN_PROFILE_DIR:専用ログイン状態ディレクトリ。デフォルトは~/.douyin-benchmark/chrome-profile。
  • DOUYIN_BROWSER_CHANNEL:デフォルトはchrome。chromiumを設定する場合、先にPlaywright Chromiumをインストールします。
  • DOUYIN_HEADLESS=true:明示的にヘッドレスモードを有効にします。デフォルトはヘッド付き。
  • DOUYIN_SCROLL_WAIT_MS:スクロール間隔の下限。デフォルトは1600ms。これを高頻度収集に使用しないでください。

関連スキル