mcpField
B
bilibili

bilibili

github.com/acedatacloud营销与增长17167 次安装今天更新
代码仓库

关于 bilibili

通过用户自行获取的 Cookie,使用标准库 Python 命令行工具读取和发布 Bilibili 专栏文章。发布与草稿管理包含确认步骤。

主要功能

  1. 01查看账号和文章统计
  2. 02列出文章、草稿和状态
  3. 03发布文章或保存草稿
  4. 04将外部图片转存至站内
  5. 05发布或删除前要求确认

适用场景

  1. 01查看文章阅读和互动数据
  2. 02将文章保存为草稿
  3. 03经明确确认后提交文章
  4. 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。

评论

支持 Markdown