mcpField
W
wechat-article-publisher

wechat-article-publisher

github.com/iamzifei营销与增长1572.6k 次安装11 周前更新
代码仓库

关于 wechat-article-publisher

用于将 Markdown 或 HTML 文章转换并提交到微信公众号草稿箱的发布技能,面向公众号运营者。它通过 API 管理授权账号、转换内容格式并创建草稿,发布仍需人工完成。

主要功能

  1. 01通过 API 查询授权账号
  2. 02将 Markdown 转换后提交为草稿
  3. 03保留 HTML 内容格式
  4. 04支持图文模式文章
  5. 05发布前检查 API 密钥

适用场景

  1. 01将 Markdown 文章存入公众号草稿箱
  2. 02把 HTML 通讯稿提交为草稿
  3. 03在多个授权公众号中选择目标账号
  4. 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 实现可靠、快速的发布。

  1. 从环境中加载 WECHAT_API_KEY
  2. 列出可用的微信公众号(如果用户尚未指定)
  3. 检测文件格式(Markdown 或 HTML)并进行相应解析
  4. 调用发布 API,在微信中创建草稿
  5. 报告成功并提供草稿详情

支持的文件格式:

  • .md 文件 → 按 Markdown 解析,由微信 API 转换
  • .html 文件 → 以 HTML 发送,保留格式

分步指南

第 1 步:检查 API 密钥

执行任何操作前,确认 API 密钥可用:

# Check if .env file exists and contains WECHAT_API_KEY
cat .env | grep WECHAT_API_KEY

如果未设置,请提醒用户:

  1. 将 .env.example 复制为 .env
  2. 设置其 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

参数:

参数类型必填说明
wechatAppidstring是微信 AppID
titlestring是文章标题(最多 64 个字符)
contentstring是文章内容(Markdown/HTML)
summarystring否文章摘要(最多 120 个字符)
coverImagestring否封面图片 URL
authorstring否作者姓名
contentFormatstring否'markdown'(默认)或 'html'
articleTypestring否'news'(默认)或 'newspic'
错误代码
代码说明
API_KEY_MISSING未提供 API 密钥
API_KEY_INVALIDAPI 密钥无效
ACCOUNT_NOT_FOUND未找到账号或无权访问
ACCOUNT_TOKEN_EXPIRED账号授权已过期
INVALID_PARAMETER参数无效
WECHAT_API_ERROR微信 API 调用失败
INTERNAL_ERROR服务器错误

重要规则

  1. 绝不自动发布——仅保存到草稿箱,由用户手动发布
  2. 先检查 API 密钥——如果未配置,立即失败
  3. 先列出账号——用户可能有多个账号
  4. 妥善处理错误——显示清晰的错误消息
  5. 保留原始内容——不要不必要地修改用户的 Markdown

支持的格式

Markdown 文件(.md)
  • H1 标题(# )→ 文章标题
  • H2/H3 标题(##、###)→ 章节标题
  • 粗体(text)
  • 斜体(text)
  • 链接 text
  • 引用块(> )
  • 代码块(...)
  • 列表(- 或 1.)
  • 图片 alt → 自动上传到微信
HTML 文件(.html)
  • <title> 或 <h1> → 文章标题
  • 保留所有 HTML 格式(样式、表格等)
  • <img> 标签 → 图片自动上传到 WeChat
  • 第一个 <p> → 自动提取为摘要
  • 支持内联样式和富文本格式

HTML 标题提取优先级:

  1. <title> 标签内容
  2. 第一个 <h1> 标签内容
  3. 若以上均不存在,则使用“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,而不是浏览器自动化?
  1. 可靠性:直接调用 API 比浏览器自动化更稳定
  2. 速度:无需启动浏览器、加载页面或进行 UI 交互
  3. 简洁性:只需一个命令即可发布
  4. 可移植性:只要系统支持 Python 即可运行(没有仅适用于 macOS 的依赖)
内容指南
  1. 图片:尽可能使用公开 URL;本地图片会被上传
  2. 标题:不超过 64 个字符
  3. 摘要:如果未提供,则自动从第一段提取
  4. 封面:如果未指定,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)。 新手模式下不要提前索取——先用示例数据演示完,到第四步真跑的时候再引导他配置, 并说清楚在哪配、怎么拿。新手最容易在这一步流失。

评论

支持 Markdown