6.0 KiB
6.0 KiB
小红书发布脚本 - 功能总结
🎉 最新更新(v1.1.0)
已成功增强发布脚本,现在支持网络图片 URL!
✨ 核心功能
1. Cookie 认证
- 支持验证码登录
- 支持 Cookie 注入
- 自动验证登录状态
2. 内容发布
- ✅ 标题和正文
- ✅ 多图上传(最多 9 张)
- ✅ 标签自动添加
- ✅ 发布状态追踪
3. 图片支持(新增)
- ✅ 本地文件路径(绝对/相对路径)
- ✅ 网络图片 URL(HTTP/HTTPS)
- ✅ 混合使用(本地 + 网络)
- ✅ 自动下载网络图片
- ✅ 自动清理临时文件
📝 使用示例
基础使用
{
"cookies": [...],
"title": "笔记标题",
"content": "笔记内容",
"images": [
"https://picsum.photos/800/600?random=1",
"D:/local/image.jpg"
],
"tags": ["标签1", "标签2"]
}
命令行
# 安装依赖
pip install -r requirements.txt
# 从配置文件发布
python xhs_publish.py --config my_config.json
# 测试网络图片功能
python test_network_images.py
🔧 技术实现
图片处理流程
1. 判断是否为网络 URL
↓ 是
2. 使用 aiohttp 下载图片
↓
3. 保存到 temp_downloads/
↓
4. 返回本地路径
↓
5. 上传到小红书
↓
6. 发布完成后清理临时文件
关键代码
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. 安装依赖
cd backend
pip install -r requirements.txt
playwright install chromium
2. 获取 Cookie
python xhs_cli.py login 13800138000 123456
3. 准备配置文件
cp publish_config_example.json my_publish.json
# 编辑 my_publish.json,填入实际数据
4. 执行发布
python xhs_publish.py --config my_publish.json
📊 性能指标
| 指标 | 数值 |
|---|---|
| 图片下载超时 | 30 秒/张 |
| 最大图片数 | 9 张 |
| 建议图片大小 | < 5MB |
| 临时文件清理 | 自动 |
🔍 实际应用
从数据库获取图片 URL 发布
# 查询文章信息
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 后端调用示例
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 - 详细使用文档
- NETWORK_IMAGE_SUPPORT.md - 网络图片支持文档
- XHS_CLI_README.md - 命令行工具文档
🐛 问题反馈
如遇到问题,请检查:
- 是否安装了
aiohttp库 - 网络连接是否正常
- Cookie 是否有效
- 图片 URL 是否可访问
- 磁盘空间是否充足
🎯 下一步计划
- 支持视频发布
- 批量发布功能
- 定时发布功能
- 发布结果追踪
- 图片压缩优化
- 并发下载优化