ドキュメント&知識ベース · daymade/claude-code-skills

bilibili-source

任意のBilibili(B站)動画の包括的なログイン不要データ(タイトル、UP主名とフォロワー数、投稿日、パーティション、タグ、パートごとのcid、リアルタイム統計[再生数、いいね、コイン、お気に入り、共有、返信、弾幕]、および弾幕[コメント]全文)を取得します。Bilibili動画を扱い、引用可能な実数値やメタデータが必要なあらゆる場面(ナレッジベースへのBilibiliソースの取り込み、動画のヒット要因の分析、クリエイターが公表する数値の検証、ケーススタディの作成、ドキュメントにBilibiliの再生数/いいね/お気に入り数を書き込もうとする際など)でこのスキルを使用してください。手入力や推測は行わず、必ずフェッチしてください。BVID、av番号、b23.tv短縮リンク、または完全なURLを受け付けます。字幕やお気に入りフォルダ(收藏夹)の一覧取得にも対応していますが、ユーザーのBilibiliログインが必要です。

L5 厳格管理 · 隔離環境と厳格な監査V2 人間監査済認証情報/セッションコマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author daymadeGitHub daymade/claude-code-skills ↗Stars 1385License MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)Commit d5c4678cb5
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

中核となるのは、「1回の view/detail API 呼び出し + jq による整形」を単一の JSON にカプセル化している点です。入力をまず bvid/aid クエリパラメータに正規化し、api.bilibili.com から取得して title/up/tags/stat/pages にマッピングします。

bilibili-source/scripts/bili-fetch.sh
json=$(bili_curl "https://api.bilibili.com/x/web-interface/view/detail?$q")
処理内容:fetch スクリプトは curl+jq のみに依存しログイン不要です。jq 側で $d.View/$d.Card.card.fans/$d.Tags を {bvid, aid, fetched_at, up:{name,mid,fans}, stat:{view,like,...}, pages:[{cid,...}]} に整形し、複数パート(P)動画の場合は完全な pages[](各Pの cid は後続の弾幕/字幕取得のキー)を出力します。

ネットワーク耐性のカプセル化:リクエスト時にローカルプロキシ環境変数を削除し(Bilibili は中国本土のサービスであり、ローカルのフォワードプロキシによってリクエストが失敗するため)、ブラウザ UA + Referer を付与して散発的な HTTP 412 を回避し、失敗時のリトライ・バックオフを備えています。

bilibili-source/scripts/bili-fetch.sh
curl -fsSL --max-time 20 --retry 3 --retry-delay 1 --retry-all-errors -H "User-Agent: $UA" -H "Referer: https://www.bilibili.com"
bili_curl/np_curl は4つのスクリプト(fetch/danmaku/selftest/subs)で共通利用され、どの呼び出しパスでも同一の環境変数削除とヘッダー適用を保証します。さらに bili-selftest は API 形状の不変条件をアサートし、仕様変更(ドリフト)が発生した場合は無言で誤った答えを返すのではなく FAIL 行として検出します。

弾幕スクリプトは fetch を再利用して該当パートの cid を解決し、dm/list.so をリクエストした上で raw-DEFLATE 解凍を行い、各 <d> のテキストを抽出します。

bilibili-source/scripts/bili-danmaku.sh
xml=$(bili_curl "https://api.bilibili.com/x/v1/dm/list.so?oid=$cid" | python3 -c "import sys,zlib; sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read(), -15))")
コメントには「list.so is headerless raw DEFLATE (zlib window bits -15), not gzip.」と明記されており、これは実機検証で直面したフォーマットの落とし穴です。解凍後は grep -oE '<d [^>]*>[^<]*</d>' で各弾幕テキストを抽出し、1行に1件ずつ出力するとともに stderr にカウントを表示します。

字幕トラックはログイン状態を強制:スクリプトは yt-dlp を使用してユーザーのブラウザ Cookie を読み込み、ai-zh などの字幕トラックを取得します。スキルには「免ログインのパスは存在しないため、バイパスを試みないこと」と明記され、事前にユーザーへ確認することを義務付けています。

