Install
openclaw skills install @onceyoungs/wx-mp-push自动化微信公众号文章发布,通过 API 创建和管理文章草稿,支持 Markdown 和 HTML 两种输入格式,自动 MD→HTML 转换,支持封面图和正文图片自动上传。用于:发布文章到公众号、创建内容草稿、自动化内容工作流、或设置定时发布系统。
openclaw skills install @onceyoungs/wx-mp-push自动化工具,支持通过 API 发布文章到微信公众号。支持 Markdown 和 HTML 两种输入格式,内置 MD→微信HTML 转换器,包含自动 Access Token 管理、多账号支持、封面图和正文图片自动上传、图片 URL 替换和草稿创建功能。
用户需要:
当用户请求发布到微信时,引导他们完成:
config.example.json 为 config.jsonconfig.json 填入 AppID 和 AppSecretpip install httpx引导用户:
直接发布:
定时发布:
内容格式化:
图片处理:
智能检测:
脚本会自动扫描 HTML 内容中的 <img> 标签:
示例 HTML:
<section class="article-content">
<p>这是第一段内容。</p>
<img src="./images/photo1.jpg" />
<!-- ✅ 会自动上传 -->
<p>第二段内容...</p>
<img src="https://example.com/pic.png" />
<!-- ⏭️ 跳过,已是 URL -->
<img src="local.png" />
<!-- ✅ 会自动上传 -->
</section>
执行后自动变成:
<section class="article-content">
<p>这是第一段内容。</p>
<img src="https://mmbiz.qpic.cn/xxx1/..." />
<p>第二段内容...</p>
<img src="https://mmbiz.qpic.cn/xxxx" />
<img src="https://mmbiz.qpic.cn/xxx2/..." />
</section>
方法 1:从 Markdown 文件发布(推荐)
# 直接发布 .md 文件,自动转 HTML + 上传所有图片
python publish_article.py "文章标题" article.md --from-md --thumb cover.jpg
# 指定图片目录和作者
python publish_article.py "文章标题" article.md --from-md --thumb cover.jpg --content-dir ./images --author "张三"
# 直接传入 Markdown 字符串
python publish_article.py "文章标题" "# Hello **World**" --from-md
方法 2:从 HTML 文件发布
python publish_article.py "文章标题" article.html --from-file --thumb cover.jpg --content-dir ./images
方法 3:直接传入 HTML 内容
python publish_article.py "标题" "<h1>Hello</h1><p>World</p>"
方法 2:通过 OpenClaw Cron
创建 cron 任务触发脚本执行:
python scripts/publish_article.py "定时文章" "<HTML内容>" \
--config config.json \
--thumb cover.jpg \
--content-dir ./images
方法 3:先生成,再发布
主要发布脚本位于 scripts/:
选择版本的考虑:
config.json 支持多个微信公众号账号:
{
"wechat": {
"defaultAccount": "account1",
"accounts": {
"account1": {
"name": "账号名称",
"appId": "your_app_id",
"appSecret": "your_app_secret",
"type": "subscription",
"enabled": true
},
"account2": { ... }
},
"apiBaseUrl": "https://api.weixin.qq.com",
"tokenCacheDir": "./.tokens"
}
}
关键字段:
appId: 微信 App IDappSecret: 微信 App Secret(注意安全保管)type: "subscription"(订阅号)或 "service"(服务号)enabled: true/false 启用或禁用账号1. 封面图单独设置:
python publish_article.py "标题" "内容" --thumb cover.jpg
2. 正文图片自动上传: 只需在 HTML 中使用本地路径,脚本自动处理:
<p>段落</p>
<img src="./img/photo.jpg" />
3. 文字内容 + 多张图片:
<h1>我的文章</h1>
<p>开头内容...</p>
<img src="header.jpg" />
<p>中间内容...</p>
<img src="diagram.png" />
<p>结尾内容...</p>
<img src="footer.jpg" />
相对路径(推荐):
--content-dir 指定基础目录<img src="photo.jpg" />、<img src="./images/pic.png" />绝对路径:
<img src="/Users/name/Pictures/photo.jpg" />外部 URL:
<img src="https://example.com/img.jpg" />微信需要特定的 HTML 格式:
基本结构:
<section class="article-content">
<p>段落内容...</p>
<h2>章节标题</h2>
<p>更多内容...</p>
<img src="local-img.jpg" />
</section>
重要要求:
<section class="article-content"> 包裹内容<br/> 这样的自闭合标签)直接发布 Markdown 文件,无需手动转换 HTML!
脚本内置 MD→微信HTML 转换器,使用 --from-md 参数即可:
python publish_article.py "文章标题" article.md --from-md --thumb cover.jpg
| 语法 | 转换效果 |
| ---------------- | ---------------------------------------------------- | --- | --- | ------------------ |
| # ~ ###### | 标题(h1 带下划线装饰,h2 带左边框) |
| **加粗** | <strong>加粗</strong> |
| *斜体* | <em>斜体</em> |
| ~~删除线~~ | <del>删除线</del> |
|  | 图片(保留所有图片,URL 直接使用,本地路径自动上传) |
| [text](url) | 链接 |
| - 列表项 | 无序列表 |
| 1. 列表项 | 有序列表 |
| > 引用 | 带左边框的引用块 |
| --- | 分割线 |
| 表格 ( | --- | --- |) | 带边框的 HTML 表格 |
| `行内代码` | 灰色背景代码样式 |
| 代码块 | 带背景的代码块 |
https://...):直接保留在 HTML 中./img/photo.jpg):自动上传到微信素材库并替换 URL--from-md 时:自动将 --content-dir 设为 .md 文件所在目录# 最简单的用法
python publish_article.py "我的文章" article.md --from-md
# 完整参数
python publish_article.py "文章标题" article.md \
--from-md \
--thumb cover.jpg \
--content-dir ./images \
--author "作者名" \
--config config.json
常见错误和解决方案:
| 错误码 | 原因 | 解决方案 |
|---|---|---|
| 40001 | AppID/AppSecret 无效 | 检查 config.json 中的凭证 |
| 40004 | 不支持的媒体类型 | 检查图片格式,封面图只支持 JPG/PNG,正文支持 JPG/PNG/BMP/GIF |
| 40005 | 不支持的文件类型 | 确认上传的是图片文件 |
| 40164 | IP 未在白名单中 | 将服务器 IP 添加到微信白名单 |
| 41005 | 媒体文件为空 | 检查图片文件是否损坏 |
| 45009 | API 调用频率超限 | 等待或降低频率 |
| Token 过期 | 缓存问题 | 删除 .tokens/ 文件夹重试 |
| 图片上传失败 | 文件过大 | 封面图<64MB,正文图<2MB |
| 图片路径不存在 | 找不到文件 | 检查路径是否正确,使用 --content-dir 指定目录 |
调试提示:
--content-dir 设置重要安全实践:
.tokens/ 目录设置安全权限集成选项:
cron 工具安排定期文章发布message 工具发送成功/失败通知每周定时发布的 Cron 任务示例:
{
"name": "每周微信文章",
"schedule": {
"kind": "cron",
"expr": "0 9 * * 5",
"tz": "Asia/Shanghai"
},
"payload": {
"kind": "systemEvent",
"text": "trigger_wechat_publish"
}
}
当收到系统事件时,Agent 会执行发布脚本。
当前支持:
--from-md)未来扩展: 后续版本可考虑添加: