全部技能 / 文档与知识 / bilibili-source
文档与知识 · daymade/claude-code-skills

bilibili-source

Fetch comprehensive, login-free data for any Bilibili (B站) video — title, UP name and follower count, publish date, partition, tags, per-part cids, live stats (view, like, coin, favorite, share, reply, danmaku), and full danmaku (bullet-comment) text. Use this skill whenever working with a Bilibili video and needing real, citable numbers or metadata — ingesting a Bilibili source into a knowledge base, analyzing why a video performed, verifying a creator's claimed metrics, building a case study, or any time a Bilibili view/like/favorite count is about to be written into a document — fetch it, never hand-type or estimate it. Accepts BVID, av numbers, b23.tv short links, or full URLs. Subtitles and favorites-folder (收藏夹) enumeration are also covered but require the user's Bilibili login.

风险提醒:橙色 · 评估后使用AI 侦查报告
作者 daymadeGitHub daymade/claude-code-skills ↗Stars 1385许可 MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)commit d5c4678cb5
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

核心是把『一次 view/detail API 调用 + jq 规整』封装成单一 JSON:输入先归一化成 bvid/aid query 参数,再从 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 是后续弹幕/字幕的钥匙)。

网络韧性封装:请求时剥掉本机代理 env(B 站是国内服务,本地 forward proxy 会弄挂请求)、带浏览器 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 被四个脚本复用(fetch/danmaku/selftest/subs),保证任何调用路径都带同一套 env 剥离与头;bili-selftest 另外断言 API 形状不变式,漂移会以 FAIL 行暴露而非静默错答案。

弹幕脚本复用 fetch 解析出该 P 的 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>' 抽取每条弹幕文本,每行一条 + stderr 计数。

字幕轨道强制走登录态:脚本用 yt-dlp 读取用户浏览器 cookie 拉取 ai-zh 等字幕轨;skill 明示『无免登录路径,不要尝试绕过』并要求先问用户。

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 用固定公开 fixture 逐一断言每个能力与登录门不变式,漂移以 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 解压、匿名字幕列表必须为空(login-gate invariant)、收藏夹匿名枚举必须为空。文档要求 API 漂移后更新 'Verified' 日期。

2核心能力

01一次调用取全量元数据与实时互动数(标题/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外部依赖

类型依赖
clicurl
clijq
clipython3
cliyt-dlp
networkapi.bilibili.com
networkb23.tv(短链展开,单跳 302)

4风险提醒 风险提醒:橙色 · 评估后使用

风险提醒:橙色 · 评估后使用
  • 字幕路径接触本机浏览器 cookie — yt-dlp --cookies-from-browser 读取用户 Bilibili 登录会话并外发给 bilibili;skill 强制先问用户,但宿主/用户需知晓该接触面(含浏览器 cookie 库被第三方 CLI 读取)。
  • 第三方 API 无契约漂移 — 字段改名/加 WBI 签名/风控收紧随时可能发生——selftest 能暴露但不能阻止;'Verified' 日期会过期。
  • 轻度反风控头与批量面 — UA/Referer 规避 412 属轻量手段;批量/高频抓取仍可能触发限流或被要求 WBI;skill 定位是『取真实单条数据』而非批量采集器。
  • 数据时效与误引用 — 指标分钟级漂移;不带 fetched_at 的数字会静默过期,下游文档若忽略时间戳仍会写出已失真引用。
  • CJK 文本后处理陷阱 — sort/comm 对中文排序错误可能导致下游『假缺失』结论——skill 已提示用 find/grep -F 复核,但错误工具链仍可能误判。
风险提醒:橙色,评估后使用。按统一分档:bili-subs.sh 通过 yt-dlp --cookies-from-browser 实际接触本机浏览器登录 cookie(接触即橙色,skill 自身也标注 ask-before-run);核心 fetch/danmaku/selftest 是免登录常规公开 API 调用(单独看为黄色),selftest 会对 api.bilibili.com 两个端点做只读探测。外发对象为 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结论

  • 把『数据诚实』做成结构与纪律:fetched_at 内建于输出 JSON,取不到必须写『未获取/未核实』,从根上防知识库手打数字腐烂。
  • 免登录主路径(元数据/统计/弹幕)+ 登录门禁透明:能免登录的不藏私,不能的明说且不绕过。
  • 把大量真实踩坑(代理剥离、412、raw-deflate、CJK collation、macOS 系统代理 503)固化为脚本与 reference,调用者无需重踩。
  • 自带 live 自测与 Verified 日期维护闭环,API 漂移以 FAIL 行暴露而非静默错答案。
  • 输入归一化全兼容(BVID/av/b23.tv/URL),输出结构稳定(单 JSON + pages[]),下游引用简单。
  • 适合:适合:需要为知识库/案例研究/创作者数据核验引用真实 B 站数字的写作者与分析师;『为什么这个视频火了』类内容分析;多 P 视频的弹幕/字幕/分 P 元数据获取;以及任何『马上要写一个 B 站播放量/点赞数进文档』的时刻——先 fetch 再写。
    不适合:不适合:需要登录后能力的无感批量自动化(字幕/收藏夹枚举每次都要用户会话授权);平台风控严格时的超大批量抓取(应评估合规与限流);非 B 站平台数据;需要『人声核对级』字幕的场景(ai-zh 只是 AI-ASR 草稿轨)。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-09
    方式 A · 人下载镜像包下载 bilibili-source.tar.gz
    sha256: 0274158c3549e867…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit d5c4678cb5;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库daymade / daymade/claude-code-skills
    Stars1385
    最近推送2026-09-09
    本 skill commitd5c4678cb5
    许可MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)
    本站信息
    收录日期2026-09-06
    分类文档与知识
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近