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 を挙げて、全動画を一括分析したいと依頼
以下の用途では 使用しない でください:コメントの投稿/削除、動画のダウンロード、弾幕(弹幕)、ライブストリームデータ、プライベートメッセージ。
前提条件
-
Python 3.9+(標準ライブラリのみ — pip インストール不要)。
-
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— 動画メタデータ + 統計 + トップ Nraw/— アーカイブされた 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 完了後:
- まず
summary.jsonを読み取ります(10 KB 未満)— 動画メタデータ、総数、 時間分布、トップ N など、グローバルなコンテキストを把握します。 - テーマ分析 には、
comments.jsonlに対してGrepまたはhead/tailを実行します — 各行はフラットな JSON オブジェクトであり、小さくない限りファイル全体をロードしないでください。 - 一般的な分析:
- センチメント分布 → バッチで
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 でバックオフします。