# 小红书发布脚本 - 功能总结 ## 🎉 最新更新(v1.1.0) 已成功增强发布脚本,现在支持**网络图片 URL**! ## ✨ 核心功能 ### 1. Cookie 认证 - 支持验证码登录 - 支持 Cookie 注入 - 自动验证登录状态 ### 2. 内容发布 - ✅ 标题和正文 - ✅ 多图上传(最多 9 张) - ✅ 标签自动添加 - ✅ 发布状态追踪 ### 3. 图片支持(新增) - ✅ **本地文件路径**(绝对/相对路径) - ✅ **网络图片 URL**(HTTP/HTTPS) - ✅ **混合使用**(本地 + 网络) - ✅ **自动下载**网络图片 - ✅ **自动清理**临时文件 ## 📝 使用示例 ### 基础使用 ```json { "cookies": [...], "title": "笔记标题", "content": "笔记内容", "images": [ "https://picsum.photos/800/600?random=1", "D:/local/image.jpg" ], "tags": ["标签1", "标签2"] } ``` ### 命令行 ```bash # 安装依赖 pip install -r requirements.txt # 从配置文件发布 python xhs_publish.py --config my_config.json # 测试网络图片功能 python test_network_images.py ``` ## 🔧 技术实现 ### 图片处理流程 ```python 1. 判断是否为网络 URL ↓ 是 2. 使用 aiohttp 下载图片 ↓ 3. 保存到 temp_downloads/ ↓ 4. 返回本地路径 ↓ 5. 上传到小红书 ↓ 6. 发布完成后清理临时文件 ``` ### 关键代码 ```python class XHSPublishService: async def download_image(self, url: str) -> str: """下载网络图片""" async with aiohttp.ClientSession() as session: async with session.get(url, timeout=30) as response: content = await response.read() # 保存文件 return local_path async def process_images(self, images: List[str]) -> List[str]: """处理图片列表(下载网络图片)""" local_images = [] for img in images: if self.is_url(img): local_path = await self.download_image(img) local_images.append(local_path) else: local_images.append(img) return local_images ``` ## 📦 文件结构 ``` backend/ ├── xhs_publish.py # 发布脚本(已增强) ├── xhs_login.py # 登录服务 ├── xhs_cli.py # 命令行工具 ├── test_publish.py # 基础测试 ├── test_network_images.py # 网络图片测试(新增) ├── publish_config_example.json # 配置示例(已更新) ├── requirements.txt # 依赖列表(已更新) ├── temp_downloads/ # 临时下载目录(自动创建) └── 文档/ ├── XHS_PUBLISH_README.md # 发布脚本文档 ├── NETWORK_IMAGE_SUPPORT.md # 网络图片文档(新增) └── PUBLISH_FEATURE_SUMMARY.md # 功能总结(本文档) ``` ## 🚀 快速开始 ### 1. 安装依赖 ```bash cd backend pip install -r requirements.txt playwright install chromium ``` ### 2. 获取 Cookie ```bash python xhs_cli.py login 13800138000 123456 ``` ### 3. 准备配置文件 ```bash cp publish_config_example.json my_publish.json # 编辑 my_publish.json,填入实际数据 ``` ### 4. 执行发布 ```bash python xhs_publish.py --config my_publish.json ``` ## 📊 性能指标 | 指标 | 数值 | |------|------| | 图片下载超时 | 30 秒/张 | | 最大图片数 | 9 张 | | 建议图片大小 | < 5MB | | 临时文件清理 | 自动 | ## 🔍 实际应用 ### 从数据库获取图片 URL 发布 ```python # 查询文章信息 article = db.query("SELECT * FROM ai_articles WHERE id = ?", article_id) images = db.query("SELECT image_url FROM ai_article_images WHERE article_id = ?", article_id) tags = db.query("SELECT coze_tag FROM ai_article_tags WHERE article_id = ?", article_id) # 准备发布 publisher = XHSPublishService(cookies) result = await publisher.publish( title=article['title'], content=article['content'], images=[img['image_url'] for img in images], # 使用数据库中的 URL tags=tags[0]['coze_tag'].split(',') if tags else [] ) ``` ### Go 后端调用示例 ```go func PublishArticle(articleID int) error { // 1. 查询文章信息 article := db.GetArticle(articleID) images := db.GetArticleImages(articleID) // 2. 构造配置 config := map[string]interface{}{ "cookies": loadCookies(), "title": article.Title, "content": article.Content, "images": images, // 直接使用 URL 数组 "tags": splitTags(article.Tags), } // 3. 保存配置文件 configFile := fmt.Sprintf("temp/publish_%d.json", articleID) saveJSON(configFile, config) // 4. 调用 Python 脚本 cmd := exec.Command("python", "backend/xhs_publish.py", "--config", configFile) output, err := cmd.CombinedOutput() // 5. 解析结果 var result map[string]interface{} json.Unmarshal(output, &result) return checkResult(result) } ``` ## ⚠️ 注意事项 ### 1. 网络图片 - 确保 URL 可公开访问 - 避免使用需要认证的图片 - 注意图片服务器的访问速度 ### 2. 临时文件 - 默认保存在 `temp_downloads/` - 发布完成后自动清理 - 可设置 `cleanup=False` 保留文件 ### 3. 错误处理 - 单张图片下载失败不影响其他图片 - 会跳过失败的图片继续发布 - 详细的错误日志输出 ## 📚 相关文档 - [XHS_PUBLISH_README.md](XHS_PUBLISH_README.md) - 详细使用文档 - [NETWORK_IMAGE_SUPPORT.md](NETWORK_IMAGE_SUPPORT.md) - 网络图片支持文档 - [XHS_CLI_README.md](XHS_CLI_README.md) - 命令行工具文档 ## 🐛 问题反馈 如遇到问题,请检查: 1. 是否安装了 `aiohttp` 库 2. 网络连接是否正常 3. Cookie 是否有效 4. 图片 URL 是否可访问 5. 磁盘空间是否充足 ## 🎯 下一步计划 - [ ] 支持视频发布 - [ ] 批量发布功能 - [ ] 定时发布功能 - [ ] 发布结果追踪 - [ ] 图片压缩优化 - [ ] 并发下载优化