IMPROVEMENT_GUIDE.md•3.55 kB
# xiayan-mcp 发布功能改进说明
## 问题分析
根据微信公众号API文档分析,之前发布功能遇到的主要问题是:
1. **封面图片尺寸限制**:微信要求封面图片(缩略图)不超过64KB,而原代码没有处理这个限制
2. **图片类型使用错误**:封面图片必须使用 `thumb` 类型而不是 `image` 类型
3. **缺少图片压缩功能**:原代码没有自动压缩大图片到符合微信要求的尺寸
## 主要改进
### 1. 新增图片自动压缩功能
在 `publisher.py` 中添加了 `_resize_image_for_thumb` 方法:
- 自动检测图片尺寸,如果超过要求则压缩
- 支持JPEG格式优化,逐步降低质量直到满足64KB限制
- 保持图片长宽比例,确保显示效果
### 2. 改进封面图片上传逻辑
- 封面图片总是作为永久 `thumb` 素材上传
- 自动调整图片大小以满足微信要求
- 上传后自动清理临时文件
### 3. 新增专门的封面图片上传工具
在MCP服务器中新增 `upload_cover_image` 工具:
- 专门用于上传文章封面图片
- 自动处理图片尺寸和格式要求
- 返回可用于文章封面的 `thumb_media_id`
### 4. 改进发布流程
- 简化了发布流程,封面图片总是使用永久素材
- 更新了响应信息,包含封面图片的媒体ID
- 增强了错误处理和用户反馈
## 使用方法
### 方法1:使用新的封面上传工具
```bash
# 先上传封面图片获取 thumb_media_id
upload_cover_image("path/to/cover.jpg")
# 返回:Media ID: 9q5Pthue6WCZZGn3PsSlVr5wbqlNKfXqP7eNHJN3HP5YJ2FOWme14_UG2nee1UCx
# 然后发布文章(会自动使用第一个图片作为封面)
publish_article(content, theme_id="default", author="文颜")
```
### 方法2:直接发布(自动处理封面)
```bash
# 直接发布,系统会自动:
# 1. 提取内容中的第一张图片
# 2. 压缩到64KB以内
# 3. 上传为thumb素材
# 4. 设置为文章封面
publish_article(content, theme_id="default", author="文颜")
```
## 技术细节
### 图片压缩算法
1. **尺寸调整**:如果图片尺寸超过400px,等比例缩放到400px宽度
2. **质量压缩**:从85%质量开始,逐步降低直到文件大小满足64KB要求
3. **二次压缩**:如果仍然过大,缩小到300px再次尝试
### API调用顺序
```
1. 上传封面图片 -> upload_permanent_material(type='thumb')
2. 创建文章草稿 -> _add_draft_with_options(thumb_media_id)
3. 返回草稿ID和封面媒体ID
```
### 错误处理
- 图片尺寸超限:自动压缩到合适大小
- 格式不支持:转换为JPEG格式
- 上传失败:提供详细的错误信息和解决建议
## 测试验证
运行测试脚本验证改进功能:
```bash
python test_improved_publish.py
```
测试内容包括:
- 封面图片自动压缩和上传
- 文章发布流程完整性
- 错误处理机制
## 注意事项
1. **PIL/Pillow依赖**:需要安装 `Pillow` 库来支持图片处理:
```bash
pip install Pillow
```
2. **临时文件管理**:系统会自动创建和清理临时文件,确保不会占用磁盘空间
3. **网络图片**:支持远程URL图片,会先下载到本地再处理
4. **向后兼容**:保持了原有API接口的兼容性,不会影响现有使用方式
## 预期效果
使用改进后的功能:
- ✅ 封面图片自动满足微信64KB限制
- ✅ 正确使用thumb类型作为封面图片
- ✅ 提高文章发布成功率
- ✅ 减少"invalid media_id"错误
- ✅ 更好的用户体验和错误提示