大家猴,我是春长
当现有工具失灵,我是如何用最「笨」的方法解决实际问题的
背景:被逼上梁山的经历
事情是这样的。
之前一直用 Deno 环境的 wechat-auto-publish 来发布公众号文章,挺好的。但最近换到 OpenClaw 环境后傻眼了——Deno 跑不了。
好,那换一个。用 wechat-mp-publisher 吧,结果一看依赖:mcporter、curl、jq……一个都没有。
最崩溃的是,调用微信 API 时还遇到了乱码问题,封面图片是 WebP 格式微信不接受,文章摘要也得手动填……
有时候就是这样,看起来简单的事情,背后往往藏着无数坑。
问题分析:四个拦路虎
环境不兼容
| 原有工具 | 需要的运行环境 | 当前环境 |
|---|
| wechat-auto-publish | Deno | ❌ 没有 |
| wechat-mp-publisher | mcporter/curl/jq | ❌ 都没有 |
微信 API 乱码
直接用 curl 调用微信接口时,中文内容经常出现乱码。HTML 内容的编码处理是个技术活。
封面图片格式坑
MiniMax API 生成图片是 WebP 格式,但微信只支持 JPG/PNG。这就像去医院挂号,结果告诉你今天不看这个科——你得换。
摘要手动填写
每发一篇文章都要手动提炼摘要,麻烦不说,关键是容易写得像「说明文」,不吸引人。
解决方案:Python + urllib,它不香吗?
核心思路
既然各种花哨的工具都用不了,那就回到最原始的方式:用 Python 标准库 urllib 直接硬刚微信 API。
事实证明,标准库它真的香——不需要装任何额外依赖,有 Python 就能跑。
混合方案设计
| 功能 | 使用什么 | 为什么 |
|---|
| 微信 access_token | urllib | 标准库,无需安装 |
| 草稿箱发布 | urllib | 标准库,无需安装 |
| 封面上传 | urllib | 标准库,无需安装 |
| MiniMax 图片生成 | requests | JSON 处理更方便 |
| 图片下载 | requests | 流式下载更稳定 |
结论:以 urllib 为主(微信 API),requests 为辅(图片相关)。够用就好,不整花活。
公众号发布的「三座大山」
根据公众号发布规则,以下参数是必填的:
- 标题 —— 必须填写
- 作者 —— 必须填写
- 封面图片 —— 必须上传(否则无法保存)
- 摘要 —— 建议填写(用于消息推送展示)
架构设计:五步走战略
┌─────────────────────────────────────────────────────┐
│ python-wechat-publish │
├─────────────────────────────────────────────────────┤
│ 1. 读取 HTML 文件 │
│ ↓ │
│ 2. 提取标题、关键词、核心内容 │
│ ↓ │
│ 3. 自动生成摘要 (digest) │
│ ↓ │
│ 4. 调用 MiniMax API 生成封面图片 │
│ ↓ │
│ 5. ImageMagick 转换格式 (WebP → JPG) │
│ ↓ │
│ 6. 上传封面到微信素材库 │
│ ↓ │
│ 7. 调用草稿箱 API 发布文章 │
└─────────────────────────────────────────────────────┘
核心功能实现
标题自动提取
# 首先尝试读取同名 .md 文件
# 从 Markdown 第一行提取标题
# 如果没有 .md 文件,从 HTML 提取
简单来说,就是优先级:同名的 .md 文件 > 从 HTML 提取。兜底方案一定要有。
自动摘要生成
这是我觉得最实用的功能。
- 提取包含关键概念的句子
- 生成 120 字左右的摘要
- 核心:吸引用户点击阅读
与其绞尽脑汁手动写摘要,不如让 AI 帮你搞定。
智能封面 Prompt
提取关键词:AI、代码、成长、技术
分析文章主题
生成匹配的英文描述
你只需要告诉它文章是讲什么的,封面 Prompt 自动生成,图片自动生成。
图片格式转换
# ImageMagick convert 命令
# 自动检测 WebP 格式并转换
convert image.webp image.jpg
一个命令,解决格式问题。
使用方法
# 完整功能:自动摘要 + 自动封面
python publish.py \
--file article.html \
--title "文章标题" \
--author "你的名字" \
--auto-digest \
--auto-cover
| 参数 | 简写 | 说明 |
|---|
| --file | -f | HTML 文件路径 ✅ |
| --title | -t | 文章标题 ✅ |
| --author | -a | 作者名称 ✅ |
| --auto-digest | -d | 自动生成摘要 ✅ |
| --auto-cover | -c | 自动生成封面 ✅ |
所有参数都是必填的——因为公众号后台也是必填的。保持一致,体验更好。
技术细节
获取 access_token
GET https://api.weixin.qq.com/cgi-bin/token
?grant_type=client_credential
&appid=你的AppID
&secret=你的AppSecret
发布到草稿箱
POST https://api.weixin.qq.com/cgi-bin/draft/add
?access_token=ACCESS_TOKEN
上传封面图片
POST https://api.weixin.qq.com/cgi-bin/material/add_material
?access_token=TOKEN&type=image
MiniMax 图片生成
url = "https://api.minimax.chat/v1beta/images/generations"
payload = {
"model": "dall-e-3",
"prompt": "你的封面描述",
"size": "1024x1024"
}
经验总结
回头看这段开发历程,有几点体会:
- 环境适配:当现有工具不兼容时,直接用底层 API 是更灵活的方案。
- 渐进式开发:先实现核心功能,再逐步添加智能功能。
- 问题分解:复杂问题拆分为小问题,逐一解决。
- 混合方案:根据场景选择合适的工具,灵活搭配,不执着于某一技术栈。
- 敏感信息保护:所有文档中不要包含 AppID、AppSecret 等敏感信息。
最后说一句:技术方案没有最好,只有最合适。最小可行方案,往往是最务实的选择。
如果你也有类似的「工具失灵」经历,欢迎在评论区聊聊是怎么解决的 👇