Node.js + marked:微信 API 返回的 JSON 含特殊字符,Python json.loads() 解析失败率高(报错 Invalid \uXXXX escape),Node.js V8 原生 JSON 解析稳定可靠。
Python 版本已废弃删除(scripts/wx-mp/ 目录下仅保留 Node.js)。
text
用户提供 Markdown 文章(含 YAML frontmatter)
↓
自动去除 frontmatter(re.sub 去掉 --- 之间的内容)
↓
marked.parse() → HTML(gfm 模式)
↓
applyInlineStyles() → 内联 style
↓
上传封面图(≤64KB)
↓
创建草稿 → 手动发布(或 API 发布)
bash
cd ~/.openclaw/workspace/skills/wx-mp-publish/scripts
node wx-publish.js draft <文章.md> \
--title "标题(≤64字符)" \
[--thumb <封面图路径>]
node wx-publish.js publish <文章.md> \
--title "标题" \
[--thumb <封面图路径>]
bash
node wx-publish.js drafts # 列出草稿
node wx-publish.js del <id> # 删除草稿
node wx-publish.js status # 查看配额
创建草稿后,还需在公众号后台手动设置以下选项:
设置项位置说明🤖 AI辅助生成标注文章开头或结尾必须标注「本文包含AI辅助内容」✅ 声明原创编辑框下方原创标签按钮💰 打开赞赏文章底部赞赏按钮开关**✍️ 作者文章底部填写"你的名字"⏰ 定时群发**发布设置可选,但订阅号每月只4次,要节省使用
后台路径: 内容与创作 → 草稿箱 → 找到草稿 → 编辑 → 发布
订阅号(审核中):只能创建草稿, publish 命令会报 [48001] api unauthorized
服务号:可直接API发布
定时群发API需要服务号权限
Python json.loads() 对微信 API 返回的某些 JSON 失败( Invalid \uXXXX escape),Node.js 无此问题。
微信文章不需要 frontmatter,若不去除会显示为正文乱码。
wx-publish.js 内置自动去除: content.replace(/^---\n[\s\S]*?\n---\n/, '')
Python markdown 库的 nl2br 扩展把换行符变成裸 <br>,微信编辑器无法正确渲染。正确做法是 paragraphs 自然闭合。
错误: [48001] api unauthorized
订阅号(审核中)只能创建草稿,需手动在公众号后台发布。 后台路径: 内容与创作 → 草稿箱 → 找到草稿 → 发布
≤64KB。建议尺寸 900×383 像素(2.35:1)。
⚠️ 每次写文章前必读
写文章涉及外部产品/工具时, 必须:
~/workspace/docs/product-facts.md 确认产品事实web_search 主动搜索核实涉及的关键产品:
触发条件: 文章中出现任何不熟悉的概念、产品、技术名词,而 product-facts.md 里没有记载。
执行流程:
web_search 搜索该概念,获取权威来源~/workspace/docs/product-facts.md事实分类标准(存入 facts 文档的分类标签):
分类标签包含内容示例[产品类]产品名称、厂商、定位、界面形态Claude Code是Anthropic的产品[技术类]技术名词、协议、架构术语MCP、Agent架构、Context管理[事件类]重大发布、泄露事件、行业动态Claude Code源码泄露事件[数据类]用户量、stars数、版本号、价格GitHub 68k+ stars[对比类]多个产品的横向对比结论OpenCode vs Claude Code的差异
记录格式(追加到 product-facts.md 末尾):
markdown
## [YYYY-MM-DD] 新增事实
### [产品类] 产品名称
- **事实内容**:...
- **来源**:URL
- **核实日期**:YYYY-MM-DD
自动分类规则:
[产品类] 或 [技术类][事件类][对比类][数据类]示例场景:
文章里要提"Aider",但 facts 文档里没有 → 立刻 web_search → 确认为开源AI编程CLI工具 → 追加到
[工具类]或新建[产品类]→ 继续写文章
禁止 在文章正文中出现:
应该 用:
—— 或空行分隔text
> 字数:约XXXX字 | 阅读时间:X分钟
> **"金句内容"**
---
正文(自然分段,不要编号)
如果需要加"中国平替"等提示,直接在正文末尾加一段话即可,不要标注"篇末提示"。
提到自己的项目时:
1. 项目名称保护
2. Google Cloud Code ≠ Claude Code
3. "Cloud Code" vs "Claude Code" 拼写
4. OpenClaw vs OpenCode 对比关系
5. 文章编号规则
6. 封面图规格
convert 原图.png -resize 900x383! -quality 75 输出.jpg文章运营数据记录在 ~/workspace/memory/articles/article-tracker.json。
可获取的数据(每日自动更新):
需手动更新的数据(用户从后台查看后告知):
更新流程:
查运营数据(不用调用API):
直接查看 memory/articles/article-tracker.json,包含:
text
cd scripts/
npm install marked
text
wx-mp-publish/
├── SKILL.md # 本文件
├── references/
│ └── best-practices.md # 详细文档
└── scripts/
├── wx-publish.js # Node.js 发布脚本(核心)
├── wx-api.js # 备用 API 工具
├── package.json # npm 依赖
└── node_modules/ # npm 包