From acedatacloud-content
Reads and publishes Bilibili 专栏 (column) articles using user's login cookies. Lists articles with view/like/comment stats, inspects individual article stats, and publishes new articles with a dry-run safety gate.
How this skill is triggered — by the user, by Claude, or both
Slash command
/acedatacloud-content:bilibiliWhen to use
Trigger for anything on the user's Bilibili (bilibili.com) 专栏 account driven by their own login cookie: show who they are, list their published 专栏 articles with view / like / comment counts, look at one article's stats, or publish a new 专栏 article. This acts as the user's real account, so writes are gated behind an explicit confirmation.
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Drives the user's **real** Bilibili 专栏 (article) account through the same
Drives the user's real Bilibili 专栏 (article) account through the same
api.bilibili.com web endpoints the site uses, authenticated by the login
cookie they captured with the ACE extension. No browser, no third-party deps —
urllib + hashlib (the article-list read endpoint needs WBI signing, done
with stdlib).
The connector injects the cookie jar as an env var:
BILIBILI_COOKIES — a JSON array of cookies. Secret — never echo or print
it. It includes SESSDATA (auth) and bili_jct (the CSRF token used for
writes).The skill ships scripts/bilibili.py — self-contained, stdlib only.
# $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)
Stats come straight from 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": 91207595, "name": "...", "level": 4}
On a not-logged-in / auth error the cookie is expired — have the user reconnect at https://auth.acedata.cloud/user/connections. Do not loop-retry.
--confirm)publish writes to the user's real account. 专栏 content is HTML. Without a
trailing --confirm it dry-runs. --confirm is honored only as the last
argument. Always show the dry-run, get an explicit "yes", then re-run.
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)
--draft-only saves a draft (no submit) — safe; finish/publish in the editor.--draft-only.Bilibili caps 专栏 drafts at 999; once full, saving a new draft fails with
code 37106 草稿数已达最大上限. List drafts and delete the ones you don't need:
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 is GATED (dry-run unless trailing --confirm) and deletion
is permanent — always show the dry-run + the titles and get an explicit
"yes" before --confirm. Pass multiple aids to batch a few per call.publish automatically re-hosts external images (both <img src> and markdown)
onto Bilibili's CDN (i0.hdslb.com / article.biliimg.com) before saving —
Bilibili hotlink-blocks external images and rejects the whole article (37130)
if any external link remains. webp sources (which upcover rejects) are
transcoded to png via the CDN when possible; an image that still can't upload is
dropped from the article rather than failing the post. --no-rehost-images
skips this.
tid) / category returns -17; the CLI auto-retries
common tid values.BILIBILI_COOKIES — it is full account access.After you successfully publish and obtain the live result URL, call the built-in
publish_artifact tool ONCE so the user can track this deliverable in My Outputs:
publish_artifact(kind="article", channel="bilibili", title="<title>", url="<the REAL returned URL>", status="delivered")
Use the real returned URL — never fabricate one. Call it once per published item,
only after delivery is confirmed; skip it (or use status="failed") if publishing failed.
See _shared/artifacts.md.
npx claudepluginhub acedatacloud/skills --plugin acedatacloud-contentReads and publishes articles on CSDN using the user's own login cookies. Lists published articles with view/like/comment stats, inspects one article, and publishes new articles.
Multi-platform article publisher for syncing Markdown/HTML to 29+ platforms including Zhihu, Juejin, CSDN, Weibo, WordPress, WeChat, and more. Use for cross-posting content to Chinese tech communities and blogging sites.
Publishes articles to Toutiao (头条号) with shared login state, Markdown draft filling, and optional auto-publishing. Useful for 发布到头条 requests.