B站运营 Skill(全家桶)
6つの元スキル(bilibili-cookie / bilibili-comment / bilibili-auto-comment / bilibili-message / bilibili-daily-report / bilibili-video-download)を統合したものです。
Skill-First 鉄則
B站に関するタスク(ダウンロード、コメント、DM、API呼び出し、日報、弾幕)の最初のステップは常に skill_view(name='bilibili') です。yt-dlp を裸で実行したり、自分でスクリプトを書いてAPIを直接叩いたり、直接 browser に突撃したりしないでください。GK は複数のセッションで「skillを使わない」問題を繰り返し修正してきました。
すべてのB站リクエスト(ダウンロード、API呼び出し、コメント)には必ず Cookie を含めてください。 通常画質であっても、Cookie がないと 412 エラーになります。
機能ルーティング
| タスク | 詳細ドキュメント | スクリプト / クイックコマンド |
|---|---|---|
| Cookie の取得 / 更新(QRコードログイン) | references/cookie-login.md | プロセス内蔵ドキュメント(完全なPythonコードを含む) |
| 動画 / ユーザー検索(WBI) | references/cookie-login.md | `scripts/bili_wbi_search.py "<キーワード>" [video |
| 動画ダウンロード | references/video-download.md + references/cookie-login.md の yt-dlp 節 | scripts/cookie_to_netscape.py → yt-dlp |
| コメントの投稿 / 返信 / 削除 | references/comment-api.md | scripts/post_reply.sh <BVID> <message> [root_rpid] [parent_rpid] |
| 自動コメントロボット | references/auto-comment.md | scripts/bili_auto_comment.py --count 30 --interval 600 |
| DMの送信 | references/message-browser.md | ブラウザ操作の手順(ドキュメント参照。api.vc は風制御により純粋なAPIでは不可) |
| トレンド日報PPT | references/daily-report.md | bash ~/.hermes/skills/bilibili/scripts/run_daily.sh |
| 全機能動作確認("skillが正常か試す") | references/verification.md | ドキュメントに従い10項目を順に実行、副作用最小化 |
| 弾幕クローリング | references/danmaku-protobuf.md | ドキュメント参照(protobuf解析) |
| 人気 / ランキングAPI | references/APIv2.popular.md, references/APIv2.ranking.md | 公開API、ログイン不要 |
| コメントAPIのフィールド / エラーコード | references/comment-api.md(付録に元のreply APIリファレンスあり) | — |
共通基盤(全機能で必読)
Cookie
- ファイル:
~/.bilibili-cookie、単一行形式SESSDATA=xxx; bili_jct=xxx; DedeUserID=xxx - SESSDATA=ログイン認証(ログインが必要なすべてのAPIで必須);bili_jct=csrfトークン(POST時は
csrf=xxx必須);DedeUserID=ユーザーmid - 有効期限は約30日。APIが
-101を返した、または nav で未ログインと表示された場合 → Cookie期限切れ。references/cookie-login.md に従い再スキャン。GKに「Cookieの期限が切れたので再スキャンが必要です」と積極的に伝え、自分で発見するのを待たないでください。 - Cookieが必要な操作の前に、まず nav インターフェースで簡易検証を行ってください。
- yt-dlp の --cookies は Netscape 形式のみ認識します。事前に
python3 ~/.hermes/skills/bilibili/scripts/cookie_to_netscape.pyを実行してください(出力先 /tmp/bili_netscape_cookie.txt)。 - 現在のログインアカウントは nav インターフェース(
x/web-interface/nav)の実測結果に基づきます。特定のUIDをハードコードしないでください。
リクエスト規約
- UA は完全なChrome文字列を統一使用:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36(短いUAは風制御の対象になります) - POST 時は必ず
Referer: https://www.bilibili.com/video/{BVID}+Origin: https://www.bilibili.com+csrfを含めてください。 - 検索インターフェースは必ず
/x/web-interface/wbi/search/typeパスを使用してください(wbiパスでないとHTMLエラーページが返ります)。
API信頼性一覧表(サーバーIP実測)
| インターフェース | 状態 |
|---|---|
view(BVID→AID/CID) | 安定 |
wbi/search/type(video/bili_user、wbi署名不要) | 利用可能 |
reply/main / reply/add / reply/del | 利用可能 |
popular / ranking/v2 | 利用可能、公開、ログイン不要 |
space/arc/search | -799 レート制限、使用禁止 |
search/type(wbiパスなし) | 風制御、HTMLエラーページを返す |
api.vc.bilibili.com(DM) | 全面風制御、ブラウザUIのみ |
主要エラーコード
| コード | 意味 | 対応 |
|---|---|---|
| -101 | 未ログイン / Cookie無効 | QRコードで再ログイン |
| -509 | リクエストが頻繁すぎる | 5-10秒待ってリトライ |
| -799 | サーバーIPがレート制限された | インターフェースパスを変更、リトライは無効 |
| -635 | 動画がコメントを許可していない | スキップ |
| -637 | 不適切な言葉 | スキップ / 文面を修正 |
| 12014 | その日のコメント送信上限に達した | スクリプトを停止して24時間待つ(数時間ではない)、短い間隔で再起動して試さない |
| 412 | ダウンロード時にCookieがない / 風制御 | Netscape Cookieを付けるか、API方式を使用 |
| 12061 | UP主がコメント欄を閉じている | スキップ |
各機能のエッセンス
動画ダウンロード
yt-dlp + Netscape Cookie を優先(1080Pが解除可能)。yt-dlp で412エラーが出た場合はAPI方式に切り替え:playurl に fnval=0&platform=html5 を付けて durl の直接リンクmp4を取得(dash分離ストリームはログインなしでは403)。CDNダウンロード時は必ず Referer: https://www.bilibili.com を含める。qn: 16=360p 32=480p 64=720p 80=1080p。
コメント
oid は avid であり bvid ではありません。事前に view インターフェースで変換してください。一次コメントは root=0 parent=0。返信時は root+parent を指定。ユーザーの最新動画を探す:wbi検索で search_type=video&order=pubdate とし、最初の結果を取得。-509 の場合は5-10秒待機。
自動コメントロボット
--count 30 --interval 600(100/300 にすると12014が発生します)。起動前に ps aux | grep bili_auto_comment で残存プロセスを確認。各コメントに1-3秒のランダム遅延を入れます。永続的なバックグラウンド実行には terminal(background=true) または crontab を使用し、nohup/disown は使いません。12014が大量に発生したらすぐに停止。
DM
api.vc はサーバーIPからの curl とページXHRの両方で使用不可。唯一の方法:ブラウザにCookieを注入 → スペースページで「メッセージを送る」をクリック → .brt-editor に入力(inputイベントをdispatchする必要あり)→ [class*="_MessageSendBox__SendBtn_"] で曖昧一致させて送信。未フォローユーザーには1通しか送れません(エラーではありません)。
日報
bash /home/ubuntu/bilibili-daily/run_daily.sh でワンクリック全自動、Cookie不要、所要時間約15秒。スクリプトのマスターは本skillのscripts/にあり、データとPPT出力は /home/ubuntu/bilibili-daily/ にあります。pptxgenjsの注意点:colorに#を付けない、optionオブジェクトは毎回新規作成。
全般的な注意点
- B站のリクエストには常にCookieを含める。さもないと412。
- QRコードはPNGファイルとして保存し、GKにスキャンさせる(/home/ubuntu/Downloads/bilibili_qrcode.png)。ASCII QRコードを絶対にプリントしない。
- 検索/タイトルフィールドに
<em class="keyword">ハイライトタグが含まれる場合がある。re.sub(r'<[^>]+>', '', title)で除去する。 - 412/403 が発生した場合、buvid3/buvid4 などのCookieフィールドを追加して風制御に対応する。
- popular/ranking のページングでは、-799を防ぐために各ページの間隔を1秒以上にする。
- 各機能の詳細な注意点は、それぞれの references ドキュメントを参照。