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

Agents365-ai/bbc-skill

Bilibili動画のコメントを取得するエージェントネイティブCLIです(UP主の自己分析用)。依存関係ゼロ。Claude Code / Codex / OpenClawに対応。

bbc-skill とは?

bbc-skill は、Bilibili(ビリビリ)動画の全コメント(トップレベル、ネスト、ピン留め)をダウンロードし、AIエージェント(Claude Code、Codex、OpenClaw)が後続の分析に利用できるデータを生成するスキルです。Python 3.9+ の標準ライブラリのみで動作し、追加の pip インストールは不要です。Bilibili のクッキーを利用して認証を行い、`bbc fetch` や `bbc fetch-user` などのコマンドでコメント収集を実行します。出力は JSON Lines 形式とサマリー JSON で、エージェントはそれを読み取って感情分析、人気ファンの特定、地理的分布の確認など、さまざまな分析ワークフローを実行できます。このスキルは読み取り専用であり、コメントの投稿・削除や動画のダウンロードは行いません。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add Agents365-ai/bbc-skill

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

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

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

ドキュメント

bbc-skill — Bilibili コメントコレクター

Bilibili 動画の全コメント(トップレベル + ネスト + ピン留め)をダウンロードし、 Claude Code が後続分析できるデータを生成します。

自動更新

1 日 1 回、このスキルを自動的に更新します。 <スキルディレクトリ>/.last_update のタイムスタンプを確認してください。 ファイルがない、または 24 時間以上経過している場合は、以下を実行します。

git -C <スキルディレクトリ> pull --ff-only && date +%s > <スキルディレクトリ>/.last_update

プルに失敗した場合(オフライン、競合、git チェックアウトでない等)は、 エラーを無視して通常どおり続行します。ユーザーから尋ねられない限り、 更新について言及しないでください。

使用タイミング

ユーザーが以下のことを依頼した場合にこのスキルを起動します。

  • 特定の Bilibili 動画(BV 番号、URL、動画ページ)のコメントを 取得 / 取得 / ダウンロード / エクスポート / 収集 / 分析 するよう依頼
  • 自分の Bilibili 動画の 視聴者フィードバック / センチメント / キーワード / トップコメント / IP 分布 を分析するよう依頼
  • https://www.bilibili.com/video/BVxxxxxxxxxx/ のような Bilibili URL を提供
  • UP 主の UID を挙げて、全動画を一括分析したいと依頼

以下の用途では 使用しない でください:コメントの投稿/削除、動画のダウンロード、弾幕(弹幕)、ライブストリームデータ、プライベートメッセージ。

前提条件

  1. Python 3.9+(標準ライブラリのみ — pip インストール不要)。

  2. Bilibili クッキー。ユーザーは bilibili.com にログインしている必要があります。 推奨パス:

    • Chrome/Edge 拡張機能 Get cookies.txt LOCALLY (オープンソース、完全ローカル、アップロードなし)をインストールします。
    • ログイン済みの bilibili.com タブで、エクスポート をクリック → www.bilibili.com_cookies.txt を保存します。
    • --cookie-file で渡すか、$BBC_COOKIE_FILE 環境変数を設定します。

    代替:

    • $BBC_SESSDATA 環境変数に SESSDATA の値のみを設定。
    • --browser auto によるブラウザ自動検出(macOS 上の Firefox / Chrome / Edge)。 Firefox で最適に動作。Chrome/Edge では、クッキーがディスクにフラッシュされたログインプロファイルが必要です。

認証委任(原則 7): スキルは OAuth フローを実行しません。 人間がブラウザ経由でログインすることが期待され、エージェントは結果のクッキーのみを消費します。

クイックスタート

取得前に、クッキーが機能することを確認します。

python3 -m bbc cookie-check

成功エンベロープ(stdout):

{"ok":true,"data":{"mid":441831884,"uname":"探索未至之境","vip":false}}

単一動画の全コメントを取得:

python3 -m bbc fetch BV1NjA7zjEAU

または URL を渡す:

python3 -m bbc fetch "https://www.bilibili.com/video/BV1NjA7zjEAU/"

