# wechat-article-maker > 智能创作并发布微信公众号文章。支持内容理解、链接分析、Markdown转换、图片清洗、样式处理和一键发布。当用户提到"创作公众号文章"、"发布文章链接"、"生成微信文章"、"post to wechat"时使用。 - Author: root - Repository: alpha-hecoding/awesome-skills - Version: 20260209164906 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-09 - Source: https://github.com/alpha-hecoding/awesome-skills - Web: https://mule.run/skillshub/@@alpha-hecoding/awesome-skills~wechat-article-maker:20260209164906 --- --- name: wechat-article-maker description: 智能创作并发布微信公众号文章。支持内容理解、链接分析、Markdown转换、图片清洗、样式处理和一键发布。当用户提到"创作公众号文章"、"发布文章链接"、"生成微信文章"、"post to wechat"时使用。 --- # 微信公众号文章创作与发布 ## 语言 **匹配用户语言**:使用用户所用的语言进行回应。用户用中文则用中文回应,用英文则用英文回应。 ## 脚本目录 **Agent 执行**:确定此 SKILL.md 目录为 `SKILL_DIR`,然后使用 `${SKILL_DIR}/scripts/.ts`。 | 脚本 | 用途 | |------|------| | `scripts/wechat-api.ts` | 文章发布(API 方式,推荐) | | `scripts/wechat-article.ts` | 文章发布(浏览器方式) | | `scripts/wechat-browser.ts` | 图文发布(图文消息) | | `scripts/generate-cover.ts` | 生成封面图(无系统依赖) | | `scripts/md-to-wechat.ts` | Markdown 转 HTML | | `scripts/md/render.ts` | Markdown 渲染引擎(支持主题) | | `scripts/install-deps.sh` | 依赖安装脚本 | ## 依赖安装(首次使用) 本技能需要安装 Node.js 依赖包。首次使用前请执行: ```bash cd ${SKILL_DIR}/scripts ./install-deps.sh ``` 或手动安装: ```bash cd ${SKILL_DIR}/scripts npm install # 或使用 bun(更快) bun install ``` ### 依赖说明 **必需依赖**(自动安装): - `markdown-it` - Markdown 渲染引擎 - `juice` - CSS 内联转换 **可选依赖**(用于封面图生成): - `@napi-rs/canvas` - 高性能图片生成(推荐) - `sharp` - 图片处理库 **降级策略**:如果可选依赖未安装,`generate-cover.ts` 会自动生成 SVG 格式的封面图(微信也支持)。 ## 功能概述 本技能提供完整的微信公众号文章工作流: 1. **内容创作模式**:输入文本内容,智能理解、生成文章 2. **链接发布模式**:输入文章链接,下载、处理并发布 3. **Markdown 转换**:内置 Markdown 到 HTML 转换,支持多主题 4. **图片处理**:自动下载、清洗元数据、符合微信规范 5. **样式转换**:自动将 CSS 转为内联样式 6. **一键发布**:支持 API(快速)和浏览器(可视化)两种方式 ## 偏好设置(EXTEND.md) 使用 Bash 检查 EXTEND.md 存在性(优先级顺序): ```bash # 检查项目级别 test -f .awesome-skills/wechat-article-maker/EXTEND.md && echo "project" # 检查用户级别(跨平台:$HOME 在 macOS/Linux/WSL 上都可用) test -f "$HOME/.awesome-skills/wechat-article-maker/EXTEND.md" && echo "user" ``` ┌────────────────────────────────────────────────────────────┬───────────────────┐ │ 路径 │ 位置 │ ├────────────────────────────────────────────────────────────┼───────────────────┤ │ .awesome-skills/wechat-article-maker/EXTEND.md │ 项目目录 │ ├────────────────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.awesome-skills/wechat-article-maker/EXTEND.md │ 用户主目录 │ └────────────────────────────────────────────────────────────┴───────────────────┘ ┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ 结果 │ 操作 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 找到 │ 读取、解析、应用设置 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 未找到 │ 使用默认值 │ └───────────┴───────────────────────────────────────────────────────────────────────────┘ **EXTEND.md 支持**:默认主题 | 默认发布方法(api/browser)| 默认作者 | Chrome 配置文件路径 ## 工作流程选择 根据用户输入自动选择工作流程: | 输入类型 | 识别方式 | 工作流程 | |---------|---------|---------| | 纯文本内容 | 不包含链接 | 内容创作流程 | | 文本 + 参考链接 | 包含链接,但主体是文本描述 | 内容创作流程(含链接分析)| | 单个文章链接 | 仅包含 URL,或明确说"发布这篇文章" | 链接发布流程 | | Markdown 文件路径 | 以 `.md` 结尾的文件路径 | Markdown 转换发布流程 | | HTML 文件路径 | 以 `.html` 结尾的文件路径 | 直接发布流程 | --- ## 流程 1: 内容创作与发布 当用户输入文本内容(可选包含参考链接)时使用此流程。 ### 创作进度清单 复制此清单并在完成时勾选: ``` 内容创作进度: - [ ] 步骤 0: 加载偏好设置 - [ ] 步骤 1: 内容分析与链接提取 - [ ] 步骤 2: 链接内容获取与理解 - [ ] 步骤 3: 询问创作偏好 - [ ] 步骤 4: 生成 Markdown 文章 - [ ] 步骤 5: 用户确认与优化 - [ ] 步骤 6: 转换为 HTML - [ ] 步骤 7: 准备封面图 - [ ] 步骤 8: 发布到微信 - [ ] 步骤 9: 完成报告 ``` ### 步骤 0: 加载偏好设置 检查并加载 EXTEND.md 设置(见上方偏好设置部分)。 ### 步骤 1: 内容分析与链接提取 分析用户输入: 1. **提取所有链接**: ```bash # 提取 HTTP/HTTPS 链接 echo "$user_input" | grep -oE 'https?://[^\s]+' > /tmp/links.txt ``` 2. **判断内容类型**: - 如果仅有单个链接且无其他文本 → 转到**流程 2: 链接发布流程** - 如果有文本内容(可选链接)→ 继续内容创作流程 ### 步骤 2: 链接内容获取与理解 **如果内容中包含参考链接**: 1. **获取每个链接的内容**: ```typescript // 使用 WebFetch 获取并分析 for (const url of links) { const content = await WebFetch(url, ` 请提取并总结以下信息: 1. 文章标题 2. 作者(如有) 3. 核心观点(3-5个要点) 4. 关键数据或案例 5. 可引用的金句 以结构化格式返回,便于后续引用。 `); } ``` 2. **整理参考资料**: - 为每个链接创建摘要卡片 - 标注关键引用点 - 记录可用图片或数据 ### 步骤 3: 询问创作偏好 使用 AskUserQuestion 询问用户偏好: ``` 文章创作配置 问题1:文章风格 header: "风格" 选项: - 专业分析 - 深度解读,适合技术或行业分析(推荐) - 轻松科普 - 通俗易懂,适合大众读者 - 教程指南 - 步骤清晰,适合实操性内容 - 观点评论 - 表达看法,适合热点评论 问题2:文章长度 header: "长度" 选项: - 短文(800-1200字)- 快速阅读 - 中等(1500-2500字)- 平衡深度与可读性(推荐) - 长文(3000字+)- 深度长文 问题3:参考资料处理(如有链接) header: "引用方式" 选项: - 深度引用和分析 - 详细解读原文观点(推荐) - 简要提及和链接 - 点到为止 - 仅作背景参考 - 不明确引用 ``` ### 步骤 4: 生成 Markdown 文章 基于用户输入、参考资料和偏好生成文章: 1. **文章结构**: ```markdown --- title: 文章标题 author: 作者名(从 EXTEND.md 或默认值) summary: 文章摘要(120字以内) featureImage: 封面图路径(可选) date: YYYY-MM-DD --- # 文章标题 引言段落,吸引读者注意... ## 第一部分标题 段落内容... ![图片描述](图片路径) ## 第二部分标题 段落内容... > 引用重要观点或数据 ## 结论 总结性段落... --- **参考资料**: - [文章标题](链接) ``` 2. **保存文件**: ```bash # 生成 slug(文件名) title="文章标题" slug=$(echo "$title" | \ iconv -t ascii//TRANSLIT 2>/dev/null | \ tr '[:upper:]' '[:lower:]' | \ tr ' ' '-' | \ tr -cd '[:alnum:]-' | \ cut -c1-50) # 创建目录并保存 output_dir="wechat-articles/$(date +%Y-%m-%d)" mkdir -p "$output_dir" echo "$article_content" > "$output_dir/$slug.md" ``` 3. **展示给用户**: ``` ✓ 文章已生成 📄 标题:$title 📏 长度:约 $word_count 字 📁 保存位置:$output_dir/$slug.md [文章预览内容...] 请选择下一步操作... ``` ### 步骤 5: 用户确认与优化 使用 AskUserQuestion 询问: ``` 文章已生成,请选择操作 header: "下一步" 选项: - 直接发布 - 转换为 HTML 并发布到微信(推荐) - 修改内容 - 说明需要调整的部分 - 重新生成 - 使用不同风格或角度 - 仅保存文件 - 不发布,稍后手动处理 ``` **如果用户选择修改**: 1. 收集修改意见 2. 更新文章内容 3. 重新保存并展示 4. 再次询问下一步 **如果用户选择重新生成**: - 返回步骤 3,重新询问偏好 - 使用不同的创作角度 ### 步骤 6: 转换为 HTML 使用内置的 Markdown 渲染引擎转换: 1. **询问主题**(如未在 EXTEND.md 中指定): | 主题 | 描述 | |------|------| | `default` | 经典主题 - 传统排版,标题居中带底边,二级标题白字彩底 | | `grace` | 优雅主题 - 文字阴影,圆角卡片,精致引用块(推荐)| | `simple` | 简洁主题 - 现代极简风,不对称圆角,清爽留白 | 2. **执行转换**: ```bash npx -y bun ${SKILL_DIR}/scripts/md-to-wechat.ts \ "$output_dir/$slug.md" \ --theme grace \ --output "$output_dir" ``` 3. **解析输出 JSON**: ```json { "title": "文章标题", "author": "作者", "summary": "摘要", "htmlPath": "路径/to/article.html", "contentImages": [ { "placeholder": "WECHATIMGPH_1", "localPath": "/path/to/image1.jpg", "originalPath": "原始路径" } ] } ``` ### 步骤 7: 准备封面图 **检查封面图来源**(优先级顺序): 1. Frontmatter 字段:`featureImage`, `coverImage`, `cover`, `image` 2. 文章中的第一张图片 3. 自动生成 **如果没有封面图**,询问用户: ``` 封面图设置 header: "封面来源" 选项: - 自动生成 - 基于文章标题生成渐变背景封面(推荐) - 使用首图 - 使用文章中第一张图片 - 提供路径 - 指定本地文件或 URL - 暂不设置 - 稍后手动添加 ``` **如果选择自动生成**: ```bash # 使用 Node.js 脚本生成(无系统依赖) npx -y bun ${SKILL_DIR}/scripts/generate-cover.ts \ --title "$title" \ --output "$output_dir/$slug-cover.jpg" \ --gradient-start "#667eea" \ --gradient-end "#764ba2" ``` **封面要求**: - 格式:JPEG, PNG, GIF 或 WebP - 推荐尺寸:900x500px(2:1 比例) - 文件大小:< 2MB ### 步骤 8: 发布到微信 询问发布方式: ``` 发布方式选择 header: "发布方法" 选项: - API 方式 - 快速发布,需要 API 凭证(推荐) - 浏览器方式 - 可视化操作,需要 Chrome - 仅输出 HTML - 保存文件,稍后手动发布 ``` #### 选项 A: API 方式发布 1. **检查 API 凭证**: ```bash # 检查项目级别 test -f .awesome-skills/.env && grep -q "WECHAT_APP_ID" .awesome-skills/.env && echo "project" # 检查用户级别 test -f "$HOME/.awesome-skills/.env" && grep -q "WECHAT_APP_ID" "$HOME/.awesome-skills/.env" && echo "user" ``` 2. **如果凭证缺失**,引导设置: ``` 微信 API 凭证未找到 获取凭证步骤: 1. 访问 https://mp.weixin.qq.com 2. 进入:开发 → 基本配置 3. 复制 AppID 和 AppSecret 保存位置? A) 项目级别:.awesome-skills/.env(仅此项目) B) 用户级别:~/.awesome-skills/.env(所有项目) ``` 创建 `.env` 文件: ```bash WECHAT_APP_ID=<用户输入> WECHAT_APP_SECRET=<用户输入> ``` 3. **执行发布**: ```bash npx -y bun ${SKILL_DIR}/scripts/wechat-api.ts \ "$output_dir/$slug.html" \ --title "$title" \ --summary "$summary" \ --cover "$cover_image" \ --inline-css ``` **重要**:`--inline-css` 参数将 CSS 转为内联样式,微信公众号不支持 `

标题

``` **之后**: ```html

标题

``` **为什么需要**:微信公众号编辑器不支持 `