autoUpload/examples/upload_note_to_xiaohongshu_video.py

196 lines
5.7 KiB
Python
Raw 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 -*-
"""
小红书视频笔记上传示例
展示如何使用XiaoHongShuVideoNote类上传视频笔记
"""
import sys
import os
import asyncio
from pathlib import Path
from datetime import datetime, timedelta
# 添加项目根目录到系统路径
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 (
XiaoHongShuVideoNote,
xiaohongshu_note_setup
)
async def upload_video_note_example():
"""视频笔记上传示例"""
print("=" * 60)
print("小红书视频笔记上传示例")
print("=" * 60)
# ========== 配置参数 ==========
# 标题最多30字符
title = "一分钟学会做蛋糕🍰"
# 正文内容最多1000字符
content = """超简单的蛋糕教程来啦!
📝 材料清单:
🥚 鸡蛋 3个
🍬 白糖 50g
🌾 低筋面粉 60g
🥛 牛奶 30ml
新手也能一次成功
快来试试吧~
完整配方在评论区👇"""
# 话题标签建议最多3个
tags = ["美食教程", "烘焙", "蛋糕"]
# 视频文件路径
video_path = str(Path(BASE_DIR) / "videos" / "demo.mp4")
# 视频封面路径(可选,不设置则使用视频第一帧)
thumbnail_path = None # str(Path(BASE_DIR) / "videos" / "thumbnail.jpg")
# Cookie文件路径
account_file = Path(BASE_DIR) / "cookies" / "xiaohongshu_note" / "account.json"
account_file.parent.mkdir(parents=True, exist_ok=True)
# 发布时间设置
# 方式1: 立即发布
publish_date = 0
# 方式2: 定时发布明天上午10点
# publish_date = datetime.now() + timedelta(days=1)
# publish_date = publish_date.replace(hour=10, minute=0, second=0)
# 可选参数
location = "北京市·朝阳区" # 地点(可选)
# 是否使用无头模式(不推荐)
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] 验证视频文件...")
if not os.path.exists(video_path):
print(f"❌ 视频文件不存在: {video_path}")
print(f"提示: 请将视频放在 {Path(BASE_DIR) / 'videos'} 目录下")
return
file_size_mb = os.path.getsize(video_path) / (1024 * 1024)
print(f"✅ 视频文件: {os.path.basename(video_path)}")
print(f" 大小: {file_size_mb:.2f} MB")
if thumbnail_path and not os.path.exists(thumbnail_path):
print(f"⚠️ 封面文件不存在: {thumbnail_path}")
print(f" 将使用视频第一帧作为封面")
thumbnail_path = None
# ========== 创建上传器并执行上传 ==========
print(f"\n[3/3] 开始上传视频笔记...")
print(f"标题: {title}")
print(f"标签: {tags}")
print(f"地点: {location}")
print(f"发布方式: {'立即发布' if publish_date == 0 else f'定时发布({publish_date})'}")
print()
try:
# 创建视频笔记上传器
note = XiaoHongShuVideoNote(
title=title,
content=content,
tags=tags,
video_path=video_path,
publish_date=publish_date,
account_file=str(account_file),
thumbnail_path=thumbnail_path,
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_video_with_schedule_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
# 配置定时发布
video_path = str(Path(BASE_DIR) / "videos" / "demo.mp4")
# 设置发布时间明天下午3点
publish_time = datetime.now() + timedelta(days=1)
publish_time = publish_time.replace(hour=15, minute=0, second=0, microsecond=0)
print(f"定时发布时间: {publish_time.strftime('%Y-%m-%d %H:%M:%S')}")
try:
note = XiaoHongShuVideoNote(
title="定时发布测试🕐",
content="这是一条定时发布的视频笔记",
tags=["测试", "定时发布"],
video_path=video_path,
publish_date=publish_time,
account_file=str(account_file),
headless=False
)
await note.main()
print(f"\n✅ 视频已设置为定时发布: {publish_time.strftime('%Y-%m-%d %H:%M:%S')}")
except Exception as e:
print(f"\n❌ 设置失败: {e}")
if __name__ == "__main__":
# 运行单个视频笔记上传示例
asyncio.run(upload_video_note_example())
# 如果需要定时发布,注释掉上面一行,取消下面的注释
# asyncio.run(upload_video_with_schedule_example())