$npx -y skills add cnproduct/workbuddy-wechat-publisher --skill wechat-draft-publisher调用微信公众号API,将HTML文章发布到草稿箱。需用户预先配置AppID和AppSecret。
| 1 | # wechat-draft-publisher - 公众号草稿箱发布技能 |
| 2 | |
| 3 | ## 概述 |
| 4 | |
| 5 | 调用微信公众号API,将HTML文章发布到草稿箱。需用户预先配置AppID和AppSecret。 |
| 6 | |
| 7 | ## 触发词 |
| 8 | |
| 9 | 发布公众号, 草稿箱, 公众号发布, 保存草稿, 微信发布 |
| 10 | |
| 11 | ## 功能说明 |
| 12 | |
| 13 | ### 核心能力 |
| 14 | |
| 15 | 1. **读取HTML**:读取 wechat-html-formatter 生成的HTML文件 |
| 16 | 2. **提取标题**:从内容中提取文章标题 |
| 17 | 3. **获取Token**:通过AppID和AppSecret获取access_token |
| 18 | 4. **调用API**:调用微信 add_draft 接口发布草稿 |
| 19 | 5. **返回结果**:返回草稿ID或预览链接 |
| 20 | |
| 21 | ### 输入要求 |
| 22 | |
| 23 | - HTML 文件路径 |
| 24 | - 微信配置信息(AppID, AppSecret) |
| 25 | |
| 26 | ### 输出格式 |
| 27 | |
| 28 | ```json |
| 29 | { |
| 30 | "success": true, |
| 31 | "draft_id": "123456789", |
| 32 | "preview_url": "https://mp.weixin.qq.com/cgi-bin/draft?action=preview&msg_id=123456789", |
| 33 | "edit_url": "https://mp.weixin.qq.com/cgi-bin/draft?action=edit&msg_id=123456789", |
| 34 | "title": "文章标题", |
| 35 | "message": "文章已成功发布到草稿箱" |
| 36 | } |
| 37 | ``` |
| 38 | |
| 39 | ## 微信API调用 |
| 40 | |
| 41 | ### 获取Access Token |
| 42 | |
| 43 | ``` |
| 44 | GET https://api.weixin.qq.com/cgi-bin/token |
| 45 | ?grant_type=client_credential |
| 46 | &appid=APPID |
| 47 | &secret=APPSECRET |
| 48 | ``` |
| 49 | |
| 50 | ### 发布草稿 |
| 51 | |
| 52 | ``` |
| 53 | POST https://api.weixin.qq.com/cgi-bin/draft/add |
| 54 | ?access_token=ACCESS_TOKEN |
| 55 | |
| 56 | { |
| 57 | "title": "文章标题", |
| 58 | "author": "作者名", |
| 59 | "content": "HTML内容", |
| 60 | "digest": "摘要", |
| 61 | "content_source_url": "原文链接", |
| 62 | "thumb_media_id": "封面图media_id" |
| 63 | } |
| 64 | ``` |
| 65 | |
| 66 | ## 配置说明 |
| 67 | |
| 68 | ### 必需配置 |
| 69 | |
| 70 | ```json |
| 71 | { |
| 72 | "wechat": { |
| 73 | "app_id": "your_app_id", |
| 74 | "app_secret": "your_app_secret" |
| 75 | } |
| 76 | } |
| 77 | ``` |
| 78 | |
| 79 | ### 可选配置 |
| 80 | |
| 81 | ```json |
| 82 | { |
| 83 | "wechat": { |
| 84 | "app_id": "your_app_id", |
| 85 | "app_secret": "your_app_secret", |
| 86 | "default_author": "作者名", |
| 87 | "default_cover": "封面图media_id" |
| 88 | } |
| 89 | } |
| 90 | ``` |
| 91 | |
| 92 | ## Python脚本说明 |
| 93 | |
| 94 | ### 文件位置 |
| 95 | |
| 96 | ``` |
| 97 | wechat-draft-publisher/scripts/publish_draft.py |
| 98 | ``` |
| 99 | |
| 100 | ### 主要功能 |
| 101 | |
| 102 | 1. **load_config()**:加载配置文件 |
| 103 | 2. **get_access_token()**:获取微信access_token |
| 104 | 3. **extract_title()**:从HTML中提取标题 |
| 105 | 4. **add_draft()**:调用API发布草稿 |
| 106 | 5. **main()**:主函数,协调整个流程 |
| 107 | |
| 108 | ### 使用方法 |
| 109 | |
| 110 | ```bash |
| 111 | python publish_draft.py --html output/formatted_article.html --config config.json |
| 112 | ``` |
| 113 | |
| 114 | ### 命令行参数 |
| 115 | |
| 116 | - `--html`:HTML文件路径(必需) |
| 117 | - `--config`:配置文件路径(必需) |
| 118 | - `--author`:作者名(可选,覆盖配置) |
| 119 | - `--digest`:文章摘要(可选) |
| 120 | |
| 121 | ## 错误处理 |
| 122 | |
| 123 | ### 常见错误 |
| 124 | |
| 125 | 1. **access_token过期**:自动刷新token |
| 126 | 2. **API调用频率限制**:指数退避重试 |
| 127 | 3. **参数错误**:友好的错误提示 |
| 128 | 4. **网络问题**:重试机制 |
| 129 | |
| 130 | ### 错误码参考 |
| 131 | |
| 132 | | 错误码 | 说明 | |
| 133 | |--------|------| |
| 134 | | 40001 | access_token无效 | |
| 135 | | 40013 | appid无效 | |
| 136 | | 41002 | 缺少content参数 | |
| 137 | | 41004 | 缺少secret参数 | |
| 138 | | 44002 | 内容为空 | |
| 139 | |
| 140 | ## 完整工作流 |
| 141 | |
| 142 | ### 步骤 1:配置准备 |
| 143 | |
| 144 | 1. 在微信公众平台获取AppID和AppSecret |
| 145 | 2. 将服务器IP加入白名单 |
| 146 | 3. 创建配置文件 |
| 147 | |
| 148 | ### 步骤 2:读取内容 |
| 149 | |
| 150 | 1. 读取HTML文件 |
| 151 | 2. 提取标题、作者、摘要等信息 |
| 152 | 3. 处理图片(可选:上传封面图获取media_id) |
| 153 | |
| 154 | ### 步骤 3:发布草稿 |
| 155 | |
| 156 | 1. 获取access_token |
| 157 | 2. 调用add_draft API |
| 158 | 3. 解析返回结果 |
| 159 | |
| 160 | ### 步骤 4:返回结果 |
| 161 | |
| 162 | 1. 返回草稿ID |
| 163 | 2. 提供预览链接 |
| 164 | 3. 提供编辑链接 |
| 165 | |
| 166 | ## 使用示例 |
| 167 | |
| 168 | **配置文件 (config.json)**: |
| 169 | ```json |
| 170 | { |
| 171 | "wechat": { |
| 172 | "app_id": "wx1234567890abcdef", |
| 173 | "app_secret": "abcdef1234567890abcdef1234567890", |
| 174 | "default_author": "YourName" |
| 175 | } |
| 176 | } |
| 177 | ``` |
| 178 | |
| 179 | **执行命令**: |
| 180 | ```bash |
| 181 | python scripts/publish_draft.py \ |
| 182 | --html output/formatted_article.html \ |
| 183 | --config config.json |
| 184 | ``` |
| 185 | |
| 186 | **输出结果**: |
| 187 | ``` |
| 188 | ✓ 成功获取access_token |
| 189 | ✓ 成功提取文章标题:程序员的新同事:AI辅助编程工具实战指南 |
| 190 | ✓ 成功发布到草稿箱 |
| 191 | ✓ 草稿ID:123456789 |
| 192 | ✓ 预览链接:https://mp.weixin.qq.com/cgi-bin/draft?action=preview&msg_id=123456789 |
| 193 | ``` |
| 194 | |
| 195 | ## 安全注意事项 |
| 196 | |
| 197 | 1. **保护密钥**:不要将AppSecret提交到代码仓库 |
| 198 | 2. **环境变量**:建议使用环境变量存储敏感信息 |
| 199 | 3. **Token缓存**:缓存access_token避免频繁请求 |
| 200 | 4. **HTTPS**:始终使用HTTPS确保通信安全 |