Ghost ⋅ WeChat ⋅ Lexical

文章发布到微信公众号的最后一步

将 Markdown 发布为 Ghost 博客,再一键同步到微信公众号草稿箱。 图片上传、代码块保护、样式白名单过滤 — 全自动完成。

Markdown
Ghost
WeChat
01

核心能力

Markdown → Lexical

将 Markdown 文件转换为 Ghost 原生 Lexical 格式,发布后在编辑器中可二次编辑,支持标题、代码块、表格、列表等丰富内容。

图片自动上传

文章中的图片自动上传至微信永久素材库,替换为 CDN 地址,无需手动处理。

三层白名单过滤

标签、属性、样式三层白名单机制,确保生成的 HTML 安全合规,通过微信公众号的内容审核。

代码块保护

代码块使用占位符机制保护,避免被 HTML 清理器破坏,保留语言标记和原始格式。

样式兼容转换

智能处理微信不支持的 HTML:表格转 div 布局,列表转前缀段落,链接转 text[url] 格式。

一键全流程

publish --wechat 一条命令完成 Markdown → Ghost → 微信的完整发布,无需任何手动步骤。

02

快速开始

安装

terminal
git clone https://github.com/yinguobing/ghostwriter.git
cd ghostwriter
pip install requests PyJWT

配置

创建 config.json,填入微信公众号和 Ghost 的 API 密钥:

config.json
{
  "wechat": {
    "appid": "your_wechat_appid",
    "secret": "your_wechat_secret"
  },
  "ghost": {
    "api_url": "https://yinguobing.com",
    "admin_key_id": "your_key_id",
    "admin_key": "your_hex_secret"
  }
}

使用

terminal
# 列出 Ghost 文章
python3 ghostwriter.py list

# 发布 Markdown 到 Ghost
python3 ghostwriter.py publish article.md

# 同步到微信草稿
python3 ghostwriter.py <article-id>

# 一键发布 + 同步
python3 ghostwriter.py publish article.md --wechat

# 预览 HTML(不创建草稿)
python3 ghostwriter.py --preview <article-id>
03

处理管道

从 Ghost API 获取 HTML 后,文章经过多层处理再推送到微信草稿箱:

  1. 1
    图片上传到微信永久素材
    遍历文中所有图片,逐一上传到微信服务器,获取永久素材 URL(media_id),替换为微信 CDN 地址。
  2. 2
    三层白名单过滤
    标签白名单(p, div, pre, code, img 等)、属性白名单(href, src, alt)、样式白名单(color, font-size, margin 等),逐层清理不安全内容。
  3. 3
    代码块保护与恢复
    清洗前用占位符保护代码块,清洗后恢复,确保代码格式完整保留。
  4. 4
    不兼容标签转换
    table → div 布局、ol/ul → 带前缀的 p 段落、hr → 分隔线 div、链接 → text [url] 格式,确保微信正确渲染。
  5. 5
    默认样式补全
    段落间距、图片间距、代码块样式等默认值补全,让文章在微信中有良好的阅读体验。
开源

开始使用 ghostwriter

让 Ghost 博客和微信公众号之间的内容同步变得简单优雅

GitHub → 查看文档