feishu_fabu/IMAGE_FIX.md
wp-publish-bot 1fb93e34c6 feat: 初始化 WordPress 自动发布系统(飞书机器人集成)
- 飞书消息接收与处理(文字、图片、Word 文档)
- WordPress REST API 文章发布
- 图片自动上传到媒体库
- Word 文档解析与发布
- HTML 格式化与分类自动匹配
- Python CLI 工具(避免 shell 引号冲突)
- Webhook 服务器(8080 端口)
- 完整日志系统
2026-05-12 15:09:30 +08:00

172 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 飞书图片上传问题分析与解决方案
## 🔍 问题分析
### 原始问题
通过飞书机器人发布文章时,图片使用了飞书的图床链接,在 WordPress 网站上无法正常显示。
### 根本原因
1. **飞书图床链接限制**:飞书图片的 URL 需要特定的认证 token 才能访问
2. **跨域访问问题**WordPress 网站无法直接访问飞书的私有图床
3. **链接过期**:飞书图片链接通常有有效期,过期后无法访问
## 🛠️ 解决方案
### 方案概述
**下载 → 上传 → 替换** 三步走策略:
```
飞书图片
1. 通过飞书 API 下载图片到本地
2. 上传到 WordPress 媒体库
3. 替换文章中的图片链接为 WordPress 链接
```
### 具体实现
#### 1. 创建飞书 API 客户端 (`modules/feishu_api.py`)
**功能**
- 获取飞书访问令牌(自动刷新)
- 下载飞书图片(支持 base64 解码)
- 下载飞书文件(支持 base64 解码)
- 获取消息中的图片列表
**API 端点**
- 图片下载:`GET /open-apis/im/v1/images/{image_key}`
- 文件下载:`GET /open-apis/im/v1/files/{file_key}`
#### 2. 更新飞书机器人脚本 (`feishu_bot.py`)
**新增功能**
- `_get_message_images()`:获取消息中的所有图片
- `_download_image()`:下载飞书图片到本地
- `_download_file()`:下载飞书文件到本地
**处理流程**
1. 接收飞书消息
2. 提取消息中的图片 key
3. 调用飞书 API 下载图片到本地
4. 上传图片到 WordPress 媒体库
5. 生成包含 WordPress 图片链接的文章 HTML
6. 发布文章
#### 3. 配置文件更新 (`feishu_config.py`)
已填入飞书应用凭证:
```python
FEISHU_APP_ID = 'cli_a938e1c9e0b91cbb'
FEISHU_APP_SECRET = 'P4dpF3xVIAizNjnbMCviDeiFDsxI02zo'
```
## 📁 文件结构
```
/www/wwwroot/wp-publish/
├── modules/
│ ├── feishu_api.py # 飞书 API 客户端(新增)
│ ├── wp_api.py # WordPress API
│ ├── wp_category.py # 分类匹配
│ ├── wp_formatter.py # HTML 格式化
│ ├── wp_image_handler.py # 图片处理
│ ├── wp_logger.py # 日志系统
│ └── wp_parse_docx.py # Word 解析
├── scripts/
│ ├── wp_publish.py # Word 文档发布
│ └── wp_publish_text.py # 文字 + 图片发布
├── feishu_bot.py # 飞书机器人(已更新)
├── feishu_config.py # 飞书配置(已更新)
├── webhook_server.py # Webhook 服务器
└── logs/ # 日志目录
```
## 🚀 使用方式
### 方式 1发送文字 + 图片
在飞书中发送文字和图片,机器人会自动:
1. 下载所有图片
2. 上传到 WordPress 媒体库
3. 发布包含 WordPress 图片链接的文章
### 方式 2发送 Word 文档
在飞书中发送 `.docx` 文件,机器人会自动:
1. 下载 Word 文档
2. 解析文档内容
3. 提取并上传图片
4. 发布文章
### 方式 3发送指令发布
```
#标题 文章标题
#分类 ai
文章正文内容
[图片]
```
## 🔧 技术细节
### 飞书 API 认证
- 使用 `tenant_access_token` 进行认证
- 自动刷新令牌(有效期 2 小时)
- 令牌过期前 5 分钟自动刷新
### 图片处理流程
```python
# 1. 获取访问令牌
token = feishu_client.get_access_token()
# 2. 下载图片
image_path = feishu_client.download_image(image_key)
# 3. 上传到 WordPress
result = image_handler.upload_image(image_path)
# 4. 获取 WordPress 图片 URL
wp_image_url = result.get('url')
```
### 错误处理
- 飞书 API 调用失败:记录错误日志,返回失败消息
- 图片下载失败:跳过该图片,继续处理其他内容
- WordPress 上传失败:记录错误,尝试重新上传
## 📊 测试验证
### 测试步骤
1. 在飞书中发送一条包含图片的消息
2. 检查日志确认图片下载成功
3. 检查 WordPress 媒体库确认图片上传成功
4. 访问发布的文章,确认图片正常显示
### 日志位置
- 飞书机器人日志:`/www/wwwroot/wp-publish/logs/feishu_bot.log`
- 飞书 API 日志:`/www/wwwroot/wp-publish/logs/feishu_api.log`
- WordPress 发布日志:`/www/wwwroot/wp-publish/logs/publish.log`
## ⚠️ 注意事项
1. **飞书权限**:确保飞书应用已开通 `im:message:receive` 权限
2. **文件大小**:飞书图片和文件下载有大小限制(通常 20MB
3. **网络环境**:服务器需要能够访问飞书 API`open.feishu.cn`
4. **SSL 证书**WordPress 使用自签名证书,已配置跳过验证
## 🔄 服务管理
```bash
# 查看服务状态
systemctl status wp-publish
# 重启服务
systemctl restart wp-publish
# 查看日志
tail -f /www/wwwroot/wp-publish/logs/feishu_bot.log
```
## 📞 技术支持
如有问题,请查看日志文件获取详细错误信息,或联系技术支持。