当前位置: 首页 > news >正文

我写了一个 Agent Skill——让博客发布全自动

我写了一个 Agent Skill——让博客发布全自动

TL;DR: 博客园支持一个 2002 年的古老 API——MetaWeblog API。我用它给 Claude Code 写了个 Skill,把 Markdown 文章一键发布到博客园,还自带润色检查。

先看效果

npx skills add yuwen773/cnblogs-publisher

在 Claude Code 里说「帮我发布文章到博客园」,它会引导你完成配置和发布。


为什么做这个

写博客的流程:Markdown → 复制粘贴到后台 → 手动上传图片 → 格式经常乱。一套下来 10 分钟起步。

Claude Code 的 Skill 机制出现后,我在想:能不能让它帮我发布?

调研发现:

  • 博客园后台有「博客接口」,支持 MetaWeblog API
  • 这个 API 2002 年就有了,XML-RPC 协议,古老但稳定
  • 支持发布文章、编辑文章、上传图片、获取分类

于是有了 cnblogs-publisher。


技术方案

1. MetaWeblog API 是什么

博客发布协议,2002 年和 WordPress 一起诞生。核心 5 个方法:

方法作用
metaWeblog.newPost发布新文章
metaWeblog.editPost编辑文章
blogger.deletePost删除文章
metaWeblog.getCategories获取分类
metaWeblog.newMediaObject上传图片

博客园完整支持。调用方式:HTTP POST 一个 XML,收到 XML 响应。Python 标准库自带 xmlrpc.client

from xmlrpc.client import ServerProxyclient = ServerProxy("https://rpc.cnblogs.com/metaweblog/你的用户名")
post = {"title": "文章标题","description": "<p>HTML 正文</p>","dateCreated": "20260407T12:00:00",
}
post_id = client.metaWeblog.newPost(blog_id, username, token, post, True)

2. Markdown → HTML

用户写 Markdown,博客园要 HTML。用 mistune 转换:

import mistunehtml = mistune.html("**粗体** 和 `代码`")
# 输出: <p><strong>粗体</strong> 和 <code>代码</code></p>

mistune 纯 Python,无额外依赖。

3. 配置文件

首次使用提示输入四个信息,之后存到 ~/.cnblogs_config

api_url="https://rpc.cnblogs.com/metaweblog/你的用户名"
blog_id="xxxxx"
username="你的用户名"
token="xxxxxxxxx"

这个文件在 .gitignore 里,不会被提交。

4. 完整 CLI

# 从文件发布(自动提取标题)
python scripts/publish.py new --file ./post.md --categories "技术,AI"# 直接发布
python scripts/publish.py new --title "标题" --content "内容"# 查看可用分类
python scripts/publish.py categories# 上传图片
python scripts/publish.py upload --file ./screenshot.png# 编辑文章
python scripts/publish.py edit --post-id 12345 --file ./new-post.md# 删除文章
python scripts/publish.py delete --post-id 12345# 最近文章列表
python scripts/publish.py recent --count 10

亮点:发布前润色

在文章真正发出去之前,做两步检查:

Step 0.1 作者署名检查

读取文件,检测署名格式(*by 作者***作者**—— 作者 等)。检测到后询问用户:保留、修改还是删除。

Step 0.2 是否需要润色

"在发布前,是否需要先润色这篇文章?"

如果用户同意,执行:

  • 结构调整:按文章类型优化段落顺序
  • 语言优化:修正语法、改善表达
  • 格式规范化:标题层级、代码块、列表
  • TL;DR:超过 1000 字自动添加摘要
  • 去除废话:删除"众所周知"、"可以看出"、"标志着"等套话

好处是:发出去的文章格式正确、署名正确,避免事后才发现问题。


代码结构

cnblogs-publisher/
├── SKILL.md              # Skill 定义,Claude Code 读取这个
├── scripts/
│   └── publish.py        # 核心逻辑,385 行
├── references/
│   └── MetaWeblog.md     # API 参考文档
└── assets/└── .cnblogs_config   # 用户配置(不提交到 Git)

