关于 wechat-article-publisher
用于将 Markdown 或 HTML 文章转换并提交到微信公众号草稿箱的发布技能,面向公众号运营者。它通过 API 管理授权账号、转换内容格式并创建草稿,发布仍需人工完成。
主要功能
- 01通过 API 查询授权账号
- 02将 Markdown 转换后提交为草稿
- 03保留 HTML 内容格式
- 04支持图文模式文章
- 05发布前检查 API 密钥
适用场景
- 01将 Markdown 文章存入公众号草稿箱
- 02把 HTML 通讯稿提交为草稿
- 03在多个授权公众号中选择目标账号
- 04以图文模式提交内容
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ iamzifei/ wechat-article-publisher-skill --skill wechat-article-publisher安装后在 Claude Code 中输入/wechat-article-publisher确认已加载。
附带文件scripts/parse_markdown.pyscripts/wechat_api.py
详细介绍
微信文章发布器
通过 API 将 Markdown 或 HTML 内容发布到微信公众号草稿箱,并自动转换格式。
先决条件
- 已设置 WECHAT_API_KEY 环境变量(来自 .env 文件)
- Python 3.9+
- 已在 wx.limyai.com 授权的微信公众号
脚本
位于 ~/.claude/skills/wechat-article-publisher/scripts/:
wechat_api.py
用于列出公众号和发布文章的微信 API 客户端:
# List authorized accounts
python wechat_api.py list-accounts
# Publish from markdown file
python wechat_api.py publish --appid <wechat_appid> --markdown /path/to/article.md
# Publish from HTML file (preserves formatting)
python wechat_api.py publish --appid <wechat_appid> --html /path/to/article.html
# Publish with custom options
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 密钥可用:
# Check if .env file exists and contains 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 | 微信 API 调用失败 |
| INTERNAL_ERROR | 服务器错误 |
重要规则
- 绝不自动发布——仅保存到草稿箱,由用户手动发布
- 先检查 API 密钥——如果未配置,立即失败
- 先列出账号——用户可能有多个账号
- 妥善处理错误——显示清晰的错误消息
- 保留原始内容——不要不必要地修改用户的 Markdown
支持的格式
Markdown 文件(.md)
- H1 标题(# )→ 文章标题
- H2/H3 标题(##、###)→ 章节标题
- 粗体(text)
- 斜体(text)
- 链接 text
- 引用块(> )
- 代码块(
...) - 列表(- 或 1.)
- 图片
→ 自动上传到微信
HTML 文件(.html)
<title>或<h1>→ 文章标题- 保留所有 HTML 格式(样式、表格等)
<img>标签 → 图片自动上传到 WeChat- 第一个
<p>→ 自动提取为摘要 - 支持内联样式和富文本格式
HTML 标题提取优先级:
<title>标签内容- 第一个
<h1>标签内容 - 若以上均不存在,则使用“Untitled”
HTML 内容提取:
- 如果存在
<body>,则使用 body 内容 - 否则,移除
<html>、<head>、<!DOCTYPE>,并使用剩余内容
文章类型
news(普通文章)
- 标准的 WeChat 文章格式
- 全面支持 Markdown/HTML
- 支持包含图片的富文本
newspic(小绿书/图文消息)
- 以图片为主的格式(类似 Instagram 帖子)
- 最多从内容中提取 20 张图片
- 文本内容限制为 1000 个字符
- 图片自动上传到 WeChat
示例流程
Markdown 文件
用户:“把 ~/articles/ai-tools.md 发布到微信公众号”
# Step 1: Verify API key
cat .env | grep WECHAT_API_KEY
# Step 2: List accounts
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py list-accounts
# Step 3: Publish (assuming single account with appid wx1234567890)
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid wx1234567890 \
--markdown ~/articles/ai-tools.md
# Step 4: Report
# "文章已成功发布到公众号草稿箱!请登录微信公众平台预览并发布。"
HTML 文件
用户:“把这个 HTML 文章发布到公众号:~/articles/newsletter.html”
# Step 1: Verify API key
cat .env | grep WECHAT_API_KEY
# Step 2: List accounts
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py list-accounts
# Step 3: Publish HTML (auto-detects format)
python ~/.claude/skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid wx1234567890 \
--html ~/articles/newsletter.html
# Step 4: Report
# "文章已成功发布到公众号草稿箱!HTML格式已保留。请登录微信公众平台预览并发布。"
错误处理
未找到 API Key
Error: WECHAT_API_KEY environment variable not set.
解决方案:请用户在 .env 文件中设置其 API key。
未找到账号
Error: ACCOUNT_NOT_FOUND - 公众号不存在或未授权
解决方案:请用户在 wx.limyai.com 上授权账号。
Token 已过期
Error: ACCOUNT_TOKEN_EXPIRED - 公众号授权已过期
解决方案:请用户在 wx.limyai.com 上重新授权。
WeChat API 错误
Error: WECHAT_API_ERROR - 微信接口调用失败
解决方案:可能是临时问题,请重试或查看 WeChat 服务状态。
最佳实践
为什么使用 API,而不是浏览器自动化?
- 可靠性:直接调用 API 比浏览器自动化更稳定
- 速度:无需启动浏览器、加载页面或进行 UI 交互
- 简洁性:只需一个命令即可发布
- 可移植性:只要系统支持 Python 即可运行(没有仅适用于 macOS 的依赖)
内容指南
- 图片:尽可能使用公开 URL;本地图片会被上传
- 标题:不超过 64 个字符
- 摘要:如果未提供,则自动从第一段提取
- 封面:如果未指定,Markdown 中的第一张图片将作为封面
工作流效率
Minimal workflow (1 command):
- list-accounts → get appid → publish → done
Full workflow (with verification):
1. Check .env → list accounts → confirm with user
2. Publish with options → report result
故障排除
问:如何获取 WECHAT_API_KEY?
答:在 wx.limyai.com 注册并授权你的 WeChat 账号,即可获取 API key。
问:可以发布到多个账号吗?
答:可以,使用 list-accounts 查看所有已授权账号,然后指定目标 --appid。
问:图片在 WeChat 中不显示怎么办?
答:确保图片 URL 可访问。本地图片会自动上传,但如果路径不正确,上传可能失败。
问:标题太长怎么办?
答:WeChat 将标题限制为 64 个字符。脚本会使用 H1 的前 64 个字符。
问:news 和 newspic 有什么区别?
答:news 是标准文章格式;newspic(小绿书)以图片为主,文本内容有限。
新手上路(用户不知道该输入什么时,走这里)
触发:/公众号发布 新手、“这个怎么用”“第一次用”“能干嘛”“带我走一遍”,
以及用户输入了技能名却没有给任何任务的时候。
这个模式的铁律:不假设、不索取。用户可能什么都没准备, 不要一上来就问他要文件、要 API key、要具体需求。按下面四步走:
一、先说清楚这是什么(三句话以内)
一句话:把 Markdown 文章直接发进公众号草稿箱,图片自动上传。 走的是微信官方接口,不是模拟点击,所以稳定。 发的是草稿,最终点「发表」的还是你。
二、给编号选项,让他按回车就能继续
不要问开放式问题(「你想做什么?」对新手是负担)。给 3 个选项加一个默认:
想先看哪个?(直接回车 = 1)
1. 先看看发出去长什么样(示例)
2. 把我的 Markdown 发成草稿
3. 先讲讲要准备什么
三、直接演示一遍,边做边解释
选完立刻做给他看,用示例数据,不需要他提供任何东西。 每做完一步,加一行「💡 刚才发生了什么」,一句话说明这步的意义。
四、毕业
演示完只问一个是非题:「要不要用你自己的文章真跑一遍?」
答是就进正常流程;答否就告诉他随时回来输 /公众号发布 新手。
关于前置条件:这个技能需要公众号的 API 凭据(写在 .env 里的 WECHAT_API_KEY)。 新手模式下不要提前索取——先用示例数据演示完,到第四步真跑的时候再引导他配置, 并说清楚在哪配、怎么拿。新手最容易在这一步流失。