【旧版】limitless自动化文章发布工具
注意:该版本的通告是旧版,已经废弃,请查看最新版
limitless自动化文章发布工具 – limitlesslimitless自动化文章发布工具通过 WordPress REST API 将 Markdown 文章发布到 WordPress,并使用 BeautifulSoup 解析器生成古腾堡(Gutenberg)兼容 HTML。
功能特性
- 📝 将 Markdown 文章转换为带古腾堡块注释的 HTML,自动适配古腾堡编辑器
- 🔍 发布前自动进行 Markdown 语法检查(lint),发现错误时取消发布并给出修正建议
- 🧱 支持标题、段落、代码块、列表、引用、表格、分隔线、图片等常见块
- 📦 支持嵌套列表、块引用内多段落等复杂结构
- 🔒 使用 WordPress 应用密码(Application Password)鉴权,不暴露明文登录密码
- 🗂️ 支持发布、草稿、指定分类、删除文章、查看分类列表等操作
- 🧪 内置完整自测试套件,验证块注释配对与 HTML 标签合法性
下载链接:
wp_publisher.zip – limitless自动化文章发布工具项目结构
wp_publisher/
├── wp_publisher.py # 主程序:命令行入口与 REST API 发布逻辑
├── md_converter.py # Markdown → 古腾堡 HTML 转换器(含 lint 语法检查)
├── config.py # 配置文件(含 WordPress 凭据,不入库,需手动创建)
├── test_converter.py # 转换器自测试脚本
├── README.md
└── .gitignore
环境要求
- Python 3.8+
- 可访问 limitless.net.cn 站点的网络环境
- 一个有效的limitless网站的账号应用密码
安装步骤
# 克隆仓库
git clone <仓库地址>
cd wp_publisher
# 安装依赖
pip install requests beautifulsoup4 python-markdown markdown pygments
配置说明
配置文件为 config.py,内容包含 WordPress 凭据。请修改模板并填写:
# 你的登录用户ID,注意是ID而非用户名,可以在 `用户->个人资料` 页面查看
WP_USER = "你的用户ID"
# 你的鉴权密钥(WordPress 应用密码)
WP_APP_PASSWORD = "xxxx xxxx xxxx xxxx xxxx xxxx"
注意:
WP_USER是 WordPress 用户 ID 而非用户名,可在用户 → 个人资料页面查看(URL 中的user_id)。WP_APP_PASSWORD是 WordPress 应用密码,在用户 → 个人资料 → 应用程序密码中生成。- 请勿将
config.py提交或分享,以防凭据泄露。
使用方法
发布文章
# 发布为正式文章(默认使用古腾堡转换)
python wp_publisher.py publish "文章标题" 文章.md
# 保存为草稿
python wp_publisher.py publish "文章标题" 文章.md --draft
# 不使用古腾堡转换(使用标准 Markdown 渲染)
python wp_publisher.py publish "文章标题" 文章.md --no-gutenberg
# 指定分类(分类 ID 可通过 categories 命令查看)
python wp_publisher.py publish "文章标题" 文章.md --category 12
仅转换不发布(调试)
# 只输出转换后的 HTML,不发布到站点
python wp_publisher.py test 文章.md
查看分类列表
python wp_publisher.py categories
删除文章
# 强制删除(彻底移除)
python wp_publisher.py delete 123
# 如需移入回收站,可编辑源码调整 force 参数
Markdown 语法检查(lint)
发布前会自动进行语法检查,支持以下检测项:
| 级别 | 检测项 |
|---|---|
| error | 代码块未闭合(三个 quote 或 三个波浪线 缺少配对) |
| error | 标题层级超过 6(#######) |
| error | 表格列数不匹配(表头与分隔行列数不一致) |
| warning | 标题 # 后缺少空格 |
| warning | 行内代码反引号不配对 |
| warning | 空链接 / 空图片 |
| warning | 连续超过 3 个空行 |
| warning | 嵌套列表使用 2 空格缩进(python-markdown 需要 4 空格) |
| warning | HTML 块级标签在同一行内未闭合 |
- error :存在 error 级别问题时,发布会被取消
- warning :仅提示,不阻止发布,但建议修正
开发者信息
开发者信息只对开发者有用,普通用户无需关心。
古腾堡块转换策略
md_converter.py 采用以下核心策略:
- 使用
python-markdown将 Markdown 转为 HTML(启用fenced_code、tables、toc、codehilite、sane_lists、admonition、footnotes扩展) - 使用 BeautifulSoup 解析 HTML DOM 树(不使用正则切分,避免历史 bug)
- 遍历顶层元素,逐个包裹古腾堡块注释
- 递归处理嵌套结构(blockquote 内段落、嵌套列表等)
| Markdown 元素 | 古腾堡块 |
|---|---|
# ~ ###### 标题 | wp:heading |
| 段落 | wp:paragraph |
| 代码块 | wp:code |
| 无序列表 | wp:list + wp:list-item |
| 有序列表 | wp:html(wp:list 对 ol 有兼容性问题) |
| 引用 | wp:quote |
| 表格 | wp:table |
| 水平线 | wp:separator |
| 图片 | wp:image |
| 其他未识别块 | wp:html |
运行测试
python test_converter.py
测试覆盖 7 大类约 50 个用例:
- 基础元素测试(标题、段落、代码块、列表、引用、表格、分隔线)
- 嵌套结构测试(嵌套列表、引用多段落、列表项内联格式单行性)
- 边界条件测试(空输入、代码块内含 HTML/古腾堡注释/引号等特殊场景)
- 古腾堡块完整性测试(块注释成对配对)
- HTML 标签合法性测试(标签嵌套正确性)
- 综合测试(完整文章结构)
- lint 语法检查测试(各检测项的正确性与误判防护)
注意事项
- WordPress 站点需启用 REST API(默认开启),并确保应用密码权限足够
- 发布接口地址固定在
https://limitless.net.cn/index.php?rest_route=/wp/v2/posts,如需更换站点请修改wp_publisher.py - 古腾堡转换要求使用
4空格缩进嵌套列表(2空格不被 python-markdown 正确解析) - 列表项内的内联格式(加粗、代码等)须保持在同一行,否则古腾堡可能报「无效内容」
License
NGC13009 ngc1300@limitless.net.cn
