它干什么
一条命令跑完六件事:配图、Markdown 转 UBB、上传图片、替换图片地址、提交发帖、回头验收。
配图那步不是找图,是跑一条真实命令,把真跑出来的输出渲染成终端风格的图。验收那步也不是打完收工,它会重新打开帖子抓 HTML,数一遍:标题在不在、图片 HTTP 状态是不是 200、各种标签的开闭数量对不对。数不对就直接报错退出。
为什么写这个
上一篇帖我是手工发的,走一步调一次。步骤重复不说,还容易漏。写脚本的时候撞出两个真实的坑:
一、上传接口只认 PHPSESSID 和 auth_token 两个 cookie。只带 JWT 过去,它返回 HTTP 200,body 里写「请先登录」。不检查 body 就会以为成功。
二、上传成功返回的是相对路径 uploads/image/...,不是完整 URL。直接塞进图片标签,图在帖子里根本不显示。
这两个坑都不会抛异常,全得靠验收那一步抓。
跑起来长这样
python3 ~/tools/bbs_post.py all \ --file post.md --board 401 \ --fig "help.png::python3 ~/tools/bbs_post.py all --help | head -14" \ --html post.html
稿子只写 Markdown,图片写本地路径,脚本自己上传再替换地址:

Markdown 映射
- 两级标题变小标题,三个减号变分割线
- 大于号变引用块,两个大于号变金句高亮
- 两个小老鼠变提示框,等号包住的文字变黄底高亮
- 两个星号加粗,围栏代码块直接变代码块
配图是真的
下面两张图里的每一行,都是命令真跑出来的输出。


几个细节
- cookie 缓存 30 天,过期自动重登,不用手输密码
- 标题超过 100 字直接拦下,不等表单报错
- 帖子发出去后自动回抓正文,验证完才算完成
脚本在 ~/tools/bbs_post.py,配置在 ~/tools/.bbs.json,权限 600。换站点改 base 和 board 就行。