- 飞书消息接收与处理(文字、图片、Word 文档) - WordPress REST API 文章发布 - 图片自动上传到媒体库 - Word 文档解析与发布 - HTML 格式化与分类自动匹配 - Python CLI 工具(避免 shell 引号冲突) - Webhook 服务器(8080 端口) - 完整日志系统
172 lines
4.9 KiB
Markdown
172 lines
4.9 KiB
Markdown
# 飞书图片上传问题分析与解决方案
|
||
|
||
## 🔍 问题分析
|
||
|
||
### 原始问题
|
||
通过飞书机器人发布文章时,图片使用了飞书的图床链接,在 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
|
||
```
|
||
|
||
## 📞 技术支持
|
||
|
||
如有问题,请查看日志文件获取详细错误信息,或联系技术支持。
|