内容提要
作者将 Hexo 文章发布到微信公众号的流程压缩为一条命令:自动选取最近改动的文章,补齐封面、作者、原文链接等 front-matter 默认值,将站内图片路径替换为绝对路径并把 webp 转为 png/jpg,再通过 stdin 交给命令行工具文颜完成排版渲染、图片上传和草稿创建。文中还介绍了获取 AppID 与 AppSecret、配置 IP 白名单、用 git 定位文章及踩坑经验,最终保留人工复核后再群发。
延伸解读
为什么选择命令行工具而非网页版
作者对比了多种工具后,最终选用文颜命令行版,核心原因是网页版仍需手动复制粘贴,无法解决“搬运”问题。文颜支持本地渲染、自定义主题和代码高亮,并能通过 stdin 读取内容,天然适合作为脚本的下游。这提示我们,在自动化流程中,选择支持管道输入的工具能大幅减少人工干预。
凭据获取与 IP 白名单的注意事项
获取 AppID 和 AppSecret 需管理员扫码,且 AppSecret 仅显示一次,重置会使旧密钥立即失效。配置 IP 白名单时,家用宽带 IP 可能变动,不配会报 40164 或 61004 错误。这些细节表明,凭据管理需谨慎,且动态 IP 环境需定期检查白名单,避免发布中断。
图片处理的顺序与格式转换
微信素材库不支持 webp,作者用 sharp 将 webp 转为 png 或 jpg,并强调必须先替换站内路径为绝对路径,再扫描转换,否则找不到文件。转换结果按路径和修改时间缓存,避免重复处理。这提醒我们,处理图片时需注意格式兼容性和操作顺序,利用缓存可提升效率。
自动化流程中的人工复核环节
作者将发布流程压缩为一条命令,自动完成文章选取、front-matter 补齐、图片处理和草稿创建,但最终保留人工复核后再群发。这种设计平衡了效率与风险控制,尤其适合内容需谨慎发布的场景。它表明,自动化并非完全取代人工,关键环节的确认仍不可或缺。
Q&A
如何把 Hexo 文章一键发布到微信公众号?
作者将流程压缩为一条命令 pnpm run pubmp,该命令自动选取最近改动的文章、补齐 front-matter 默认值、替换站内图片路径并转换 webp 格式,然后通过 stdin 交给文颜(wenyan-cli)完成排版、上传图片和创建草稿。
文颜(wenyan-cli)是什么?为什么选它?
文颜是一个命令行工具(npm 包名 @wenyan-md/cli),支持本地渲染、自定义主题和代码高亮,能调用微信素材接口上传图片并创建草稿,且支持从 stdin 读取内容,适合作为脚本的下游工具。
怎么获取微信公众号的 AppID 和 AppSecret?
AppID 可在微信开发者平台「我的业务」→「公众号」→「基础信息」查看,或公众平台后台「设置与开发」→「账号设置」→「注册信息」获取。AppSecret 需在 https://developers.weixin.qq.com/platform 用管理员微信扫码登录,进入公众号详情页的「基础信息」Tab,在「开发密钥」处启用或重置,重置后旧密钥立即失效。
为什么需要配置 IP 白名单?不配会怎样?
调用微信接口需要将服务器或本机的出口公网 IP 加入 API IP 白名单,否则会报 40164 invalid ip 错误,获取 token 时被拦则报 61004。白名单可在开发者平台或 mp 后台安全中心配置,家用宽带 IP 可能变化需重新配置。
发布前如何处理文章中的图片?
脚本会将正文中的站内绝对路径(如 /gallery/...)替换为磁盘绝对路径,因为文颜将其视为本地文件。同时,由于微信素材库不支持 webp,脚本会用 sharp 将 webp 转换为 png(有透明通道)或 jpg(其余),转换结果按路径和修改时间缓存。
脚本如何自动选取最近改动的文章?
脚本优先选取工作区中未提交的 source/_posts 下的 md 文件,取磁盘修改时间最新的;如果没有未提交的,则通过 git 查找最近一次改动过 source/_posts 下 md 的提交,再从涉及的文件中取最新的。
发布过程中有哪些常见的坑?
常见坑包括:文颜只有显式传 --app-id 时才读凭据文件,否则报未提供 AppID;草稿强制要求封面,正文无图时会失败;AppSecret 只显示一次,重置会使旧密钥失效;IP 白名单不配会报 40164 或 61004;webp 图片不被微信支持,需提前转换。