核心代码一个文件,依赖只有 Python 3 标准库 + mistune。


局限性

  1. Token 过期:博客园 token 可能过期,报错后删配置重配即可
  2. 仅支持博客园:其他平台(SegmentFault、简书)需单独适配
  3. 无批量发布:多篇文章只能多次调用
  4. 图片依赖博客园:博客园挂了图片就挂了

如何安装

npx skills add yuwen773/cnblogs-publisher

首次使用会提示输入配置:

  • api_url: https://rpc.cnblogs.com/metaweblog/你的用户名
  • blog_id: 博客园后台 → 管理 → 设置 → 博客接口 获取
  • username: 博客园用户名
  • token: 博客园后台获取的密钥

总结

MetaWeblog API 是个被遗忘的技术,但博客园还支持它。有了这个 Skill:

  • Markdown 一键转 HTML 发布
  • 发布前自动润色检查
  • 图片上传、分类管理

如果你也在用博客园,装上试试。如果你想给自己的平台写 Skill,思路一样:找 API、写 CLI、定义 SKILL.md。


Further Reading

  • cnblogs-publisher 源码
  • skills.sh 上的 cnblogs-publisher
  • MetaWeblog API 官方文档
  • Claude Code Skill 开发文档

—— yumingwen

http://www.jsqmd.com/news/604249/

相关文章:

  • 别再死记硬背了!用MaxDEA软件实操SBM模型计算GTFP(含非期望产出)
  • Pixel Aurora Engine实战教程:Pixel Aurora + Blender实现像素3D建模联动
  • 终极指南:Cheating Daddy历史记录功能全解析,轻松回顾与分析过往会话
  • 空间分辨率与灰度分辨率:如何权衡图像质量与存储效率
  • 利用快马AI平台,十分钟快速搭建SpringCloud微服务原型
  • SimpleFOC STM32实战04 | 基于STM32F103+HAL库,实现三相半桥驱动的关键配置与调试
  • Windows网络性能测试实战指南:用iperf3-win-builds提升网络诊断效率
  • ERNIE-4.5-0.3B-PT多场景落地:制造业设备故障描述标准化与维修建议生成
  • 哪所高校接受理学调剂多?以南京林业大学2026年政策为例深度解析
  • Elasticsearch RTF地理位置搜索:GeoIP插件配置与地理位置数据分析
  • 瑞斯康达Raisecom交换机VLAN与ERPS实战配置指南
  • Python实战:用geographiclib包5分钟搞定两点间距离与方位角计算
  • 终极MTK刷机工具指南:如何快速解锁、备份和修复联发科设备
  • 接口测试中,依赖登录状态的接口如何测试?
  • 2026年镀锌角钢规格电话,镀锌角钢防盐雾性能强 - 品牌推荐师
  • IA-Lab AI 检测报告生成助手:打造检测报告自动化新标杆,全面赋能机构降本增效与合规升级
  • p-limit 快速入门:5分钟学会并发限制技巧
  • Elasticsearch reindex实战:从零到一搞定索引迁移(含性能调优技巧)
  • 实战演练:基于快马生成的anaconda环境完成机器学习分类项目
  • pangu.js与CSS集成:保持样式一致性的终极指南
  • 半导体全产业链展会优选——国内知名半导体论坛实力测评 - 品牌2026
  • 工业组态软件Intouch(单机版)基础功能实战指南
  • 如何部署OpenClaw?2026年腾讯云零门槛教程:安装及大模型API、Skill配置全解析
  • Python AI服务上线前必过的一关(Cuvil编译器在金融实时风控中的压测通关全记录)
  • 2026年广告设计工作室怎么选择,整套vi设计/食品品牌策划/包装设计/详情页设计/品牌vi设计,广告设计公司推荐 - 品牌推荐师
  • SavedStateHandle在安卓app中是干嘛的?
  • WSABuilds:微软停服后继续畅享Android应用的终极解决方案
  • Kubernetes网络入门001篇【20260407】
  • Papra移动端开发实践:React Native构建跨平台文档应用
  • instinct:一个基于置信度的 AI Agent 自学习记忆系统