通过 API 将 Markdown/HTML 文章发布到微信公众号草稿箱
微信公众号文章发布器
通过 API 将 Markdown 或 HTML 内容发布到微信公众号草稿箱,并自动进行格式转换。
前提条件
- 设置 WECHAT_API_KEY 环境变量(来自 .env 文件)
- Python 3.9+
- 在 wx.limyai.com 上授权的微信公众号
脚本
位于 ~/.claude/skills/wechat-article-publisher/scripts/ 目录下:
wechat_api.py
用于列出账号和发布文章的微信 API 客户端:
# 列出已授权的账号
python wechat_api.py list-accounts
# 从 Markdown 文件发布
python wechat_api.py publish --appid <wechat_appid> --markdown /path/to/article.md
# 从 HTML 文件发布(保留格式)
python wechat_api.py publish --appid <wechat_appid> --html /path/to/article.html
# 使用自定义选项发布
python wechat_api.py publish --appid <appid> --markdown /path/to/article.md --type newspic
parse_markdown.py
解析 Markdown 并提取结构化数据(可选,用于高级用途):
python parse_markdown.py <markdown_file> [--output json|html]
工作流程
策略:“API 优先发布”
与基于浏览器的发布方式不同,此技能使用直接 API 调用,实现可靠、快速的发布。
- 从环境变量加载 WECHAT_API_KEY
- 列出可用的微信公众号(如果用户未指定)
- 检测文件格式(Markdown 或 HTML)并相应解析
- 调用发布 API 在微信中创建草稿
- 报告成功并附带草稿详情
支持的文件格式:
.md文件 → 作为 Markdown 解析,由微信 API 转换.html文件 → 作为 HTML 发送,保留格式
分步指南
步骤 1:检查 API 密钥
在任何操作之前,请验证 API 密钥是否可用:
# 检查 .env 文件是否存在并包含 WECHAT_API_KEY
cat .env | grep WECHAT_API_KEY
如果未设置,提醒用户:
- 将
.env.example复制为.env - 设置他们的
WECHAT_API_KEY值
步骤 2:列出可用账号
获取已授权的微信公众号列表:
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py list-accounts
输出示例:
{
"success": true,
"data": {
"accounts": [
{
"name": "我的公众号",
"wechatAppid": "wx1234567890",
"username": "gh_abc123",
"type": "subscription",
"verified": true,
"status": "active"
}
],
"total": 1
}
}
重要提示:
- 如果只有一个账号,自动使用它
- 如果有多个账号,询问用户选择
- 注意发布时使用的
wechatAppid
步骤 3:发布文章
对于 Markdown 文件:
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid <wechatAppid> \
--markdown /path/to/article.md
对于 HTML 文件(保留格式):
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid <wechatAppid> \
--html /path/to/article.html
对于小绿书(图文模式):
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid <wechatAppid> \
--markdown /path/to/article.md \
--type newspic
成功响应:
{
"success": true,
"data": {
"publicationId": "uuid-here",
"materialId": "uuid-here",
"mediaId": "wechat-media-id",
"status": "published",
"message": "文章已成功发布到公众号草稿箱"
}
}
步骤 4:报告结果
成功发布后:
- 确认草稿已创建
- 提醒用户在微信管理后台预览并手动发布
- 提供相关 ID 供参考
API 参考
认证
所有 API 请求都需要 X-API-Key 请求头:
X-API-Key: WECHAT_API_KEY
获取账号列表
POST https://wx.limyai.com/api/openapi/wechat-accounts
发布文章
POST https://wx.limyai.com/api/openapi/wechat-publish
参数:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| wechatAppid | string | 是 | 微信 AppID |
| title | string | 是 | 文章标题(最多 64 个字符) |
| content | string | 是 | 文章内容(Markdown/HTML) |
| summary | string | 否 | 文章摘要(最多 120 个字符) |
| coverImage | string | 否 | 封面图片 URL |
| author | string | 否 | 作者姓名 |
| contentFormat | string | 否 | 'markdown'(默认)或 'html' |
| articleType | string | 否 | 'news'(默认)或 'newspic' |
错误代码
| 代码 | 描述 |
|---|---|
| API_KEY_MISSING | 未提供 API 密钥 |
| API_KEY_INVALID | API 密钥无效 |
| ACCOUNT_NOT_FOUND | 账号不存在或未授权 |
| ACCOUNT_TOKEN_EXPIRED | 账号授权已过期 |
| INVALID_PARAMETER | 参数无效 |
| WECHAT_API_ERROR | 微信接口调用失败 |
| INTERNAL_ERROR | 服务器错误 |
关键规则
- 绝不自动发布 - 仅保存到草稿箱,由用户手动发布
- 先检查 API 密钥 - 如果未配置则快速失败
- 先列出账号 - 用户可能有多个账号
- 优雅处理错误 - 显示清晰的错误消息
- 保留原始内容 - 不要不必要地修改用户的 Markdown
支持的格式
Markdown 文件 (.md)
- H1 标题(# )→ 文章标题
- H2/H3 标题(##, ###)→ 章节标题
- 粗体(文本)
- 斜体(文本)
- 链接 文本
- 引用(> )
- 代码块(
...) - 列表(- 或 1.)
- 图片
→ 自动上传到微信
HTML 文件 (.html)
<title>或<h1>→ 文章标题- 所有 HTML 格式均保留(样式、表格等)
<img>标签 → 图片自动上传到微信- 第一个
<p>→ 自动提取为摘要 - 支持内联样式和富文本格式
HTML 标题提取优先级:
<title>标签内容- 第一个
<h1>标签内容 - 回退为“无标题”
HTML 内容提取:
- 如果存在
<body>,则使用 body 内容 - 否则,去除
<html>、<head>、<!DOCTYPE>并使用剩余内容
文章类型
news(普通文章)
- 标准微信文章格式
- 完整的 Markdown/HTML 支持
- 带图片的富文本
newspic(小绿书/图文消息)
- 以图片为主的格式(类似 Instagram 帖子)
- 从内容中提取最多 20 张图片
- 文本内容限制为 1000 个字符
- 图片自动上传到微信
示例流程
Markdown 文件
用户:“把 ~/articles/ai-tools.md 发布到微信公众号”
# 步骤 1:验证 API 密钥
cat .env | grep WECHAT_API_KEY
# 步骤 2:列出账号
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py list-accounts
# 步骤 3:发布(假设只有一个账号,appid 为 wx1234567890)
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid wx1234567890 \
--markdown ~/articles/ai-tools.md
# 步骤 4:报告
# “文章已成功发布到公众号草稿箱!请登录微信公众平台预览并发布。”
HTML 文件
用户:“把这个 HTML 文章发布到公众号:~/articles/newsletter.html”
# 步骤 1:验证 API 密钥
cat .env | grep WECHAT_API_KEY
# 步骤 2:列出账号
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py list-accounts
# 步骤 3:发布 HTML(自动检测格式)
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid wx1234567890 \
--html ~/articles/newsletter.html
# 步骤 4:报告
# “文章已成功发布到公众号草稿箱!HTML 格式已保留。请登录微信公众平台预览并发布。”
错误处理
未找到 API 密钥
错误:未设置 WECHAT_API_KEY 环境变量。
解决方案:要求用户设置包含 API 密钥的 .env 文件。
账号未找到
错误:ACCOUNT_NOT_FOUND - 公众号不存在或未授权
解决方案:要求用户在 wx.limyai.com 上授权其账号。
令牌过期
错误:ACCOUNT_TOKEN_EXPIRED - 公众号授权已过期
解决方案:要求用户在 wx.limyai.com 上重新授权。
微信 API 错误
错误:WECHAT_API_ERROR - 微信接口调用失败
解决方案:可能是临时问题,重试或检查微信服务状态。
最佳实践
为什么使用 API 而不是浏览器自动化?
- 可靠性:直接 API 调用比浏览器自动化更稳定
- 速度:无需启动浏览器、加载页面或进行 UI 交互
- 简单性:单条命令即可发布
- 可移植性:可在任何装有 Python 的系统上运行(无 macOS 专属依赖)
内容指南
- 图片:尽可能使用公共 URL;本地图片将自动上传
- 标题:保持在 64 个字符以内
- 摘要:如果未提供,则自动从第一段提取
- 封面:如果未指定,Markdown 中的第一张图片将成为封面
工作流效率
最小工作流(1 条命令):
- list-accounts → 获取 appid → 发布 → 完成
完整工作流(带验证):
1. 检查 .env → 列出账号 → 与用户确认
2. 使用选项发布 → 报告结果
故障排除
问:如何获取 WECHAT_API_KEY?
答:在 wx.limyai.com 注册并授权您的微信公众号,即可获取 API 密钥。
问:可以发布到多个账号吗?
答:可以,使用 list-accounts 查看所有已授权的账号,然后指定目标 --appid。
问:图片在微信中不显示?
答:确保图片是可访问的 URL。本地图片会自动上传,但如果路径不正确可能会失败。
问:标题太长?
答:微信限制标题为 64 个字符。脚本将使用 H1 的前 64 个字符。
问:news 和 newspic 有什么区别?
答:news 是标准文章格式;newspic(小绿书)以图片为主,文本有限。






