微信公众号一键发布
概述
通过微信公众号官方 API(stable_token / 草稿箱 / 自由发布接口)实现:文档 → 排版文章 → 草稿箱 → 立即或定时发布。
- 支持输入:
.docx(推荐,自动转换排版)、.md、.html - 自动处理:标题识别、封面图(默认取文档第一张图)、正文图片上传换链、加粗/斜体/超链接/引用/列表/表格、内联样式适配微信
- 前置要求:已认证的公众号(已认证订阅号或服务号)+ AppID/AppSecret + 服务器出口 IP 加入公众号后台的 IP 白名单
快速开始
# 本机 Python(已安装 requests、python-docx)
PY="C:/Users/Administrator/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
SCRIPT="C:/Users/Administrator/.workbuddy/skills/wechat-oneclick-publish/scripts/wechat_publisher.py"
若上述 Python 路径不存在,任选一个装有 requests + python-docx 的 Python 3.10+。
第一步:初始化配置(一次性)
生成配置文件并填入用户的三个凭证:
"$PY" "$SCRIPT" init --appid wx1234567890 --appsecret <secret> --auth-id gh_xxxxxxxx
配置文件位于技能目录下 config/config.json,字段说明:
| 字段 | 必填 | 说明 |
|---|---|---|
appid |
是 | 公众号 AppID |
appsecret |
是 | 公众号 AppSecret |
auth_id |
可选 | 授权ID(公众号原始ID,gh_ 开头),用作作者署名 |
default_author |
可选 | 默认作者署名(优先于 auth_id) |
title_prefix |
可选 | 标题前缀,如「志荣原创丨」,自动拼接 |
footer_html |
可选 | 文末固定追加 HTML(如购书卡片) |
digest_len |
可选 | 自动摘要长度,默认 54 |
安全规则:绝不在对话中回显 appsecret。写入配置后只报告"已配置"。
第二步:验证凭证
"$PY" "$SCRIPT" check
常见报错处理:
- 40164 invalid ip:把报错中显示的 IP 加入 mp.weixin.qq.com → 设置与开发 → 基本配置 → IP白名单
- 40001:AppSecret 错误或已重置
- 48001:该公众号未认证,无草稿/发布 API 权限
第三步:文档入草稿箱
"$PY" "$SCRIPT" draft "D:/文章/某文章.docx"
可选参数:--title(默认取文档首个标题并自动加 title_prefix)、--author、--digest、--cover 图片路径(默认用文档第一张图)、--source-url、--footer-file 文末.html、--out-html 预览.html(导出转换结果供人工检查)。
成功后返回 media_id,同时打印下一步命令。
建议流程:先加 --out-html 导出预览给用户确认,再入库。
第四步:发布 / 定时发送
# 立即发布
"$PY" "$SCRIPT" publish <media_id>
# 定时发送(进程需保持存活)
"$PY" "$SCRIPT" publish <media_id> --at "2026-09-01 08:00"
定时发送的推荐做法:优先用 WorkBuddy 自动化任务(automation_update 工具)调度,而非脚本的 --at 长驻等待。示例:用户说"明早 8 点发送"时,创建一次性自动化,prompt 为在指定时间执行 publish 命令并回报结果。这样关闭会话也不会丢任务。
其他命令
"$PY" "$SCRIPT" list # 查看草稿箱(拿 media_id)
"$PY" "$SCRIPT" delete <media_id>
"$PY" "$SCRIPT" status <publish_id> # 查询发布结果
典型工作流(用户说"把这篇文章发到公众号")
- 检查
config/config.json是否已配置(未配置则向用户索要 AppID/AppSecret/授权ID,执行 init + check) - 运行
draft(带--out-html),把预览关键信息(标题/摘要/封面来源)报告给用户 - 用户确认后:
- "直接发" → 执行publish
- "X 点发" → 创建 WorkBuddy 一次性自动化调度publish,或后台运行--at - 发布后将 publish_id 与结果告诉用户
限制与注意
- 草稿接口要求封面图:文档无图时必须
--cover提供,否则会报错 - 免费发布接口有频率限制;群发(每天条数)规则以公众号平台为准
freepublish为全量发布(对全部粉丝可见);如用户需要"群发+分组",需在公众平台后台操作- IP 白名单变动、AppSecret 重置后需重新
check - 配置文件含密钥,不得提交到任何公开仓库或展示完整内容