248 lines
6.0 KiB
Markdown
248 lines
6.0 KiB
Markdown
|
|
# 小红书发布脚本 - 功能总结
|
|||
|
|
|
|||
|
|
## 🎉 最新更新(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. 磁盘空间是否充足
|
|||
|
|
|
|||
|
|
## 🎯 下一步计划
|
|||
|
|
|
|||
|
|
- [ ] 支持视频发布
|
|||
|
|
- [ ] 批量发布功能
|
|||
|
|
- [ ] 定时发布功能
|
|||
|
|
- [ ] 发布结果追踪
|
|||
|
|
- [ ] 图片压缩优化
|
|||
|
|
- [ ] 并发下载优化
|