Files
nanocode/skills/xiaohongshu_integration/integration_example.py
T
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

506 lines
16 KiB
Python

#!/usr/bin/env python3
"""
小红书图片风格生成功能集成示例
展示如何将新功能集成到现有工作流中
"""
import os
import sys
import json
import logging
from pathlib import Path
from datetime import datetime
# 添加当前目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def example_1_basic_integration():
"""示例1: 基本集成 - 在现有发布流程中添加图片生成"""
print("=" * 60)
print("示例1: 基本集成 - 在现有发布流程中添加图片生成")
print("=" * 60)
try:
# 导入现有发布器
from xiaohongshu_publisher_fixed import XiaohongshuPublisherFixed
from xiaohongshu_enhanced_publisher import XiaohongshuEnhancedPublisher
# 创建现有发布器
existing_publisher = XiaohongshuPublisherFixed()
logger.info("现有发布器创建成功")
# 创建增强发布器
enhanced_publisher = XiaohongshuEnhancedPublisher()
logger.info("增强发布器创建成功")
# 示例内容
content = """# 高效学习法分享
掌握高效学习法,让学习事半功倍!
## 核心方法
1. **番茄工作法**
- 25分钟专注学习
- 5分钟短暂休息
- 每4个番茄钟长休息
2. **费曼学习法**
- 选择一个概念
- 教授给他人
- 回顾和简化
- 组织和完善
3. **间隔重复法**
- 第一天学习
- 第二天复习
- 一周后复习
- 一月后复习
坚持使用这些方法,学习效率提升300%!
"""
# 保存为临时文件
import tempfile
with tempfile.NamedTemporaryFile(mode='w', suffix='.md', delete=False, encoding='utf-8') as f:
f.write(content)
temp_file = f.name
logger.info(f"创建临时文件: {temp_file}")
# 方法A: 使用现有发布器(无图片生成)
logger.info("\n方法A: 使用现有发布器(无图片生成)")
# success_a = existing_publisher.publish_from_markdown(temp_file)
# logger.info(f"现有发布器结果: {'成功' if success_a else '失败'}")
# 方法B: 使用增强发布器(带图片生成)
logger.info("\n方法B: 使用增强发布器(带图片生成)")
# 先分析内容
analysis = enhanced_publisher.analyze_content(content)
logger.info(f"内容分析结果:")
logger.info(f" 类型: {analysis['content_type']}")
logger.info(f" 推荐风格: {analysis['recommended_style'].value}")
logger.info(f" 推荐布局: {analysis['recommended_layout'].value}")
# 生成图片
images = enhanced_publisher.generate_images_for_content(
content,
analysis['recommended_style'].value,
analysis['recommended_layout'].value
)
if images:
logger.info(f"✅ 图片生成成功: {images[0]}")
else:
logger.info("⚠️ 图片生成失败或已禁用")
# 发布(需要配置API密钥和登录状态)
# success_b = enhanced_publisher.publish_with_generated_images(temp_file)
# logger.info(f"增强发布器结果: {'成功' if success_b else '失败'}")
# 清理临时文件
os.unlink(temp_file)
logger.info(f"清理临时文件: {temp_file}")
print("\n✅ 示例1完成")
return True
except Exception as e:
logger.error(f"示例1失败: {e}")
return False
def example_2_style_selection():
"""示例2: 风格选择 - 根据内容类型选择最佳风格"""
print("\n" + "=" * 60)
print("示例2: 风格选择 - 根据内容类型选择最佳风格")
print("=" * 60)
try:
from xiaohongshu_enhanced_publisher import XiaohongshuEnhancedPublisher
publisher = XiaohongshuEnhancedPublisher()
# 不同类型的内容示例
content_examples = [
{
"type": "知识分享",
"content": "Python编程技巧:列表推导式、装饰器、上下文管理器",
"expected_style": "notion"
},
{
"type": "生活分享",
"content": "周末好去处:公园野餐、咖啡馆读书、美术馆看展",
"expected_style": "cute"
},
{
"type": "健康生活",
"content": "每日养生习惯:早起一杯水、午间小憩、晚上泡脚",
"expected_style": "fresh"
},
{
"type": "专业教程",
"content": "Git使用指南:分支管理、合并冲突、版本回退",
"expected_style": "minimal"
}
]
for example in content_examples:
print(f"\n内容类型: {example['type']}")
print(f"内容: {example['content'][:50]}...")
# 分析内容
analysis = publisher.analyze_content(example['content'])
print(f" 分析结果: {analysis['content_type']}")
print(f" 推荐风格: {analysis['recommended_style'].value}")
print(f" 推荐布局: {analysis['recommended_layout'].value}")
# 检查是否符合预期
if analysis['recommended_style'].value == example['expected_style']:
print(f" ✅ 风格推荐符合预期")
else:
print(f" ⚠️ 风格推荐与预期不同")
print("\n✅ 示例2完成")
return True
except Exception as e:
logger.error(f"示例2失败: {e}")
return False
def example_3_batch_processing():
"""示例3: 批量处理 - 处理多个Markdown文件"""
print("\n" + "=" * 60)
print("示例3: 批量处理 - 处理多个Markdown文件")
print("=" * 60)
try:
from xiaohongshu_enhanced_publisher import XiaohongshuEnhancedPublisher
publisher = XiaohongshuEnhancedPublisher()
# 创建测试目录和文件
test_dir = Path("/tmp/xhs_test_batch")
test_dir.mkdir(exist_ok=True)
# 创建多个测试文件
test_files = [
{
"name": "学习技巧.md",
"content": """# 高效学习技巧
1. 主动学习
2. 间隔重复
3. 费曼技巧
4. 思维导图"""
},
{
"name": "健康生活.md",
"content": """# 健康生活习惯
- 规律作息
- 均衡饮食
- 适量运动
- 良好心态"""
},
{
"name": "时间管理.md",
"content": """# 时间管理方法
## 重要工具
1. 番茄钟
2. 待办清单
3. 日历规划
4. 优先级矩阵"""
}
]
# 保存文件
file_paths = []
for test_file in test_files:
file_path = test_dir / test_file["name"]
with open(file_path, 'w', encoding='utf-8') as f:
f.write(test_file["content"])
file_paths.append(str(file_path))
print(f"创建文件: {file_path}")
# 模拟批量处理(不实际发布)
print(f"\n模拟批量处理 {len(file_paths)} 个文件...")
for i, file_path in enumerate(file_paths, 1):
print(f"\n处理文件 {i}/{len(file_paths)}: {file_path}")
# 读取内容
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# 分析内容
analysis = publisher.analyze_content(content)
print(f" 内容类型: {analysis['content_type']}")
print(f" 推荐风格: {analysis['recommended_style'].value}")
print(f" 推荐布局: {analysis['recommended_layout'].value}")
# 模拟图片生成
images = publisher.generate_images_for_content(
content,
analysis['recommended_style'].value,
analysis['recommended_layout'].value
)
if images:
print(f" ✅ 图片生成成功")
else:
print(f" ⚠️ 图片生成失败或已禁用")
# 清理测试文件
for file_path in file_paths:
try:
os.unlink(file_path)
except:
pass
# 清理目录
try:
test_dir.rmdir()
except:
pass
print("\n✅ 示例3完成")
return True
except Exception as e:
logger.error(f"示例3失败: {e}")
return False
def example_4_custom_workflow():
"""示例4: 自定义工作流 - 结合现有工具创建完整流程"""
print("\n" + "=" * 60)
print("示例4: 自定义工作流 - 结合现有工具创建完整流程")
print("=" * 60)
try:
# 导入各种工具
from xiaohongshu_enhanced_publisher import XiaohongshuEnhancedPublisher
from content_converter_fixed import ContentConverterFixed
# 初始化工具
publisher = XiaohongshuEnhancedPublisher()
converter = ContentConverterFixed()
# 模拟从IT资讯系统获取内容
print("步骤1: 获取内容")
it_article = {
"title": "AI技术新突破:文本生成图片质量大幅提升",
"content": """最近,AI图像生成技术取得了重大突破。新的模型能够生成更加逼真、细节丰富的图片,同时保持高度的创意性。
主要改进包括:
1. 图像质量大幅提升
2. 创意控制更加精细
3. 生成速度显著优化
这项技术将改变内容创作的方式。""",
"source": "TechNews",
"url": "https://example.com/ai-breakthrough"
}
print(f" 标题: {it_article['title']}")
print(f" 来源: {it_article['source']}")
# 步骤2: 转换为小红书格式
print("\n步骤2: 转换为小红书格式")
# 创建Markdown格式
markdown_content = f"""# {it_article['title']}
{it_article['content']}
*来源: {it_article['source']}*
*原文链接: {it_article['url']}*
"""
# 转换为小红书格式
xhs_content = converter.convert(markdown_content)
print(f" 转换后内容长度: {len(xhs_content)} 字符")
print(f" 内容预览: {xhs_content[:100]}...")
# 步骤3: 分析内容并生成图片
print("\n步骤3: 分析内容并生成图片")
analysis = publisher.analyze_content(it_article['content'])
print(f" 内容类型: {analysis['content_type']}")
print(f" 推荐风格: {analysis['recommended_style'].value}")
print(f" 推荐布局: {analysis['recommended_layout'].value}")
# 生成图片
images = publisher.generate_images_for_content(
it_article['content'],
analysis['recommended_style'].value,
analysis['recommended_layout'].value
)
if images:
print(f" ✅ 图片生成成功: {images[0]}")
else:
print(f" ⚠️ 图片生成失败或已禁用")
# 步骤4: 准备发布
print("\n步骤4: 准备发布")
# 保存为临时文件
import tempfile
with tempfile.NamedTemporaryFile(mode='w', suffix='.md', delete=False, encoding='utf-8') as f:
f.write(markdown_content)
temp_file = f.name
print(f" 临时文件: {temp_file}")
# 步骤5: 发布(模拟)
print("\n步骤5: 发布到小红书")
print(" 📝 标题:", it_article['title'])
print(" 🎨 图片风格:", analysis['recommended_style'].value)
print(" 📐 图片布局:", analysis['recommended_layout'].value)
print(" 🏷️ 默认标签:", publisher.config['xiaohongshu']['default_tags'][:3])
# 清理临时文件
os.unlink(temp_file)
print("\n✅ 完整工作流演示完成")
print("\n实际发布命令:")
print(f" python3 xiaohongshu_enhanced_publisher.py publish --markdown {temp_file}")
return True
except Exception as e:
logger.error(f"示例4失败: {e}")
return False
def example_5_integration_with_xhs_cli():
"""示例5: 与小红书CLI集成"""
print("\n" + "=" * 60)
print("示例5: 与小红书CLI集成")
print("=" * 60)
try:
import subprocess
# 检查小红书CLI状态
print("检查小红书CLI状态...")
try:
result = subprocess.run(
["xhs", "status"],
capture_output=True,
text=True,
encoding='utf-8',
timeout=10
)
if result.returncode == 0:
print("✅ 小红书CLI可用")
print(f"输出: {result.stdout[:100]}...")
else:
print("⚠️ 小红书CLI状态检查失败")
print(f"错误: {result.stderr}")
except FileNotFoundError:
print("❌ 小红书CLI未安装")
print("安装命令: uv tool install xiaohongshu-cli")
except subprocess.TimeoutExpired:
print("⚠️ 小红书CLI检查超时")
# 演示发布命令
print("\n小红书发布命令示例:")
commands = [
"# 基本发布",
"xhs post --title '高效学习法' --content '分享几个高效学习技巧...' --image generated.png",
"",
"# 添加标签",
"xhs post --title 'AI技术' --content 'AI最新进展...' --tag '#AI' --tag '#科技'",
"",
"# 从文件读取内容",
"xhs post --title '我的笔记' --content-file content.txt --image image1.jpg --image image2.jpg",
"",
"# 查看已发布的笔记",
"xhs my-notes --page 0",
"",
"# 搜索内容",
"xhs search '学习技巧' --sort popular"
]
for cmd in commands:
if cmd.startswith("#"):
print(f"\n{cmd}")
elif cmd:
print(f" {cmd}")
print("\n✅ 示例5完成")
return True
except Exception as e:
logger.error(f"示例5失败: {e}")
return False
def main():
"""主函数"""
print("小红书图片风格生成功能集成示例")
print("=" * 60)
examples = [
("基本集成", example_1_basic_integration),
("风格选择", example_2_style_selection),
("批量处理", example_3_batch_processing),
("自定义工作流", example_4_custom_workflow),
("与小红书CLI集成", example_5_integration_with_xhs_cli)
]
results = []
for name, func in examples:
try:
success = func()
results.append((name, success))
except Exception as e:
logger.error(f"示例 '{name}' 执行失败: {e}")
results.append((name, False))
# 输出结果
print("\n" + "=" * 60)
print("集成示例执行结果")
print("=" * 60)
total = len(results)
passed = sum(1 for _, success in results if success)
failed = total - passed
for name, success in results:
status = "✅ 通过" if success else "❌ 失败"
print(f"{name}: {status}")
print(f"\n总计: {total} 个示例")
print(f"通过: {passed} 个")
print(f"失败: {failed} 个")
if failed == 0:
print("\n🎉 所有集成示例执行成功!")
print("\n下一步建议:")
print("1. 配置API密钥以启用图片生成")
print("2. 登录小红书CLI以启用发布功能")
print("3. 测试完整发布流程")
print("4. 集成到现有自动化系统中")
else:
print(f"\n⚠️ 有 {failed} 个示例失败,请检查问题。")
return failed == 0
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)