- 飞书消息接收与处理(文字、图片、Word 文档) - WordPress REST API 文章发布 - 图片自动上传到媒体库 - Word 文档解析与发布 - HTML 格式化与分类自动匹配 - Python CLI 工具(避免 shell 引号冲突) - Webhook 服务器(8080 端口) - 完整日志系统
4.9 KiB
4.9 KiB
飞书图片上传问题分析与解决方案
🔍 问题分析
原始问题
通过飞书机器人发布文章时,图片使用了飞书的图床链接,在 WordPress 网站上无法正常显示。
根本原因
- 飞书图床链接限制:飞书图片的 URL 需要特定的认证 token 才能访问
- 跨域访问问题:WordPress 网站无法直接访问飞书的私有图床
- 链接过期:飞书图片链接通常有有效期,过期后无法访问
🛠️ 解决方案
方案概述
下载 → 上传 → 替换 三步走策略:
飞书图片
↓
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():下载飞书文件到本地
处理流程:
- 接收飞书消息
- 提取消息中的图片 key
- 调用飞书 API 下载图片到本地
- 上传图片到 WordPress 媒体库
- 生成包含 WordPress 图片链接的文章 HTML
- 发布文章
3. 配置文件更新 (feishu_config.py)
已填入飞书应用凭证:
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:发送文字 + 图片
在飞书中发送文字和图片,机器人会自动:
- 下载所有图片
- 上传到 WordPress 媒体库
- 发布包含 WordPress 图片链接的文章
方式 2:发送 Word 文档
在飞书中发送 .docx 文件,机器人会自动:
- 下载 Word 文档
- 解析文档内容
- 提取并上传图片
- 发布文章
方式 3:发送指令发布
#标题 文章标题
#分类 ai
文章正文内容
[图片]
🔧 技术细节
飞书 API 认证
- 使用
tenant_access_token进行认证 - 自动刷新令牌(有效期 2 小时)
- 令牌过期前 5 分钟自动刷新
图片处理流程
# 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 上传失败:记录错误,尝试重新上传
📊 测试验证
测试步骤
- 在飞书中发送一条包含图片的消息
- 检查日志确认图片下载成功
- 检查 WordPress 媒体库确认图片上传成功
- 访问发布的文章,确认图片正常显示
日志位置
- 飞书机器人日志:
/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
⚠️ 注意事项
- 飞书权限:确保飞书应用已开通
im:message:receive权限 - 文件大小:飞书图片和文件下载有大小限制(通常 20MB)
- 网络环境:服务器需要能够访问飞书 API(
open.feishu.cn) - SSL 证书:WordPress 使用自签名证书,已配置跳过验证
🔄 服务管理
# 查看服务状态
systemctl status wp-publish
# 重启服务
systemctl restart wp-publish
# 查看日志
tail -f /www/wwwroot/wp-publish/logs/feishu_bot.log
📞 技术支持
如有问题,请查看日志文件获取详细错误信息,或联系技术支持。