bilibili-source について
bilibili-sourceは、Bilibili動画のメタデータ、最新統計、弾幕、ログイン後の字幕を取得するスキルです。取得データに基づく分析を支援し、アクセス診断で取得状況と利用権限を区別します。
主な機能
- 01動画メタデータと最新統計の取得
- 02BVID、av番号、リンクの解決
- 03動画のパート別弾幕取得
- 04認証ログインによる字幕取得
- 05アクセス権とメディア利用権の診断
- 06選択したAPI動作の確認
活用シーン
- 01動画分析で最新の反応数を引用
- 02弾幕による視聴者反応の分析
- 03認証済み字幕トラックの取得
- 04メディア取得やASR前のアクセス確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ daymade/ claude-code-skills --skill bilibili-sourceインストール後、Claude Code で/bilibili-sourceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/evals.jsonreferences/bilibili_api.mdscripts/bili-access.pybili-danmaku.shbili-fetch.shbili-selftest.shbili-subs.shtests/test_access.py詳細
bilibili-source
Bilibili 動画の実際の検証可能なデータを取得し、推測ではなく出典として引用できるようにします。エンゲージメント数値は、誠実な「なぜこれがうまくいったのか」という分析の要です。手入力や推定による数値は、ナレッジベースを劣化させる最短の道です。このスキルを使えば数値を簡単に取得できるため、捏造する理由はありません。
クイックスタート
scripts/bili-fetch.sh BV1xxxxxxxxx
1 回の view/detail API 呼び出しで取得したすべての情報を、1 つの JSON オブジェクトとして返します。
{
"bvid": "BV1xxxxxxxxx",
"aid": 1234567890,
"fetched_at": "2026-06-07T13:54:17Z",
"url": "https://www.bilibili.com/video/BV1xxxxxxxxx",
"title": "<video title>",
"up": { "name": "<UP name>", "mid": 12345678, "fans": 45600 },
"pubdate": "2026-01-10T00:50:47Z",
"tname": "<partition, may be empty>",
"tags": ["<tag>", "<tag>"],
"videos": 1,
"duration_s": 372,
"stat": { "view": 48000, "like": 1200, "coin": 180, "favorite": 950,
"share": 64, "reply": 210, "danmaku": 130 },
"pages": [ { "cid": 12345678, "page": 1, "part": "<part title>", "duration": 372 } ]
}
bili-fetch.sh は、ユーザーが貼り付ける可能性のあるあらゆる形式(BVID、av 番号、b23.tv 短縮リンク、または完全な URL)を受け付けて正規化します。複数パートの動画では、各パートの cid を pages[] に返します(そのパートの弾幕や字幕を取得するには、パートごとの cid が必要です)。
スクリプト
| スクリプト | 機能 | ログイン |
|---|---|---|
scripts/bili-fetch.sh <ref> | 基本機能:メタデータ全件とリアルタイム統計(最初に実行) | 不要 |
scripts/bili-danmaku.sh <ref> [P] | パートの弾幕(画面上に流れるコメント)の全文 | 不要 |
scripts/bili-subs.sh <ref> [browser] | 字幕/文字起こしトラック | 必要 |
scripts/bili-selftest.sh | 匿名でのメタデータ、弾幕、および選択した API 形式をテスト | 不要 |
scripts/bili-access.py | ID、利用権限、字幕形式、パートごとのメディアを診断;再生/プローブ/レポート検証 | Cookie ファイルの明示的な指定のみ |
シェルの取得スクリプトは実行してください(参考資料として読み込まないでください)。bili-danmaku.sh はパートの cid を解決するために bili-fetch.sh を再利用するため、scripts/ 内で同じ階層に置く必要があります。
弾幕は、動画上に重ねて表示される時間同期コメントです。Bilibili 固有の「視聴者がいつ、どのように反応したか」を示すシグナルであり、単純な返信数よりも定性的に豊富な情報を得られます。
scripts/bili-danmaku.sh BV1xxxxxxxxx # P1; add a part number for multi-part videos
データの信頼性を保つためのルール
- リアルタイム指標には、必ず
fetched_atを引用してください。 同じ動画でも数分後に再取得すると数値が変動します(1 回のセッション中に視聴回数が数回増えることがあります)。これはエラーではなく、データがリアルタイムである証拠です。タイムスタンプのない単なる「視聴回数 12,000 回」は意味がなく、いつの間にか古くなります。 - 捏造禁止。 数値を取得できない場合は、「未取得/未検証」と記載してください。決して推定してはいけません。このスキルの目的は、数値を簡単に取得できるようにすることです。
- ネットワーク特有の問題にはスクリプトが対処済みです。 同じ処理を一から実装する必要はありません。ローカルプロキシを除外します(Bilibili は中国国内向けのサービスで、
127.0.0.1プロキシがあると通信が失敗します)。ブラウザーの User-Agent と Referer を送信します(まれに発生する HTTP 412 を回避します)。さらに、バックオフ付きで再試行します。API を手動で呼び出す場合も、同じ対応をしてください。references/bilibili_api.md を参照してください。なお、環境変数の除外だけでは対処できない落とし穴があります。プロキシ環境変数がない場合、Python のurllibは macOS のシステムプロキシにフォールバックし、バッチ処理で断続的に 503 エラーを起こします。明示的なProxyHandler({})を使って opener を構築してください(詳細はリファレンスの「Request basics」を参照)。 - CJK の後処理に関する落とし穴。 取得した中国語のテキストやファイル名を後で grep/sort すると、
sort/commが CJK の照合順序を正しく処理できず、「見つからない」「壊れている」といった誤った結果を報告することがあります。commではなく、find -nameまたはgrep -Fで確認してください。
字幕の取得にはログインが必要です(回避不可)
統計と弾幕はログイン不要ですが、字幕はログインが必要です。 新旧さまざまな動画と匿名 Cookie で検証した結果、公開プレーヤー API は匿名リクエストに対して空の字幕リストを返し、yt-dlp は 「字幕を利用できるのはログイン中のみです」 と報告します。ログインなしで取得する方法はありません。 回避を試みないでください。
そのため、bili-subs.sh の実行には、ブラウザー Cookie を通じたユーザーの Bilibili セッションが必要です。ログイン中のセッションを読み取るため、実行前にユーザーに確認してください。
scripts/bili-subs.sh BV1xxxxxxxxx chrome # or firefox / safari / edge
ai-zh トラックは Bilibili が生成した AI 字幕です。下書きの文字起こしとして扱い(同音語や分割の誤りがあります)、生成物では AI-ASR と明記し、人間が確認した逐語記録だと主張しないでください。動画に字幕トラックがない場合、取得できるものはありません。字幕を捏造しないでください。SESSDATA 環境変数を使う API の代替手段は、リファレンスに記載されています。
ダウンロードまたは ASR の前にアクセスを診断する
認可されたソースに対して scripts/bili-access.py probe --bvid BV0000000000 --page 1 を実行します。アカウントでのアクセスが認可されている場合に限り、--cookie-file <authorized-netscape-jar> を追加してください。この診断で任意のブラウザー Cookie を読み取らないでください。view メタデータから選択した P を解決するには、--cid を省略します。既存の証拠を診断する場合は、取得済みの nav/view/player/playurl/ffprobe JSON をオフラインで再生します。
ダウンロードする前に download_allowed を確認し、verify-report が実際の ASR 入力に対する最新の ffprobe を読み取った後にのみ asr_allowed を確認します。認証済みの身元と、対象動画の支払い資格は別々に扱ってください。ログイン済みの会員であっても、すべてのクリエイターの有料動画を視聴できるわけではありません。有料プレビュー、拒否された資格、または不明な資格の場合は停止してください。プレビューを全編コンテンツ用の ASR に送信しないでください。再生時間は、複数パート全体の時間ではなく、選択した CID/P と比較します。JSON の状態、コマンド、終了コードについてはアクセス診断の仕様を参照してください。再現可能な合成テストを実行するには、リポジトリのルートで uv run python -m unittest discover -s bilibili-source/tests -v を実行します。
失敗の原因を特定する前に、各 interfaces エントリの http と省略可能な error を確認してください。HTTP 403/412 レスポンスはステータスを保持しており、ネットワーク障害や Cookie の期限切れを意味するものではありません。ネットワークエラー、タイムアウト、無効な JSON はそれぞれ別のカテゴリです。これらの診断によって支払いの権利が確立されるわけではありません。
さらに詳しく
エンドポイントの全カタログ(UP の履歴、動画タグ、リアルタイム視聴者数、弾幕アーカイブ、SESSDATA を使った字幕取得経路、お気に入りフォルダーの列挙 — x/v3/fav/*。ログイン必須で、WBI は不要)、space/wbi/* エンドポイントに必要な WBI リクエスト署名アルゴリズム、およびテスト済みコマンド付きの注意事項は、references/bilibili_api.md を参照してください。
検証済みの状況
- 統計情報/メタデータ/弾幕(
view/detail、relation/stat、dm/list.so、online/total):2026-06-07 にログイン不要であることを確認済み。指標を繰り返し再取得し、独立に照合して一致しました。弾幕数はstat.danmakuと一致しました。 - 字幕:2026-06-07 にログイン必須であることを確認済み(テスト対象のすべての動画で匿名アクセス時は空でした)。Cookie を使った経路には
yt-dlpが必要です。SESSDATA/Cookie jar を使った API 経路は、約 400 本の動画を対象としたバッチ(複数パートを含む)で、2026-08-29 にログイン済みで検証しました。 - お気に入り(
x/v3/fav/folder/created/list-all、x/v3/fav/resource/list):2026-08-29 にログイン済みで検証済み。WBI を使わない通常のパラメーターで取得できました。連続 26 ページをレート制限なしで取得しました。列挙にはログインが必要です(匿名での list-all は、公開閲覧可能なフォルダーを持つアカウントであっても、コード 0 と空のリストを返します)。公開フォルダーの内容を匿名で読み取れるのは、media_id をすでに知っている場合に限られます。
メンテナンス
このスキルは、時間の経過とともに仕様が変化するサードパーティ API をラップしています。フィールド名の変更、エンドポイントへの WBI 署名の追加、ボット対策の強化などが起こります。しばらく利用していなかった後に信頼して使う場合や、出力に誤りがあるように見える場合は、ヘルスチェックを実行してください。
scripts/bili-selftest.sh
公開フィクスチャに対して匿名のメタデータ、弾幕、選択したエンドポイントの形式をテストし、PASS/FAIL の行を出力します。認証済みの取得、対象動画の支払い権利、メディアの完全性はテストしません。テストに合格しても、出力されたチェック項目のみが対象であり、誤った結果が黙って返されていないことまでは保証しません。行が失敗した場合、修正に必要なエンドポイントのパス、フィールド名、WBI 署名については references/bilibili_api.md を参照してください。再確認したら、上記の「検証済み」の日付を更新してください。