出力(デフォルト ./bilibili-comments/<BV>/):

  • comments.jsonl — 1 行 1 コメント、フラット化済み
  • summary.json — 動画メタデータ + 統計 + トップ N
  • raw/ — アーカイブされた API レスポンス
  • .bbc-state.json — 再開状態

コマンド

コマンド目的
bbc fetch <BV|URL>1 動画の全コメントを取得
bbc fetch-user <UID>UP 主の全動画を一括取得
bbc summarize <dir>既存の comments.jsonl から summary.json を再構築
bbc cookie-checkクッキーを検証し、ログインユーザーを表示
bbc schema [cmd]コマンドの JSON スキーマを返す(エージェント探索用)

詳細なパラメータは bbc <cmd> --help または bbc schema <cmd> を呼び出してください — フラグ名を推測しないでください。

エージェント契約

stdout と stderr

  • stdout: 安定した JSON エンベロープ {"ok":true,"data":...} または {"ok":false,"error":...}。stdout が TTY でない場合、JSON がデフォルトです。 人間が読めるテーブルとして --format table を渡します。
  • stderr: 人間向けログ行 + 長時間タスク用の NDJSON 進行イベント。

終了コード

コード意味
0成功
1ランタイム / API エラー
2認証エラー(クッキー無効 / なし)
3バリデーションエラー(不正な BV 番号、不正なフラグ)
4ネットワークエラー(タイムアウト / リトライ上限)

エラーエンベロープ

{
  "ok": false,
  "error": {
    "code": "auth_expired",
    "message": "SESSDATA 已过期,请重新登录 B 站",
    "retryable": true,
    "retry_after_auth": true
  }
}

エラーコード: validation_error、auth_required、auth_expired、not_found、 rate_limited、api_error、network_error。完全な契約については bbc schema を参照してください。

ドライラン

すべての fetch コマンドは --dry-run をサポートしており、ネットワーク呼び出しを行わずに 計画されたリクエストをプレビューします:

python3 -m bbc fetch BV1NjA7zjEAU --dry-run

べき等性

同じ出力ディレクトリに対して同じ fetch コマンドを再実行すると、 .bbc-state.json から再開します(既に取得済みのページはスキップ)。 再取得するには --force を渡します。

分析ワークフロー(エージェント向け)

fetch 完了後:

  1. まず summary.json を読み取ります(10 KB 未満)— 動画メタデータ、総数、 時間分布、トップ N など、グローバルなコンテキストを把握します。
  2. テーマ分析 には、comments.jsonl に対して Grep または head/tail を実行します — 各行はフラットな JSON オブジェクトであり、小さくない限りファイル全体をロードしないでください。
  3. 一般的な分析:
    • センチメント分布 → バッチで message をスキャン
    • トップファン → mid でグループ化、エントリ数をカウント、like を集計
    • UP 主のインタラクション → is_up_reply=true でフィルタ
    • 視聴者の地理 → ip_location のヒストグラム
    • フィードバックのタイムライン → ctime_iso を日/週でバケット化

summary.json のスキーマは references/agent-contract.md に文書化されています。 実際のサンプルをローカルで生成するには、任意の動画に対してスキルを実行します。

セーフティティア

すべてのコマンドは 読み取り専用(ティア: open)です。変更、削除、メッセージ送信はありません。 すべての fetch コマンドでドライランが利用可能です。

参考資料

  • references/api-endpoints.md — 使用されている Bilibili API フィールド
  • references/cookie-extraction.md — ブラウザごとのクッキー復号化
  • references/agent-contract.md — 完全なエンベロープ + スキーマ契約

制限事項

  • API が返す all_count にはピン留めコメントが含まれます。 完全性チェック: top_level + nested + pinned == declared_all_count
  • 非常に古いコメント(2 年以上)は、ユーザーが削除されている場合、データが薄い可能性があります。
  • アンチボット: 過剰な --max 値や繰り返し実行により、HTTP 412 が発生する可能性があります。 クライアントはリクエスト間で 1 秒スリープし、412 でバックオフします。

関連スキル