biliup-skills
使用命令行工具 biliup(Python 版官方 CLI,非 biliup-rs)向 B 站(bilibili)投稿视频。触发场景:用户说"投稿 B 站"、"上传到 B 站"、"发 B 站"、"bilibili 投稿"、"B 站发视频"、"上传视频到 bilibili"等相关关键字。功能:(1) 自动检测并通过...
Like a lobster shell, security has layers — review code before you run it.
License
SKILL.md
biliup-skills — B 站命令行投稿
使用 biliup(Python 版官方 CLI,PyPI 包名 biliup)投稿 B 站视频。
与 biliup-rs 的区别:本 skill 使用的是 Python 版
biliup(pip install biliup), 不是基于 Rust 的biliup-rs。两者功能相似,但安装方式和命令参数不同。
关于登录凭据(cookies.json)
biliup login 完成后,会在工作目录生成 cookies.json,其中保存的是
用户自己的 B 站登录凭据(access_token),仅用于后续上传视频到用户自己的账号,
不会上传至任何第三方服务器。请妥善保管该文件,不要分享或提交到 git。
核心配置
- biliup 安装方式:
pip install biliup(PyPI 官方包) - biliup 路径:
~/.local/bin/biliup(pip --user 安装路径)或系统 PATH 中 - 登录凭据文件:
{workspace}/cookies.json(biliup login保存到运行时当前目录) - 脚本目录: 相对于本 SKILL.md 的
scripts/
⚠️ 已知行为(实战校正)
biliup login不支持--cookie参数:凭据固定保存到运行时的当前工作目录cookies.json。 建议先cd到 workspace 根目录再执行。biliup login必须使用 PTY(pty=true),否则报IO error: not a terminal。- 菜单导航偏移:启动时光标在"短信登录"(第 2 项),
↓↓Enter实际选到"浏览器登录"(第 4 项)。 使用浏览器登录模式,它会输出一个授权 URL,用 B 站 App 扫码授权即可。 - 二维码发送:拿到授权 URL 后,生成二维码图片发给用户,同时附文字链接作为备用。
- 进程不能提前终止:登录完成前 kill 进程会导致凭据未保存,需等进程自然退出(code 0)。
完整工作流
Step 1:检查并安装 biliup
bash scripts/setup_biliup.sh
- 若已安装则跳过,输出当前版本
- 若未安装,通过
pipx install biliup或pip install --user biliup安装 PyPI 官方包 - 无需手动下载二进制文件
Step 2:登录(首次使用 / 凭据已过期)
判断是否需要登录:
{workspace}/cookies.json不存在,或- 用户明确要求重新登录,或
- 上传时报认证错误(401/403)
登录流程(必须用 PTY,在 workspace 目录运行):
cd {workspace} && biliup login
# exec with pty=true, timeout=180s, yieldMs=8000
进程启动后显示登录方式菜单,发送 ↓↓Enter 选中"浏览器登录",输出授权 URL:
https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=xxxxxx
生成二维码并发送给用户:
python3 -c "import qrcode; qrcode.make('https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=xxxxxx').save('/tmp/biliup_qr.png')"
先单独发一条图片消息,再发一条文字备用链接:
# 图片消息(单独一条)
MEDIA: /tmp/biliup_qr.png
# 文字备用(单独一条)
🅱 B站扫码登录链接(图片看不到时使用):
https://passport.bilibili.com/x/passport-tv-login/h5/qrcode/auth?auth_code=xxxxxx
用 B站 App 扫码授权后,请稍等,我会自动检测登录结果~
然后 poll 进程输出,最长等 120 秒,等待进程退出码 0(登录成功)。
⚠️ 不要提前 kill 进程,否则凭据不会写入磁盘。
登录成功后凭据文件在:{workspace}/cookies.json
也可使用辅助脚本(自动捕获 URL 并生成二维码):
python3 scripts/qr_login.py --cookie {workspace}/cookies.json --wait
# 脚本会输出二维码图片路径到 stdout,用于发送给用户
Step 3:收集投稿信息
向用户收集以下信息(必填项优先,可选项若用户未提及则跳过):
| 参数 | 必填 | 说明 |
|---|---|---|
| 视频文件路径 | ✅ | 本地路径,支持多个(多 P) |
标题 --title | ✅ | 视频标题,最长 80 字 |
分区 --tid | ✅ | 见 references/tid_list.md;默认 21(虚拟主播综合) |
标签 --tag | ✅ | 逗号分隔,至少 1 个 |
简介 --desc | 可选 | 视频简介 |
封面 --cover | 可选 | 本地图片路径或 URL |
是否原创 --copyright | 可选 | 1=自制(默认),2=转载 |
转载来源 --source | 转载时必填 | 原始来源说明 |
若用户一次性提供了所有信息,直接进入 Step 4,不要反复追问。
视频文件处理:
- 若用户通过 QQ 发送视频(CQ 码格式),从
url=字段提取 URL,下载到本地再上传:curl -L -o /tmp/biliup_upload/<filename>.mp4 "<url>" - 下载后用
file命令确认是有效的 MP4 文件
Step 4:执行投稿
biliup -u {workspace}/cookies.json upload \
--title "视频标题" \
--tid 21 \
--tag "标签1,标签2" \
/path/to/video.mp4
多 P 视频:在末尾追加多个文件路径。
上传线路(可选,若用户要求速度优化):
--line 可选 bda2(默认)、ws、qn、tx、txa
运行投稿命令时:
- 告知用户"投稿中,请稍候..."
- 等待命令完成(timeout 300s)
- 解析输出中的 BV 号(
"bvid": "BVxxxxxxxxx")或错误信息
Step 5:返回结果
成功时输出:
✅ 投稿成功!
BV 号:BVxxxxxxxxx
标题:xxx
可在哔哩哔哩个人主页查看审核进度~
失败时输出错误信息,常见问题:
401/403→ 登录凭据已过期,需重新登录(回到 Step 2)- 文件不存在 → 检查视频路径
- 标题/标签违规 → 提示用户修改
注意事项
- biliup 是社区维护的 B 站上传工具(https://github.com/biliup/biliup)
- 通过 PyPI 官方包安装(
pip install biliup),无需手动下载二进制 - cookies.json 保存用户自己的 B 站登录凭据,请妥善保管,不要分享或提交到 git
- 投稿后需等待 B 站审核,通常数小时内完成
- 分区 tid 参考:
references/tid_list.md
Files
4 totalComments
Loading comments…
