autoUpload/examples/upload_note_to_xiaohongshu_image.py

212 lines
6.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- 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())