SuperAPI AI 工具集

wechat-article-formatter

写作与研究

查看项目

更新于 10-15 17:15

技能介绍

用途

WeChat Article Formatter & Publisher 用于把 Markdown 文章排版成微信公众号可直接使用的样式,并发布到公众号草稿箱。公众号编辑器本身不识别 Markdown,手动调格式耗时,该技能把排版与发布流程自动化,并支持更换主题样式。

主要能力

  • 读取本地 Markdown 文件(通常为文章目录下的 wechat.md)。
  • 上传本地图片到微信 CDN(media/uploadimg 接口),并把 Markdown 中的本地图片路径替换为微信 CDN URL。
  • 对远程图片(例如 https://i.ibb.co/...)先下载,再上传到微信 CDN。
  • 通过 bm.md 渲染服务把 Markdown 渲染为带样式的 HTML,支持自定义 CSS。
  • 通过微信官方 draft/add 接口发布到公众号草稿箱。
  • 通过 material/add_material 接口上传封面/缩略图并获得 thumb_media_id。
  • 从 promotion.md 提取摘要(## 文章摘要 段落,截断到约 60 个中文字符)。
  • 依据用户指定、品牌配置 author 字段或 品牌名称 字段解析作者名(优先顺序从前往后)。
  • 内置新手引导模式,触发词包括 /公众号排版 新手、「这个怎么用」「第一次用」「能干嘛」「带我走一遍」,以及只输入技能名而未给任务时。

使用方式

用户提供 Markdown 文件路径(例如文章目录中的 wechat.md)。工具会检测文章目录,查找 promotion.md(用于摘要)、_attachments/(本地图片),以及对话上下文中的品牌配置(用于作者名)。

凭据从 ~/.env 读取:WECHAT_APP_ID(公众号 AppID)、WECHAT_APP_SECRET(公众号 AppSecret)。若未找到,会提示用户提供并保存到 ~/.env。

获取 access token:

params = urlencode({ 'grant_type': 'client_credential', 'appid': WECHAT_APP_ID, 'secret': WECHAT_APP_SECRET })

GET https://api.weixin.qq.com/cgi-bin/token?{params}

若出现 40164 错误(IP 不在白名单),需在 mp.weixin.qq.com → 设置与开发 → 基本配置 → IP白名单 添加当前 IP。

上传内文图片使用 media/uploadimg(multipart/form-data,Body: media=@image_file,返回 {"url": "http://mmbiz.qpic.cn/..."})。封面/缩略图使用 material/add_material(type=image,返回 media_id 与 url)。所有图片必须在同一次会话中上传,不要复用旧的 CDN URL。

渲染使用 bm.md,读取 {{SKILL_DIR}}/styles/custom.css 作为 customCss。建议把 JSON 载荷写入临时文件并用 curl -d @file 提交,避免 shell 转义问题:

payload = json.dumps({ "markdown": md_content, "markdownStyle": "green-simple", "codeTheme": "kimbie-light", "customCss": css_content, "enableFootnoteLinks": True, "openLinksInNewWindow": True, "platform": "wechat" }, ensure_ascii=False)

写入 /tmp/bm-payload.json,然后:

curl -s -X POST https://bm.md/api/markdown/render \

-H "Content-Type: application/json" \

-d @/tmp/bm-payload.json

ensure_ascii=False 很关键,否则中文会变成 \uXXXX 转义序列。

发布到草稿使用微信官方接口:

draft_payload = json.dumps({ "articles": [{ "title": title, "author": author, "thumb_media_id": thumb_media_id, "content": html, "digest": digest, "need_open_comment": 1, "only_fans_can_comment": 0, "original_article_type": 1, "reward_wording": "喜欢这篇文章,请我喝杯咖啡", "creation_source_type": 1 }] }, ensure_ascii=False).encode('utf-8')

POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token={token}

适用场景

  • 需要把 Markdown 写作的文章排版并发布到微信公众号草稿箱。
  • 希望统一文章样式(自定义 CSS、主题、代码高亮)。
  • 文章包含本地或远程图片,需要上传到微信 CDN。
  • 需要自动声明原创、开启评论、开启赞赏、设置摘要与作者。

限制与注意事项

  • 必须使用微信官方 draft/add 接口,不要使用第三方发布 API(例如微绿 wechat-publish),否则内联 CSS 样式会被剥离。
  • 图片需在同一次会话内上传,旧的微信 CDN URL 可能过期。
  • 摘要需控制在约 60 个中文字符以内(微信限制 120 字节,过长会报 45004)。
  • 封面需先通过 material/add_material 上传以获得 thumb_media_id,否则可能报 40007。
  • Markdown 中的 H1 标题应移除,因为微信使用 title 字段显示自己的标题。
  • GitHub alerts(> [!NOTE])在微信中渲染异常,需转换为普通 > 引用块。
  • 依赖微信 AppID/AppSecret 凭据、bm.md 渲染服务(无需认证)以及 {{SKILL_DIR}}/styles/custom.css。
  • 若出现 40164 错误需配置 IP 白名单。

样式特性

custom CSS(styles/custom.css)提供:Optima/Microsoft YaHei 字体、绿色强调色 rgb(53, 179, 120)、H2 标题黑底白字、加粗文本绿色、引用块绿色左边框、响应式表格与交替行颜色、深色背景代码块。

bm.md 渲染参数:markdown(必填)、markdownStyle(默认 ayu-light,本技能使用 green-simple)、codeTheme(默认 kimbie-light)、customCss(作用于 #bm-md)、enableFootnoteLinks(默认 true)、openLinksInNewWindow(默认 true)、platform(html/wechat/zhihu/juejin,本技能使用 wechat)。可用样式包括:ayu-light、bauhaus、blueprint、botanical、green-simple、maximalism、neo-brutalism、newsprint、organic、playful-geometric、professional、retro、sketch、terminal。

新手引导

触发词为 /公众号排版 新手、「这个怎么用」「第一次用」「能干嘛」「带我走一遍」,或用户只输入技能名未给任务时。引导遵循「不假设、不索取」,不先问文件、API key 或具体需求,按四步走:先说清这是什么(三句话内);给编号选项(1. 先看看排出来长什么样(示例)/2. 排我的这篇 Markdown/3. 有哪些主题可以选,直接回车=1);直接演示一遍并逐步用「💡 刚才发生了什么」解释;最后只问一个是非题「要不要用你自己的文章真跑一遍?」答是进入正常流程,答否提示可随时输入 /公众号排版 新手 回来。