关于 bilibili
通过用户自行获取的 Cookie,使用标准库 Python 命令行工具读取和发布 Bilibili 专栏文章。发布与草稿管理包含确认步骤。
主要功能
- 01查看账号和文章统计
- 02列出文章、草稿和状态
- 03发布文章或保存草稿
- 04将外部图片转存至站内
- 05发布或删除前要求确认
适用场景
- 01查看文章阅读和互动数据
- 02将文章保存为草稿
- 03经明确确认后提交文章
- 04检查待审核或未通过的投稿
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill bilibili安装后在 Claude Code 中输入/bilibili确认已加载。
附带文件scripts/bilibili.py
详细介绍
bilibili — 使用你自己的 Cookie 读取和发布专栏
通过网站使用的相同 api.bilibili.com Web 端点,操作用户真实的 Bilibili 专栏账号;使用用户通过 ACE 扩展获取的登录 Cookie 进行身份验证。无需浏览器,也不依赖第三方库——使用 urllib + hashlib(文章列表读取端点需要 WBI 签名,通过标准库完成)。
连接器会将 Cookie Jar 注入为环境变量:
BILIBILI_COOKIES— Cookie 的 JSON 数组。**这是机密信息,切勿回显或打印。**其中包含SESSDATA(身份验证)和bili_jct(写入时使用的 CSRF 令牌)。
CLI
此技能提供 scripts/bilibili.py——仅依赖标准库的独立脚本。
# $SKILL_DIR can point at another skill loaded this turn — anchor on our own
# script, and re-run this at the top of every Bash block (fresh shell each time).
BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
[ -f "$BILI" ] || { echo "bilibili script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$BILI" whoami # who is logged in (mid, name)
python3 "$BILI" articles --limit 20 # my 专栏 articles + stats
python3 "$BILI" article <cvid> # one article's stats (cv id)
python3 "$BILI" drafts --limit 50 # list saved drafts (aid + title)
python3 "$BILI" status --limit 10 # review state of recent submissions
python3 "$BILI" categories # 分类 names accepted by --category
统计数据直接来自 Bilibili:view(阅读)、like(点赞)、reply(评论)、favorite(收藏)、coin(投币)。
请先验证连接
BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
python3 "$BILI" whoami
# → {"mid": 10000000, "name": "...", "level": 4}
如果未登录或出现身份验证错误,说明 Cookie 已过期——请让用户前往 https://studio.acedata.cloud/console/connectors 重新连接。不要循环重试。
发布 — 需确认(除非末尾带有 --confirm,否则为试运行)
publish 会写入用户的真实账号。专栏内容为 HTML。如果末尾没有 --confirm,则只进行试运行。只有当 --confirm 是最后一个参数时才会生效。务必先展示试运行结果,获得明确的“是”后再重新运行。
BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
python3 "$BILI" publish --title "标题" --content-file a.html # dry-run
python3 "$BILI" publish --title "标题" --content-file a.html --draft-only --confirm # save a draft
python3 "$BILI" publish --title "标题" --content-file a.html --confirm # save draft + submit (publish)
python3 "$BILI" publish --title "标题" --content-file a.html --category 数码 --confirm # pick the 分类
--draft-only会保存草稿(不提交),安全无风险;可在编辑器中完成并发布。如果用户没有明确要求公开发布,优先使用此选项:已提交的文章会进入审核队列,而此 CLI 无法撤回。- 提交(公开发布)步骤经常受到 Bilibili 风控限流(HTTP 412)。发生这种情况时,CLI 会报告已保存的草稿和编辑网址,用户可以从 Web 编辑器发布。
--category用于选择分类(默认是 数码,适合技术文章)。运行categories查看可用名称。结果会通过category/category_id显示实际使用的分类;如果不是用户选择的分类,请告知用户。
发布不会立即生效——文章会进入审核队列
submit 成功后会返回 state: -2(待审核)和 pending_review: true。在 Bilibili 批准之前(通常需要几分钟到几小时),返回的 url 对所有人都会显示 404。请告知用户文章正在审核中;不要声称文章已公开,也不要重新提交。稍后使用 status 查询,这是唯一能显示待审核或已拒绝文章的视图(公开列表中不会显示这些文章):
python3 "$BILI" status --limit 5 # state_desc: 待审核 / 已发布 / 未通过 (+ reason)
其他状态均不代表待审核,也不会自动公开——CLI 会以 ok: false 和 published: false 返回这些状态(-1 未通过,-3 已锁定,-4 已删除)。请阅读 state_desc 并如实告知用户;不要重新提交,而应使用 status 查看 reason。
发布结果中的 id 是文章 ID(使用 cv<id>),与 draft_aid 的编号不同。只能分享 url 字段。如果 Bilibili 未返回文章 ID,则 url 和 id 均为 null,并会设置 id_unverified: true——此时还没有可分享的链接,因此请使用 status 查找文章,不要根据 draft_aid 拼接链接。
管理草稿(上限为 999 个)
Bilibili 的专栏草稿上限为 999;达到上限后,保存新草稿会失败,并返回 code 37106 草稿数已达最大上限。请列出草稿并删除不需要的草稿:
BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
python3 "$BILI" drafts --limit 50 # list (aid + title)
python3 "$BILI" delete-draft <aid> <aid2> ... # dry-run (shows what would delete)
python3 "$BILI" delete-draft <aid> <aid2> ... --confirm # PERMANENTLY delete those drafts
delete-draft需要确认(除非末尾带有--confirm,否则为试运行),且删除操作不可恢复——务必先展示试运行结果和标题,获得明确的“是”后再使用--confirm。每次调用可以传入多个 aid,批量删除少量草稿。- 切勿盲目批量删除:先列出草稿,并确认这些标题对应的内容是无用草稿或重复内容。
图片
publish 会自动将外部图片(包括 <img src> 和 Markdown 图片)
重新托管到哔哩哔哩的 CDN(i0.hdslb.com / article.biliimg.com),然后再保存——
哔哩哔哩会屏蔽外链图片;如果文章中仍有任何外链,就会拒绝整篇文章(37130)。upcover
不接受 webp 源图;如果可行,会通过 CDN 将其转码为 png。仍无法上传的图片会从文章中移除,
而不会导致发布失败。--no-rehost-images 会跳过此步骤。
注意事项
- 这是用户真实的哔哩哔哩账号。 发布前务必确认。
- submit 可能返回 412(反机器人机制),即使草稿已成功保存——草稿才是可靠结果;不要反复重试 submit。
- 账号无权发布到某个分类时会返回
-17;未指定--category时,CLI 会自动重试备用列表。 - 绝不要打印
BILIBILI_COOKIES——它可用于完全访问账号。 - 服务条款:仅操作用户自己的账号,并使用用户自己获取的 Cookie。
记录输出
成功发布并获取在线结果 URL 后,调用内置的
publish_artifact 工具一次,让用户可以在 My Outputs 中跟踪此交付内容:
publish_artifact(kind="article", channel="bilibili", title="<title>", url="<the REAL returned URL>", status="delivered")
使用真实返回的 URL——绝不要捏造。该 URL 是发布结果中的 url 字段(根据文章 id 生成,
不是 draft_aid)。每个已发布条目仅调用一次,且只能在确认交付后调用。
state: 0或1(已发布,在线)→status="delivered"。pending_review: true(待审核)→status="draft";此时 URL 尚未上线。 如果用户要求你通过status重新检查,之后再将记录更新为已交付。- 被拒绝或锁定的状态、被 412 阻止的提交、
id_unverified: true或state_unknown: true→status="failed"(或跳过记录)。
参见 _shared/artifacts.md。