bbc-skill について
bbc-skillは、Claude Code向けのBilibiliコメント収集スキルです。動画のトップレベル、返信、固定コメントを分析用データとして取得し、UP主の動画を一括収集することもできます。
主な機能
- 01動画コメントの一括取得
- 02UP主の動画をまとめて収集
- 03JSONLと統計サマリーの出力
- 04再開と再取得の制御
- 05Cookieの検証とリクエストの事前確認
活用シーン
- 01コメントの感情やキーワードの分析
- 02ファン、いいね、UP主返信の集計
- 03IP所在地や時間別の視聴者反応の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agents365-ai/ 365-skills --skill bbc-skillインストール後、Claude Code で/bbc-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agent-contract.mdapi-endpoints.mdcookie-extraction.mdbbc/__init__.py__main__.pyapi.pycli.pyenvelope.pyfetch_user.pyfetch.pyflatten.pyprogress.pyschema.pysummarize.pywbi.pybbc/cookie/__init__.pychrome_macos.pyfirefox.pynetscape.py詳細
bbc-skill — Bilibili コメントコレクター
Bilibili 動画のコメント(トップレベル+返信+固定済み)をすべてダウンロードし、Claude Code が後続の分析に利用できるデータを生成します。
更新チェック
インストールごとに24時間に1回だけチェックします。ユーザーの明示的な同意なしに、スキルディレクトリを変更してはいけません。
-
<this-skill-dir>/.last_updateが存在し、更新から24時間未満の場合は、この手順全体をスキップします。 -
それ以外の場合は、アップストリームから最新タグを取得します。
git -C <this-skill-dir> ls-remote --tags origin 'v*' 2>/dev/null \ | awk '{print $2}' | sed 's|refs/tags/||' \ | sort -V | tail -1 -
フロントマターにあるこのスキルの
metadata.versionと比較します。アップストリームのタグのほうが新しい場合(semver に基づく)、ユーザーに1行で伝え、次のように尋ねます。"このスキルの新しいバージョンが利用可能です:vX.Y.Z → vA.B.C。
git pullしますか?"同意が得られた場合は、
git -C <this-skill-dir> pull --ff-onlyを実行します。いずれの場合も.last_updateを更新し、24時間は再度確認を促さないようにします。 -
アップストリームが同じバージョンか古い場合は、
.last_updateを通知なしで更新し、処理を続けます。 -
いずれかの処理に失敗した場合(オフライン、Git チェックアウトではない場合(ClawHub 経由でインストールされたコピーなど)、読み取り専用のパス、権限がない場合)は、エラーを通知せずに無視し、ユーザーのタスクを続行します。失敗について言及してはいけません。
使用する場面
次の場合にこのスキルを使用します。
- 特定の Bilibili 動画(BV 号、URL、または動画ページ)のコメントを取得/フェッチ/ダウンロード/エクスポート/収集/分析するようユーザーから依頼された場合。
- 自分の Bilibili 動画の視聴者の反応/感情/キーワード/人気コメント/IP 分布を分析するよう依頼された場合。
https://www.bilibili.com/video/BVxxxxxxxxxx/のような Bilibili URL が提示された場合。- 自身の UP主 UID が提示され、複数の動画をまとめて分析したいと依頼された場合。
次の用途には使用しないでください:コメントの投稿/削除、動画のダウンロード、弾幕、ライブ配信データ、またはプライベートメッセージ。
前提条件
-
Python 3.9+(標準ライブラリのみ。pip のインストールは不要です)。
-
Bilibili の Cookie。ユーザーは bilibili.com にログインしている必要があります。推奨手順:
- Chrome/Edge 拡張機能 Get cookies.txt LOCALLY をインストールします(オープンソース、完全にローカルで動作し、アップロードはありません)。
- ログイン済みの bilibili.com タブで Export をクリックし、
www.bilibili.com_cookies.txtとして保存します。 --cookie-fileで渡すか、$BBC_COOKIE_FILEを設定します。
代替手段:
- SESSDATA の値のみを
$BBC_SESSDATA環境変数に設定します。 --browser autoによるブラウザーの自動検出(macOS 上の Firefox/Chrome/Edge)。Firefox で最も安定して動作します。Chrome/Edge の場合は、ログイン済みのプロファイルで Cookie がディスクに書き出されている必要があります。
認証の委任(原則7): このスキルは OAuth フローを実行しません。人間がブラウザーからログインし、エージェントはその結果得られた Cookie のみを使用します。
クイックスタート
取得する前に、Cookie が有効か確認します。
python3 -m bbc cookie-check
成功時のエンベロープ(標準出力):
{"ok":true,"data":{"mid":441831884,"uname":"探索未至之境","vip":false}}
1本の動画のコメントをすべて取得します。
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> | 1人の UP主 の動画をすべてまとめて取得 |
bbc summarize <dir> | 既存の comments.jsonl から summary.json を再構築 |
bbc cookie-check | Cookie を検証し、ログイン中のユーザーを表示 |
bbc schema [cmd] | コマンドの JSON スキーマを返す(エージェントによる検出用) |
すべてのパラメーターの詳細は bbc <cmd> --help または bbc schema <cmd> で確認してください。フラグ名を推測してはいけません。
エージェントとの取り決め
標準出力と標準エラー出力
- 標準出力:安定した JSON エンベロープ
{"ok":true,"data":...}または{"ok":false,"error":...}。標準出力が TTY でない場合、JSON がデフォルトです。人間が読みやすい表を出力するには--format tableを渡します。 - 標準エラー出力:人間向けのログ行+長時間タスク用の NDJSON 進捗イベント。
終了コード
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 1 | 実行時エラー/API エラー |
| 2 | 認証エラー(Cookie が無効/不足) |
| 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 件などの全体的なコンテキストを把握します。 - テーマ別の分析では、
Grepまたはhead/tailでcomments.jsonlを確認します。各行はフラットな 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— ブラウザーごとの Cookie 復号references/agent-contract.md— エンベロープとスキーマの完全な契約
制限事項
- API が返す
all_countには固定表示コメントが含まれます。完全性の確認:top_level + nested + pinned == declared_all_count。 - 非常に古いコメント(2 年超)は、ユーザーが削除されている場合、データが不十分なことがあります。
- ボット対策:
--maxの値が大きすぎる場合や、実行を繰り返した場合は、HTTP 412 が発生することがあります。クライアントはリクエスト間に 1 秒待機し、412 が発生するとバックオフします。