编辑
2026-07-17
技术漫谈
00

目录

用 ZCode Agent 一键发布 VanBlog:从 API Token 到长期复用
先确认实例还活着
发文只需要记住两条主路径
路径 A:直接发布(最常用)
路径 B:草稿 → 审核 → 发布
我把它收成了一个可复用 CLI
实际踩过的坑
我现在固定的发文流程
小结

写完博客还要开后台粘贴,来回切窗口挺烦的。我把 VanBlog 的 API Token 和发布动作收成可复用 skill,对话里确认标题就能发。

用 ZCode Agent 一键发布 VanBlog:从 API Token 到长期复用

目标很简单:在对话里写完 Markdown,对一下标题和分类,直接打到本机 VanBlog,而不是再开浏览器点保存。

下面是这次真实落地:实例怎么确认还活着、官方 API 怎么鉴权、以及我怎么把流程收成长期能复用的 CLI。

先确认实例还活着

本机 Ubuntu 虚拟机上的 VanBlog 以 Docker 方式运行,常见状态如下:

  • vanblog-webmereith/van-blog:latest,映射 7172 -> 80
  • vanblog-dbmongo:4.4.0
  • 管理/API 内网地址:http://<vm-ip>:7172
  • 公网阅读域名:https://blog.zym588.me
  • 接口文档:直接看实例上的 /swagger/swagger-json

官方文档写得很诚实:目前没有单独写厚厚的 API 手册,以生成的 Swagger 为准。管理端接口统一用请求头鉴权:

http
token: <你的 API Token>

Token 在后台「系统设置 → Token 管理」创建。长期 API Token 比登录 session 更适合 agent:不用每次重新登录,也不用把账号密码塞进脚本。

发文只需要记住两条主路径

路径 A:直接发布(最常用)

http
POST /api/admin/article Header: token: <TOKEN> Content-Type: application/json

最小可用 JSON:

json
{ "title": "文章标题", "category": "技术漫谈", "content": "# Markdown 正文", "tags": ["AI", "自动化", "个人网站"], "author": "小转圈", "hidden": false, "private": false }

titlecategory 是必填;category 必须是后台已存在的分类名。本站当前常用分类:

  • 技术漫谈
  • 视频剪辑
  • 生活杂谈

路径 B:草稿 → 审核 → 发布

适合想先存一版再改的场景:

  1. POST /api/admin/draft 创建草稿
  2. PUT /api/admin/draft/:id 继续改
  3. POST /api/admin/draft/publish?id=<draftId> 正式发布

发布后 VanBlog 会触发 ISR,前台页面会随后刷新。

我把它收成了一个可复用 CLI

与其每次让模型现场拼 curl,我更愿意固定一个小工具。现在 skill 里大致这么调:

bash
# 健康检查 + token 是否有效 python vanblog_cli.py status --token-check # 直接发布 python vanblog_cli.py publish \ --title "文章标题" \ --category 技术漫谈 \ --tags "AI,自动化,个人网站" \ --content-file ./post.md # 只想先存草稿 python vanblog_cli.py draft --title "..." --content-file ./post.md # 改旧文 python vanblog_cli.py update --id 74 --content-file ./post.md

配置优先读 ~/.vanblog.json,也可以放在 skill 的 assets/config.json。关键字段只有两个:

json
{ "base_url": "http://10.10.158.160:7172", "public_base_url": "https://blog.zym588.me", "token": "<API_TOKEN>", "default_category": "技术漫谈", "default_author": "小转圈" }

这样发文时不用反复问密钥,也不会把 token 写进正文。

实际踩过的坑

  1. 分类名必须精确匹配
    技术Tech 都会失败。不存在时先调 POST /api/admin/category,或 CLI 的 ensure-category

  2. token 头字段名就是 token
    不是 Authorization: Bearer ...。照着 Swagger 抄最省事。

  3. 登录字段是 username + password
    name 会直接 401。登录拿到的是短期 session token;agent 场景仍建议换成 Token 管理里的长期密钥。

  4. 发布成功 ≠ 公网立刻可打开
    内网 API 写入成功后,若域名反代/frp 异常,公网可能暂时 401/打不开。这时先用内网:

    bash
    python vanblog_cli.py get --id <id> --public
  5. 日志里偶发 Cast to Number failed for value "NaN"
    多半是有人拿非数字当文章 id 请求。正常数字 id 发文不受影响。

我现在固定的发文流程

  1. 读站点 meta,对齐已有标签和分类
  2. 写 Markdown(标题具体、有卡片摘要(more 分隔)、正文可复现)
  3. 把标题 / 分类 / 标签 / 卡片摘要给自己确认一眼(除非说直接发)
  4. publishdraft
  5. 返回文章 id 与链接:https://blog.zym588.me/post/<id>

一句话:接口其实够用了,缺的是把鉴权、分类和发布动作固定下来。 固定好之后,写博客就从「打开后台」变成「在对话里收个尾」。

小结

  • 本机 VanBlog 运行正常,Swagger 是权威接口来源
  • 发文核心是 POST /api/admin/article,头里带 token
  • 长期复用请把 base_url 与 API Token 放进本地配置,而不是每次手抄
  • 分类先对齐、正文用 Markdown、发布后用公开接口复核

如果你也在用 agent 养个人站,不妨先跑通「一篇文章的一键发布」。通了以后,改文、草稿、配图都可以顺着同一套管线往上加。

本文作者:小转圈

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!