bilibili-source/scripts/bili-subs.sh
yt-dlp --skip-download --write-subs --sub-langs "ai-zh,zh-Hans,zh-CN,zh" --user-agent "$UA" --add-header "Referer:https://www.bilibili.com" --cookies-from-browser "$browser"
SKILL.md 内の厳格な規約:「Subtitles require login (no bypass)…There is **no login-free path** — do not try to bypass it.」および「Because it reads the user's logged-in session, **ask the user before running it**」。また ai-zh トラックは人間が校閲した文字起こしではなく、AI-ASR のドラフトとしてフラグ付けされます。

ワークフローに組み込まれたデータ誠実性規約:指標には必ず fetched_at タイムスタンプを付与し、取得できない場合は推測値ではなく「未取得/未確認」と記載することで、ナレッジベースが手入力の数字で汚染されるのを防ぎます。

bilibili-source/SKILL.md
**Live metrics → always cite `fetched_at`.** … A bare "12,000 views" with no timestamp is meaningless and silently goes stale.
fetch スクリプトが出力する JSON は標準で fetched_at(date -u による ISO 時間)を保持し、「引用は追跡可能でなければならない」という方針を口頭の注意からデータ構造の仕様へと落とし込んでいます。NO FABRICATION ルール(「If a number can't be fetched, write "未获取/未核实" — never estimate.」)と連動しています。

サードパーティ API の仕様変更(ドリフト)に対するヘルスチェック:bili-selftest.sh は固定の公開フィクスチャを用いて各機能とログインゲートの不変条件を順次アサートし、ドリフトを PASS/FAIL 行で可視化します。

bilibili-source/scripts/bili-selftest.sh
It asserts SHAPE (fields exist, right types) and documented INVARIANTS — never exact values, since engagement numbers drift by design.
検証対象:av→BVID 正規化、stat.view の数値、up.fans のパス、pages の完全性、完全な URL の正規化、list.so の解凍、匿名での字幕リストが空であること(ログインゲート不変条件)、匿名でのお気に入り一覧が空であること。ドキュメントでは API ドリフト発生時に「Verified」の日付を更新することを求めています。

2コア機能

011回の呼び出しで全メタデータとリアルタイムインタラクション数を取得(タイトル / UP主情報+フォロワー数 / パーティション / タグ / 複数Pのcid / stat 全フィールド)
02ログイン不要での弾幕全文取得(タイムラインに沿った視聴者反応シグナル)
03任意の貼り付け形式の正規化(BVID / av 番号 / b23.tv 短縮リンク / 完全な URL)
04ログイン状態での字幕/文字起こしトラックのダウンロード(ai-zh/zh-Hans/zh-CN/zh、実行前にユーザーへの確認必須)
05真実性と引用可能性の規律:fetched_at の必須付与 + 取得不能時は「未取得/未確認」と明記
06live API セルフテスト(PASS/FAIL 行でドリフトを可視化、ログインゲート不変条件のアサーションを含む)
07詳細なエンドポイントリファレンス:UP主フォロワー推移履歴、リアルタイム視聴者数、お気に入り一覧、WBI 署名アルゴリズム(references/bilibili_api.md)

3外部依存関係

KindDependency / Endpoint
clicurl
clijq
clipython3
cliyt-dlp
networkapi.bilibili.com
networkb23.tv(短链展开,单跳 302)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
隔離環境で実行、都度明示的な認可
管理者向け
厳格な認可、全量監査、コンプライアンス確認
判定根拠(ファイルパスと抜粋)
  • 本地凭据 / 浏览器配置: ユーザーのログイン Cookie/セッション/キーチェーンの読み取り: bili-subs.sh が yt-dlp --cookies-from-browser "$browser"(chrome/firefox/safa
  • scripts/: ローカルスクリプトまたはコマンドの実行: bilibili-source/scripts/bili-fetch.sh
  • 网络端点: 外部ネットワークアクセスの宣言: https://api.bilibili.com/x/web-interface/view/detail(fetch)
  • 本地工作目录: ファイルの読み書きと成果物の出力: bili-subs.sh が字幕ファイルをカレントディレクトリに出力:<id>.<lang>.<ext>(json3/srt)
監査ノート: 標準基準に基づく分類:bili-subs.sh は yt-dlp --cookies-from-browser を介してローカルブラウザのログイン Cookie にアクセスします(Cookie へのアクセスは「オレンジ」に分類され、スキル自体も実行前確認を明記しています)。コア機能である fetch/danmaku/selftest はログイン不要の標準的な公開 API 呼び出し(単体では「イエロー」)であり、selftest は api.bilibili.com の2つのエンドポイントに対して読み取り専用のプローブを行います。送信先は Bilibili 公式サイトであり、予測可能な範囲内です。オレンジ評価の主な要因は、Cookie 読み取りの対象範囲およびサードパーティ製 yt-dlp とその更新に伴うリスクであり、次いで b23.tv や完全な URL 入力を展開する際の軽微な SSRF リスク(読み取り専用の HEAD/Location)によるものです。

5二重目の独立検証

  • [ok] fetch/danmaku 免登录(无凭证接触) — grep 复核三脚本无 Cookie/Authorization/SESSDATA 使用;bili_curl 只带 UA+Referer。
  • [ok] bili-subs.sh 读浏览器 cookie 且有 ask-first — --cookies-from-browser 实参存在;脚本头『Because it reads the user's logged-in session, ASK THE USER before running it.』存在。
  • [ok] 网络外发仅限 Bilibili 系域名 — 逐脚本重读:view/detail、dm/list.so、player/wbi/v2、fav/folder/created/list-all 均在 api.bilibili.com;短链 b23.tv;yt-dlp 目标为 bilibili.com 视频 URL。
  • [ok] raw-deflate 弹幕解压机制成立 — list.so 返回经 python3 zlib.decompress(..., -15)(window bits -15),与脚本注释『headerless raw DEFLATE』一致。
  • [ok] WBI 签名只在 reference(space/wbi/*)不在这批脚本里 — 脚本中 wbi 仅出现在 x/player/wbi/v2 端点名(登录门检测),无签名实现;reference 目录 TOC 标注 WBI 仅 space/wbi/* 需要。
  • [ok] 功能声明 vs 实际能力相符 — 『fetch real, verifiable data…never hand-type or estimate』由 fetched_at+NO FABRICATION+脚本落地;未发现夸大或无法定位的承诺。
  • [ok] 注入面(输入归一化) — BV 正则锚定 10 字符长度防过捕;aid 分支取纯数字;两者进入 query 而非 shell 求值。
  • [ok] 元数据(license/stars/commit) — 仓库级 MIT、stars=1385、pushed_at=2026-09-09T12:33:29Z;本地 HEAD==pin d5c4678cb5d4fd6acc9c922690df035dbd33d247。

6結論

  • 「データの誠実性」を構造と規律として具現化:出力 JSON に fetched_at を組み込み、取得不可時は「未取得/未確認」と記載させることで、ナレッジベースにおける手入力数値の陳腐化・誤りを根本から防止。
  • ログイン不要のメインパス(メタデータ/統計/弾幕)と透明性の高いログイン制限:ログイン不要で取得できるものはすべて提供し、不可能なものは明示して無理にバイパスしない設計。
  • 多数の実践的なトラブル(プロキシ除外、412 エラー、raw-deflate、CJK 照合順序、macOS システムプロキシ 503 エラー)への対処をスクリプトとリファレンスに集約し、利用者が同じ問題に直面するのを防止。
  • live セルフテストと Verified 日付メンテナンスのクローズドループを備え、API の仕様変更を無言の誤答ではなく FAIL 行として検知。
  • 入力形式の完全な互換性(BVID/av/b23.tv/URL)と安定した出力構造(単一 JSON + pages[])により、後続処理での引用・利用が容易。
  • 最適な用途: 適した用途:ナレッジベース、ケーススタディ、クリエイターデータの検証のために実際の Bilibili の数値を引用する必要があるライターやアナリスト、「なぜこの動画がヒットしたのか」といったコンテンツ分析、複数P動画の弾幕/字幕/パート別メタデータの取得、および「ドキュメントに Bilibili の再生数やいいね数を書き込もうとしている」あらゆる瞬間(書く前にまずフェッチ)。
    不向きな用途: 適さない用途:ログインが必要な機能の完全自動バッチ処理(字幕やお気に入り一覧の取得には毎回ユーザーセッションの承認が必要)、プラットフォームのリスク制御が厳しい状況下での超大規模スクレイピング(コンプライアンスやレートリミットの評価が必要)、Bilibili 以外のプラットフォームデータ、完全な肉声照合レベルの正確な字幕が要求される場面(ai-zh は AI による ASR ドラフトトラックに過ぎないため)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-09
    Option A · Direct DownloadDownload bilibili-source.tar.gz
    sha256: 0274158c3549e867…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d5c4678cb5.