ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

social-auto-upload 的 Bilibili 上传 Skill:用 sau CLI 完成登录、校验与视频发布的完整契约

social-auto-upload 的 Bilibili 上传 Skill:用 sau CLI 完成登录、校验与视频发布的完整契约 social-auto-upload 的 Bilibili 上传 Skill用 sau CLI 完成登录、校验与视频发布的完整契约【免费下载链接】social-auto-upload自动化上传视频到社交媒体抖音、小红书、视频号、tiktok、youtube、bilibili项目地址: https://gitcode.com/GitHub_Trending/so/social-auto-upload本文基于仓库中skills/bilibili-upload/SKILL.md这一 Agent Skill 文档展开讲清楚如何通过已安装的sauCLI 完成 Bilibili 登录、账号校验和视频上传三条命令链路。读完后你将掌握skill 的默认工作流与命令选择策略、sau bilibili login/check/upload-video的完整参数契约、biliup运行时如何被程序自动下载与复用以及非交互环境下登录的边界处理和常见故障排查路径并能结合 sau_cli.py 与 runtime.py 的源码理解每个参数最终落到底层biliup调用时的真实形态。Skill 定位以 sau 为主接口biliup 由程序自动准备Bilibili 是少数没有走 Playwright/浏览器自动化、而是直接对接上游开源上传工具biliup的平台。这个 skill 的核心设计原则见 SKILL.md是优先把sau作为主接口用户不需要自己去找biliup或手动下载 release程序会在运行时自动检查、自动下载、自动更新biliup对 Agent 而言不应在非交互环境里硬跑sau bilibili login正确做法是引导用户自己在本地终端执行。skill 目录本身是Agent 可消费的指令包结构如下SKILL.mdskill 入口声明功能概览、默认工作流与执行前检查references/cli-contract.md三条命令的参数契约references/runtime-requirements.md运行前提与推荐调用方式references/troubleshooting.md故障排查手册scripts/examples/可直接参考的 sh / PowerShell / Python 调用模板。功能概览继承自 SKILL.md功能命令入口说明登录sau bilibili login --account name需要用户自己在本地真实终端里执行用于生成或刷新登录信息校验sau bilibili check --account name检查指定账号当前是否有效视频上传sau bilibili upload-video ...上传一条 Bilibili 视频运行前提环境需要什么按 runtime-requirements.md这个 skill 默认假设当前环境已具备已安装social-auto-upload可以调用sau或者至少可以执行python sau_cli.py当前机器首次运行时可以联网访问 GitHub Release用于自动下载biliup。用户不需要自己安装biliup。当执行sau bilibili ...时如果本地没有biliup程序会自动下载如果上游 GitHub Release 有更新程序会自动更新后再继续执行。推荐的两种调用方式sau已在 PATH 中sau bilibili --help仓库内直接调用PowerShell.\.venv\Scripts\python.exe sau_cli.py bilibili --helpbash / zshpython sau_cli.py bilibili --help首次运行的注意事项首次运行可能比其他平台更慢因为要自动准备biliup如果网络无法访问 GitHub ReleaseBilibili 命令会失败一旦本地已经准备好biliup后续命令会直接复用sau bilibili login --account name需要用户自己在本地真实终端里执行如果终端二维码显示不完整通常可以直接打开当前目录下的qrcode.png扫码。命令契约login / check / upload-video登录sau bilibili loginsau bilibili login --account account必填参数--account作用自动准备biliup触发 Bilibili 登录流程扫码登录账号说明--account传的是用户自定义的account_name不是固定只能叫creator。一个account_name对应一个账号文件可用于多账号隔离和并发任务登录方式说明这个命令应该由用户自己在本地真实终端里运行agent 不应该在非交互环境里硬跑这个命令如果终端二维码显示不完整可直接打开当前目录下的qrcode.png扫码。从源码看这条非交互环境不硬跑的约束是被代码显式实现的。sau_cli.py 中的login_bilibili_account会先调用has_interactive_terminal()判断sys.stdin.isatty() and sys.stdout.isatty()见 sau_cli.py若不是交互式终端直接返回失败信息提示用户在本地终端执行sau bilibili login --account name并说明二维码显示不完整时可打开./qrcode.png扫码若是交互式终端则执行run_biliup_command([-u, str(account_file), login], interactiveTrue)即以biliup -u account_file login形式拉起上游登录流程。账号文件的落盘规则同样来自源码resolve_account_file 将账号统一放在运行时根目录下的cookies/子目录文件名为bilibili_account_name.json。因此--account的本质是账号文件名的命名空间这也是多账号并发隔离的基础。校验账号sau bilibili checksau bilibili check --account account必填参数--account预期输出valid或invalid。底层实现在 check_bilibili_account先检查账号文件是否存在不存在直接返回无效随后调用run_biliup_command([-u, str(account_file), renew])即用biliup renew刷新登录态以returncode 0作为有效性判据。dispatch 中check动作打印valid/invalid并分别返回退出码 0/1便于脚本化判断。上传视频sau bilibili upload-videosau bilibili upload-video \ --account account \ --file video-path \ --title title \ --desc desc \ --tid category-id \ [--tags tag1,tag2] \ [--schedule YYYY-MM-DD HH:MM]完整参数表契约以 cli-contract.md 为准参数解析以 sau_cli.py 为准参数必填说明--account是用户自定义account_name对应cookies/bilibili_name.json账号文件--file是视频文件路径argparse阶段会校验文件真实存在existing_file_path见 sau_cli.py--title是视频标题--desc是视频简介Bilibili 下为 required不同于其他平台的可选默认空串--tid是Bilibili 分区 idint类型第一版必须传--tags否逗号分隔的标签如tag1,tag2--thumbnail否可选的 Bilibili 封面图路径existing_file_path校验存在性--schedule否定时发布时间统一格式YYYY-MM-DD HH:MM%Y-%m-%d %H:%M见 SCHEDULE_FORMAT几个关键参数的解析细节--tid必须传tests/test_sau_bilibili_cli.py 中test_build_parser_requires_tid_for_upload_video明确验证了缺少--tid时解析器直接SystemExit。分区 id 可从 utils/constant.py 中的VideoZoneTypes枚举查取例如SPORTS_FOOTBALL 249运动 足球示例脚本里使用的--tid 249即来自此枚举--tags逗号分隔parse_tagssau_cli.py按逗号切分、去除首尾空白并剥掉#前缀再在上传时拼接为--tag tag1,tag2传给biliup--schedule走统一时间格式schedule_valuesau_cli.py按%Y-%m-%d %H:%M解析非法格式会在参数解析阶段即报错。上传时若publish_date是datetime会转换为 Unix 时间戳传给biliup的--dtime见 upload_bilibili_video上传前置校验upload_bilibili_video 在调用biliup upload前会先检查账号文件是否存在缺失时直接抛出Bilibili account file is missing: ...并提示先执行sau bilibili login错误处理比盲目执行更早暴露问题。最终拼装出的底层命令形如biliup -u cookies/bilibili_account.json upload video \ --title title --desc desc --tid tid \ [--tag tag1,tag2] [--cover cover.png] [--dtime unix-timestamp]biliup 运行时如何被自动准备不要求用户手动安装的承诺由 uploader/bilibili_uploader/runtime.py 兑现。其工作流程可以归纳为版本探测fetch_latest_release请求 GitHub Release 的releases/latestAPIGITHUB_RELEASE_API常量runtime.py并按系统-架构组合从 release assets 中挑选匹配的产物如linux-aarch64对应aarch64-linux.tar.xzwindows-x86_64对应x86_64-windows.zip下载与安装download_biliup_asset将压缩包下载到临时目录解出biliup/biliup.exe可执行文件后原子替换到目标路径并在非 Windows 系统上补加可执行权限版本缓存与复用ensure_biliup_binary将当前版本写入同目录的version.txt后续命令若本地二进制与 latest 版本一致则直接复用若 GitHub 请求失败但本地已有二进制也会降级复用本地版本而不是直接报错runtime.py。从源码结构看biliup二进制按platform-arch/子目录隔离存放于用户主目录下的~/.social-auto-upload/tools/biliup/get_biliup_runtime_rootruntime.py因此多平台产物互不覆盖。run_biliup_commandruntime.py区分两种执行模式非交互模式捕获 stdout/stderr 供 CLI 汇总错误信息interactiveTrue时直接透传终端流这正是登录二维码能渲染到用户终端的原因。默认工作流与执行前检查SKILL.md 给出的 Agent 侧标准工作流是四步先确认 references/runtime-requirements.md再确认 references/cli-contract.md执行匹配的sau bilibili ...命令如果命令失败再看 references/troubleshooting.md。命令选择建议用户没有登录信息先让用户自己在本地终端执行login用户只想确认账号状态先用check用户要发视频用upload-video。执行前检查清单优先确认当前环境能运行sau如果sau不在 PATH 中可以用仓库里的 sau_cli.py不要要求用户手动下载biliup第一次运行 Bilibili 命令时程序可能会自动联网准备biliup不要在非交互环境里硬跑sau bilibili login正确做法是让用户自己在本地终端执行sau bilibili login --account name如果终端里的二维码显示不完整提醒用户直接打开当前目录下的qrcode.png扫码。可复用的模板脚本skill 自带三份模板覆盖三种常见集成形态bilibili_commands.shbash 版完整链路login → check → upload-videobilibili_commands.ps1PowerShell 对应版本bilibili_cli_template.py以 Pythonsubprocess方式调用sau_cli.py适合嵌入自动化脚本。sh 模板的核心内容可直接作为排障基线accountaccount_a # account_name is user-defined. One account_name maps to one account file. # You can prepare multiple account names and run them in parallel. sau bilibili login --account $account # 需在本地交互式终端执行 sau bilibili check --account $account sau bilibili upload-video \ --account $account \ --file ./videos/demo.mp4 \ --title Bilibili CLI Demo \ --desc Bilibili CLI Demo \ --tid 249 \ --tags 足球,测试 \ --schedule 2026-03-26 16:00Python 模板则展示了程序化调用形态构造sys.executable sau_cli.py bilibili upload-video ...参数列表后用subprocess.run(command, checkTrue)执行bilibili_cli_template.py并同样引用VideoZoneTypes.SPORTS_FOOTBALL.value作为--tid保持了示例与 utils/constant.py 中枚举的一致性。故障排查从现象到定位troubleshooting.md 覆盖了六类高频问题结合源码可以进一步精确归因首次运行很慢—— 正常现象程序正在自动下载biliup对应ensure_biliup_binary的首次下载分支。自动下载失败—— 依次检查当前网络能否访问 GitHub、GitHub Release 是否可达、本地目录是否有写权限。若账号文件缺失导致的假性下载失败应先确认cookies/bilibili_name.json是否存在。check返回invalid—— 常见原因账号文件不存在、登录信息已失效、biliup renew失败。建议重新执行sau bilibili login --account account。这与源码逻辑一致check_bilibili_account对文件不存在与renew返回非 0两种情形都返回False。登录时报not a terminal—— 说明在非交互环境agent 命令执行器、管道、被接管标准输出的进程里触发了 login。正确做法是改为用户自己在本地真实终端执行若终端二维码不完整直接打开当前目录下的qrcode.png扫码。CLI 侧对这种情况会给出含qrcode.png提示的友好错误信息login_bilibili_account且 tests/test_sau_bilibili_cli.py 专门断言了该消息内容保证这条兜底提示不会静默丢失。上传失败—— 优先检查--tid是否正确、视频文件是否真实存在、标题/简介/标签是否符合平台要求、当前登录信息是否仍然有效。上游更新后行为变化—— Bilibili 集成自动跟随上游biliup最新 release上游命令行为变化可能影响本项目的 CLI。排障时同时确认当前下载到的biliup版本~/.social-auto-upload/tools/biliup/platform/version.txt、上游 release 是否有最近变更。测试对契约的固化tests/test_sau_bilibili_cli.py 是这个 CLI 契约的回归保障四个用例分别锁定build_parser能正确解析bilibili login --account ...upload-video缺--tid时必须SystemExit必填契约check动作在账号有效时打印并返回 0dispatch行为;非交互终端下login_bilibili_account返回失败且消息中包含local interactive terminal与qrcode.png提示upload_bilibili_video在传入封面时确实把--cover path透传给run_biliup_command见 tests/test_sau_bilibili_cli.py。这组测试与 skill 文档中的每一条关键约定tid 必填、非交互登录兜底、封面透传一一对应说明文档契约并非纸面约定而是被测试固化的实现行为。小结Bilibili 上传 skill 的本质是把自动准备biliup 二进制 透传参数给上游biliup 交互式登录边界保护这三件事封装进sau这一统一入口login必须在真实终端中由用户执行源码用isatty检测和qrcode.png兜底提示保证体验check用biliup renew的退出码给出机器可读的valid/invalidupload-video则把--tid、--tags、--schedule、--thumbnail映射为biliup upload的原生参数并先行校验账号文件与媒体文件的存在性。按照 SKILL.md 的四步工作流执行、遇到失败回到 troubleshooting 定位是这套 skill 在 Agent 场景下的标准用法。【免费下载链接】social-auto-upload自动化上传视频到社交媒体抖音、小红书、视频号、tiktok、youtube、bilibili项目地址: https://gitcode.com/GitHub_Trending/so/social-auto-upload创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进