autoUpload/examples/upload_note_to_xiaohongshu_image.py

212 lines
6.3 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
"""
小红书图文笔记上传示例
展示如何使用XiaoHongShuImageNote类上传图文笔记
"""
import sys
import os
import asyncio
from pathlib import Path
# 添加项目根目录到系统路径
current_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.dirname(current_dir)
sys.path.append(project_root)
from conf import BASE_DIR
from uploader.xhs_note_uploader.main import (
XiaoHongShuImageNote,
xiaohongshu_note_setup
)
async def upload_image_note_example():
"""图文笔记上传示例"""
print("=" * 60)
print("小红书图文笔记上传示例")
print("=" * 60)
# ========== 配置参数 ==========
# 标题最多30字符
title = "今天的下午茶时光☕️"
# 正文内容最多1000字符支持换行
content = """分享一下今天的下午茶时光~
这家新开的咖啡馆环境超级好
阳光透过落地窗洒进来
感觉整个人都被治愈了💕
点了他们家的招牌拿铁
还有手工曲奇
味道真的绝了
推荐给爱喝咖啡的小伙伴们
#下午茶 #咖啡馆 #生活记录"""
# 话题标签建议最多3个不需要加#号)
tags = ["下午茶", "咖啡馆", "生活记录"]
# 图片路径列表1-9张
# 请将你的图片放在videos目录下或使用绝对路径
image_paths = [
str(Path(BASE_DIR) / "videos" / "demo.png"), # 示例图片1
# str(Path(BASE_DIR) / "videos" / "photo2.jpg"), # 示例图片2
# str(Path(BASE_DIR) / "videos" / "photo3.jpg"), # 示例图片3
]
# Cookie文件路径
account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
account_file.parent.mkdir(parents=True, exist_ok=True)
# 发布时间0表示立即发布也可以传入datetime对象
publish_date = 0
# 可选参数
cover_index = 0 # 封面索引0表示第一张图
filter_name = None # 滤镜名称(如:"清新"、"复古"等)
location = "上海市·静安区" # 地点(可选)
# 是否使用无头模式不推荐建议设为False
headless = False
# ========== 检查Cookie ==========
print(f"\n[1/3] 检查Cookie...")
cookie_valid = await xiaohongshu_note_setup(str(account_file), handle=True)
if not cookie_valid:
print("❌ Cookie无效请重新登录")
return
print("✅ Cookie有效")
# ========== 验证图片文件 ==========
print(f"\n[2/3] 验证图片文件...")
for i, img_path in enumerate(image_paths):
if not os.path.exists(img_path):
print(f"❌ 图片文件不存在: {img_path}")
print(f"提示: 请将图片放在 {Path(BASE_DIR) / 'videos'} 目录下")
return
print(f"✅ 图片 {i+1}: {os.path.basename(img_path)}")
# ========== 创建上传器并执行上传 ==========
print(f"\n[3/3] 开始上传图文笔记...")
print(f"标题: {title}")
print(f"图片数量: {len(image_paths)}")
print(f"标签: {tags}")
print(f"地点: {location}")
print()
try:
# 创建图文笔记上传器
note = XiaoHongShuImageNote(
title=title,
content=content,
tags=tags,
image_paths=image_paths,
publish_date=publish_date,
account_file=str(account_file),
cover_index=cover_index,
filter_name=filter_name,
location=location,
headless=headless
)
# 执行上传
await note.main()
print("\n" + "=" * 60)
print("🎉 图文笔记上传成功!")
print("=" * 60)
except Exception as e:
print("\n" + "=" * 60)
print(f"❌ 上传失败: {e}")
print("=" * 60)
raise
async def upload_multiple_notes_example():
"""批量上传多个图文笔记示例"""
print("=" * 60)
print("小红书图文笔记批量上传示例")
print("=" * 60)
account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
account_file.parent.mkdir(parents=True, exist_ok=True)
# 检查Cookie
cookie_valid = await xiaohongshu_note_setup(str(account_file), handle=True)
if not cookie_valid:
print("❌ Cookie无效")
return
# 笔记列表
notes_config = [
{
"title": "早餐分享🍳",
"content": "今天的早餐超级丰盛~",
"tags": ["早餐", "美食", "健康生活"],
"images": [str(Path(BASE_DIR) / "videos" / "demo.png")],
},
{
"title": "好物推荐💄",
"content": "最近入手的宝藏好物分享!",
"tags": ["好物推荐", "种草", "护肤"],
"images": [str(Path(BASE_DIR) / "videos" / "demo.png")],
},
# 可以继续添加更多笔记...
]
# 逐个上传
for i, config in enumerate(notes_config):
print(f"\n[{i+1}/{len(notes_config)}] 上传笔记: {config['title']}")
try:
note = XiaoHongShuImageNote(
title=config["title"],
content=config["content"],
tags=config["tags"],
image_paths=config["images"],
publish_date=0,
account_file=str(account_file),
headless=False
)
await note.main()
print(f"✅ 笔记 {i+1} 上传成功")
# 上传间隔10-15分钟避免风控
if i < len(notes_config) - 1:
import random
wait_time = random.randint(600, 900) # 10-15分钟
print(f"⏰ 等待 {wait_time//60} 分钟后上传下一篇...")
await asyncio.sleep(wait_time)
except Exception as e:
print(f"❌ 笔记 {i+1} 上传失败: {e}")
continue
print("\n" + "=" * 60)
print("🎉 批量上传完成!")
print("=" * 60)
if __name__ == "__main__":
# 运行单个笔记上传示例
asyncio.run(upload_image_note_example())
# 如果需要批量上传,注释掉上面一行,取消下面的注释
# asyncio.run(upload_multiple_notes_example())