Back to skills
SKILL.md
Wechat Article
BSecurity微信公众号推文——写稿、排版成公众号兼容 HTML、上传封面并推进草稿箱
- 262 stars
- 0 votes
- 0 copies
- 1 view
- Added September 26, 2026
Works with
Security analysis
88/100- Uses curl or wget to download content
- Installs packages at runtime which could introduce malicious dependencies
Pro scans all 7 files and shows the line behind each finding
npx -y skills add CatCatUncle/openworkbuddy --skill wechat-article --agent claude-codeAre you the author of Wechat Article?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/catcatuncle-wechat-article)---
name: wechat-article
description: 微信公众号推文——写稿、排版成公众号兼容 HTML、上传封面并推进草稿箱
---
# 微信公众号推文技能
## 适用场景
写公众号文章、把已有 Markdown 排版成公众号样式、把成稿推进草稿箱等人工确认后群发。
## 这个技能解决的核心问题
微信编辑器有三条硬约束,直接贴 Markdown 或普通 HTML 一定会散架:
1. **不认 `<style>` 标签和 class**,样式必须写成 `style="..."` 内联在每个标签上
2. **段落间距要显式给 margin**,否则粘进去挤成一坨
3. **不支持 CSS 变量、伪元素、复杂 flex/grid**,老写法最稳
`scripts/format.py` 就是干这件事的,不要自己手写内联样式 HTML。
## 三步流程
### 第 1 步:写稿(Markdown)
先把内容写成 `.md` 文件放进工作目录,带 frontmatter:
```markdown
---
title: 标题党一点但别骗人
author: 你的署名
---
## 小标题
正文……
```
写稿要点(公众号和普通文章不一样的地方):
- **前 3 行决定生死**:手机上只露出标题 + 前两行,必须在这里把「这篇讲什么、跟你有什么关系」说完
- **一段不超过 3 行**,手机屏窄,长段落直接劝退;多用空行
- **小标题每 300-500 字来一个**,让人能扫读
- 结论前置,别学论文先铺垫五百字
- 少用形容词,多写具体的事、具体的数字、具体的截图
- 涉及事实、数据、人名、时间的,`web_search` 查证过再写,**不许编**
### 第 2 步:排版
```bash
python3 skills/wechat-article/scripts/format.py \
--input 文章.md --theme newspaper --out 文章.html
```
选主题(`--list-themes` 看全部):
| 主题 | 长相 | 用在哪 |
|---|---|---|
| `newspaper` | 报刊衬线、暗红标题线 | 长文、深度稿、观点文 |
| `minimal` | 极简黑白 | 拿不准就用这个,不会出错 |
| `tech` | 科技深蓝、深色代码块 | 产品/技术/AI |
| `warm` | 暖调琥珀 | 生活、随笔、带货 |
排完 `read_file` 读回来自查:标签闭合、没有截断、`style="` 里没有多余的双引号。
想让用户看长相就用**预览**打开这个 HTML(`html-page` 技能里的「本地部署预览」也能用)。
**手动发的话到这步就够了**:浏览器打开 HTML → 全选复制 → 粘进公众号编辑器,样式会带过去。
### 第 3 步:封面
**封面默认走 `generate_image` 生图,不是排一版 HTML 再截图。**
公众号的封面是这篇文章在信息流里唯一的门面,它要跟十几条标题抢那一眼。
排版截图出来的封面(大字 + 色块 + 一条装饰线)在电脑上看着挺整齐,
缩到手机信息流里就是一张平的、谁也不会停下来看的图。
写 prompt 按这四段来,缺哪段都会生出一张「能用但没人看」的图:
| 段 | 写什么 | 例 |
|---|---|---|
| 主体 | 一个**具体的、夸张到有戏剧性**的画面,不是抽象概念 | 一只戴着安全帽的橘猫从碎裂的屏幕里冲出来 |
| 风格 | 指名道姓的美术风格 | 潮玩盲盒质感、3D 渲染、C4D、亚克力透明材质 |
| 光与色 | 光从哪来、主色是什么 | 强逆光、霓虹青紫撞橙、边缘光勾轮廓 |
| 构图 | 主体占多大、留白在哪 | 主体居中偏左占画面 2/3,右侧留空给标题压字 |
再加三条硬要求:
- **别让模型写标题**。公众号自己会在图上叠标题,图里再有一行大字就是两层字打架。
真要图上带字,先生一张看看这个模型的中文写不写得对(见 `generate_image` 的说明),糊了就别硬上。
- **尺寸**:大图封面 `900x383`,方图 `1:1`(`800x800` 够用)。jpg/png,小于 10MB。
两种都交一份最省事——公众号后台两处都要用。
- **一次生三张不同方向**(比如「炸裂冲出」「静物高级」「人物特写」),摆出来让用户挑。
挑的时候用 `ask_user`,并且**把那三张图的对比页写成一个文件、在问题里点名它**——
网页端会自动把它摊到右边,用户不用去一堆文件里翻。
反面例子(这几种一律别交):纯色块 + 居中大字;渐变背景 + 一个图标;
截一张网页当封面;用 SVG 手画一个"插画"冒充生图。
### 第 4 步:推草稿箱(可选,需要凭据)
```bash
# 先验一下凭据和出口 IP,别直接推
python3 skills/wechat-article/scripts/publish.py --check
python3 skills/wechat-article/scripts/publish.py \
--html 文章.html --title "标题" --cover 封面.jpg --author "你的署名"
```
- 凭据:`~/.openworkbuddy/wechat.json`(`{"appid": "...", "secret": "..."}`,**别提交进仓库**),
或环境变量 `WECHAT_APPID` / `WECHAT_SECRET`——AI 跑的命令只拿系统基础变量,这两个**都**拿不到,
两个名字都要写进 设置 → 安全 →「命令能看到的环境变量」;`WECHAT_SECRET` 像密钥,这台机器只有一个账号时才给。
多人共用的机器用上面那个 wechat.json
- **脚本只推草稿,永远不群发**。发布是用户在后台自己点的,我们不替他按下不可逆的按钮。
- 正文里的图片必须先传成公众号自己的域名,外链图会被吞掉:
`python3 scripts/publish.py --upload-image 图.png` 拿到 URL 再写进 Markdown。
- 封面用上一步生的那张,`--cover` 指过去就行。
## 已知的坑(踩过,写在这儿省得再踩一遍)
### errcode 40164 = IP 白名单(最常见,也最容易误判成"密钥错了")
公众号后台给 access_token 接口配了 IP 白名单。**家庭宽带是动态 IP,隔几天就变**,
所以昨天还能跑的脚本今天全线 40164。两条出路:
- **A(推荐)走固定 IP 的服务器出网**:
```bash
ssh -fN -D 1080 root@你的固定IP服务器
export HTTPS_PROXY=socks5h://127.0.0.1:1080 ALL_PROXY=socks5h://127.0.0.1:1080
ALL_PROXY=socks5h://127.0.0.1:1080 curl -s https://api.ipify.org # 确认出口 IP 变了
```
注意 `ALL_PROXY` 只有装了 `requests`(`pip install requests[socks]`)才生效,
脚本没有 requests 时会退回标准库直连,SOCKS 就不走了。
- **B 去后台改白名单**:改完**必须让管理员扫码确认、看到「保存成功」**,
只点保存不扫码是静默不生效的——这一点后台不会提示你。
### 其他
- `access_token` 有效期 7200 秒且日调用次数有限,脚本已经缓存到 `~/.openworkbuddy/wechat_token.json`,
**别反复重取**,会撞 45009 超频。
- 标题限 64 字,摘要不填公众号会自动截前 54 字。
- 代码块在手机上会横向滚动,长代码尽量截图或精简到 60 字符以内一行。
## 红线
- **不群发**,只推草稿箱,发布权永远在用户手里。
- **不编事实**:数据、时间、人名、引用必须是真查到的;查不到就写「未查到公开信息」。
- **凭据不外泄**:不要把 AppSecret 打印在聊天里、写进成果文件、或提交进仓库。
## 质量标准
- 手机宽度下段落不挤、标题层级清楚、没有横向滚动
- 封面是生成出来的画面,不是排版截图;缩到手机信息流那么小仍然抓得住眼睛
- 前 3 行就说清这篇讲什么
- 所有事实性内容都有出处
- 生成的 HTML 粘进公众号编辑器后长相不变形
Files in this skill
- scripts/format.py
- scripts/publish.py
- skill.md
- themes/minimal.json
- themes/newspaper.json
- themes/tech.json
- themes/warm.json
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.