微信公众号文章排版和发布技能。
AppID(应用 ID) - 类似 你的 APPIDAppSecret(应用密钥) - 类似 你的 APPSECRET微信 API 要求配置服务器 IP 白名单:
常见 IP 白名单配置:
{
"ipWhitelist": ["你的公网 IP", "你的服务器 IP 2", "你的服务器 IP 1"]
}
在技能目录创建 config.json:
{
"appId": "你的 AppID",
"appSecret": "你的 AppSecret",
"ipWhitelist": ["你的公网 IP"]
}
⚠️ 安全提醒:
config.json 包含敏感信息,不要上传到 ClawHubconfig.example.json 作为示例.gitignore运行测试命令验证配置是否正确:
# 获取 token(成功会返回一串字符)
curl -s "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的 APPID&secret=你的 APPSECRET"
成功响应:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
失败响应:
{"errcode":40013,"errmsg":"invalid appid"}
问题现象:发布后文章内容显示为 这是文字 标签,而不是正常中文。
根本原因:
charset=utf-8✅ 正确解决方案(必须遵守!):
# ========== 第 1 步:获取最新 token(每次发布前都要重新获取!) ==========
TOKEN=$(curl -s "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET" | python3 -c "import sys,json; print(json.load(sys.stdin).get('access_token',''))")
# ========== 第 2 步:上传封面图 ==========
COVER=$(curl -s -X POST "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$TOKEN&type=image" -F "media=@/path/to/cover.jpg" | python3 -c "import sys,json; print(json.load(sys.stdin).get('media_id',''))")
# ========== 第 3 步:发布草稿(关键:-H "Content-Type: application/json; charset=utf-8") ==========
curl -s -X POST "https://api.weixin.qq.com/cgi-bin/draft/add?access_token=$TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d "{\"articles\":[{\"title\":\"标题\",\"content\":\"<p>中文内容</p>\",\"thumb_media_id\":\"$COVER\"}]}"
⚠️ 四个必须(缺一不可!):
charset=utf-8 - -H "Content-Type: application/json; charset=utf-8"🧪 测试命令(发布前先用这个验证编码):
curl -s -X POST "https://api.weixin.qq.com/cgi-bin/draft/add?access_token=$TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d "{\"articles\":[{\"title\":\"测试文字\",\"content\":\"<p>这是中文测试</p><p>能看到吗</p>\",\"thumb_media_id\":\"$COVER\"}]}"
❌ 错误做法(不要再犯!):
requests.post(url, json=data) 直接发布charset=utf-8# 使用 curl 命令发布(见上方「严重警告」章节的完整命令)
python3 scripts/upload_images.py /path/to/images/
适用于装修案例、实景展示等专业内容。
特点:
模板文件: assets/templates/professional.md
适用于快讯、通知等简单内容。
模板文件: assets/templates/simple.md
# 文章标题
<img src="封面图 URL">
---
## 空间 1
<img src="图片 URL">
说明文字
---
## 空间 2
...
python3 scripts/upload_images.py /path/to/images/
# 输出图片 URL 列表
将上传的图片 URL 替换文章中的占位符。
唯一推荐方式(curl 命令):
# 1. 获取 token
TOKEN=$(curl -s "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的 APPID&secret=你的 APPSECRET" | python3 -c "import sys,json; print(json.load(sys.stdin).get('access_token',''))")
# 2. 上传封面
COVER=$(curl -s -X POST "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$TOKEN&type=image" -F "media=@/path/to/cover.jpg" | python3 -c "import sys,json; print(json.load(sys.stdin).get('media_id',''))")
# 3. 发布(注意:-H "Content-Type: application/json; charset=utf-8")
curl -s -X POST "https://api.weixin.qq.com/cgi-bin/draft/add?access_token=$TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d "{\"articles\":[{\"title\":\"标题\",\"content\":\"<p>中文内容</p>\",\"thumb_media_id\":\"$COVER\"}]}"
❌ 禁止使用 Python 脚本直接发布(会导致乱码)
登录微信后台 → 草稿箱 → 检查 → 点发表
配置文件:config.json
{
"appId": "你的 AppID",
"appSecret": "你的 AppSecret",
"ipWhitelist": ["你的服务器 IP 1", "你的服务器 IP 2"]
}
现象:文章显示为 这是文字 标签
原因:编码格式不正确
解决方案:
-H "Content-Type: application/json; charset=utf-8"微信 API 未授权,无法直接发布。
解决方案: 使用草稿 API + 手动发表工作流。
图片未上传到微信素材库。
解决方案: 先用 upload_images.py 上传图片获取 URL。
Markdown 格式不正确。
解决方案: 使用提供的模板文件。
发布文章到微信草稿箱。
python3 scripts/publish_wechat.py <article.md> [options]
选项:
--template <name> 模板名称 (viral/professional/simple)
--cover-image <path> 封面图路径
--output <path> 输出 HTML 路径
⚠️ 注意:此脚本可能导致中文乱码,建议使用 curl 命令替代。
批量上传图片到微信素材库。
python3 scripts/upload_images.py <image_folder>
输出:
图片 URL JSON 文件
references/ 目录公司:[你的公司名称]
网站:[你的网站]
电话:[你的联系电话] / [你的联系电话]
地址:[你的地址]
时间:9:00-18:00(周一至周日)
-H "Content-Type: application/json; charset=utf-8"...
标签)以上 5 项全部打勾后才能正式发布!
共 1 个版本