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

338 lines
12 KiB
Python

#!/usr/bin/env python3
"""
小红书集成测试脚本
"""
import sys
import os
import json
# 添加当前目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from nanobot_integration import XiaohongshuSkill, publish_to_xiaohongshu, convert_to_xiaohongshu_format
def test_basic_functionality():
"""测试基本功能"""
print("🧪 测试小红书集成基本功能")
print("=" * 60)
# 创建技能实例
skill = XiaohongshuSkill()
# 初始化
print("1. 初始化技能...")
init_result = skill.initialize()
print(f" 结果: {'✅ 成功' if init_result['success'] else '❌ 失败'}")
if not init_result['success']:
print(f" 错误: {init_result.get('error')}")
return False
# 获取技能信息
print("\n2. 获取技能信息...")
skill_info = skill.get_skill_info()
print(f" 名称: {skill_info['name']}")
print(f" 版本: {skill_info['version']}")
print(f" 描述: {skill_info['description']}")
# 测试状态查询
print("\n3. 测试状态查询...")
status_result = skill.handle_command('status', {})
if status_result['success']:
print(" ✅ 状态查询成功")
status = status_result.get('status', {})
publisher = status.get('publisher', {})
print(f" CLI可用: {publisher.get('cli_available', False)}")
print(f" 已登录: {publisher.get('is_logged_in', False)}")
else:
print(f" ❌ 状态查询失败: {status_result.get('error')}")
return True
def test_content_conversion():
"""测试内容转换"""
print("\n📝 测试内容转换功能")
print("=" * 60)
# 测试文章数据
test_articles = [
{
'title': 'AI技术新突破:GPT-5即将发布',
'content': 'OpenAI宣布正在开发GPT-5,预计2025年发布。\n\n主要特点:\n1. 更强的逻辑推理能力\n2. 多模态理解(文本、图像、音频)\n3. 更低的计算成本\n4. 更好的中文支持\n\n技术规格:\n- 参数规模:10万亿\n- 训练数据:100种语言\n- 推理速度:提升50%\n\n这将推动AI技术进入新的发展阶段。',
'source': 'TechCrunch',
'url': 'https://techcrunch.com/gpt5',
'images': [],
'publish_date': '2026-03-15',
'author': 'AI研究团队',
'category': 'AI'
},
{
'title': 'Python 3.12性能大幅提升25%',
'content': 'Python 3.12正式发布,带来了显著的性能改进。\n\n性能提升:\n• 解释器性能提升25%\n• 内存使用优化\n• 启动时间减少\n\n新特性:\n1. 更好的错误信息\n2. 新的类型提示语法\n3. 改进的异步支持\n4. 模式匹配增强\n\n对于开发者来说,这是值得升级的版本。',
'source': 'Python官方博客',
'url': 'https://python.org/news',
'images': ['python_logo.jpg'],
'publish_date': '2026-03-14',
'author': 'Python核心团队',
'category': '编程语言'
},
{
'title': 'Rust 2.0:内存安全的新里程碑',
'content': 'Rust语言团队宣布开始规划Rust 2.0版本。\n\n目标:\n- 进一步简化所有权系统\n- 改进异步编程体验\n- 增强与C++的互操作性\n- 降低学习曲线\n\n预计发布时间:2026年底',
'source': 'Rust官方博客',
'url': 'https://rust-lang.org/blog',
'images': ['rust_logo.png'],
'publish_date': '2026-03-13',
'author': 'Rust核心团队',
'category': '系统编程'
}
]
skill = XiaohongshuSkill()
skill.initialize()
for i, article in enumerate(test_articles, 1):
print(f"\n{i}. 测试文章: {article['title']}")
print(f" 来源: {article['source']}")
print(f" 分类: {article['category']}")
# 转换内容
result = skill.handle_command('convert', article)
if result['success']:
print(" ✅ 转换成功")
# 显示预览
xhs_content = result.get('xhs_content', '')
preview = xhs_content[:150] + '...' if len(xhs_content) > 150 else xhs_content
print(f" 预览: {preview}")
# 显示标签
tags = result.get('recommended_tags', [])
print(f" 推荐标签: {', '.join(tags[:5])}")
# 显示分析
analysis = result.get('analysis', {})
print(f" 内容长度: {analysis.get('content_length', 0)} 字符")
print(f" 检测关键词: {', '.join(analysis.get('detected_keywords', [])[:3])}")
else:
print(f" ❌ 转换失败: {result.get('error')}")
return True
def test_publish_simulation():
"""测试发布模拟"""
print("\n🚀 测试发布模拟功能")
print("=" * 60)
# 注意:这是模拟发布,因为真实CLI不可用
print("注意:当前使用模拟模式(真实CLI不可用)")
test_article = {
'title': '测试发布:Docker发布新版本',
'content': 'Docker近日发布了新版本,带来了多项改进。\n\n新特性:\n1. 性能提升30%\n2. 更好的资源管理\n3. 增强的安全性\n4. 改进的CLI工具\n\n建议所有用户升级到最新版本。',
'source': 'Docker官方博客',
'url': 'https://docker.com/blog',
'images': ['docker_logo.png'],
'publish_date': '2026-03-15',
'author': 'Docker团队',
'category': '容器技术'
}
# 使用直接调用接口
print("\n1. 转换内容...")
convert_result = convert_to_xiaohongshu_format(test_article)
if convert_result['success']:
print(" ✅ 内容转换成功")
print(f" 内容长度: {convert_result.get('content_length', 0)} 字符")
# 模拟发布
print("\n2. 模拟发布...")
publish_result = publish_to_xiaohongshu(test_article)
if publish_result['success']:
print(" ✅ 模拟发布成功")
print(f" 消息: {publish_result.get('message')}")
print(f" 模拟URL: {publish_result.get('url')}")
print(f" 使用标签: {', '.join(publish_result.get('tags_used', [])[:5])}")
else:
print(f" ❌ 模拟发布失败: {publish_result.get('error')}")
else:
print(f" ❌ 内容转换失败: {convert_result.get('error')}")
return True
def test_integration_with_it_news():
"""测试与IT资讯系统的集成"""
print("\n🔗 测试与IT资讯系统集成")
print("=" * 60)
# 模拟从IT资讯系统获取的文章
it_news_articles = [
{
'title': 'GitHub Copilot企业版发布',
'content': 'GitHub宣布推出Copilot企业版,专为大型团队设计。\n\n企业版特性:\n• 团队知识库集成\n• 代码规范强制执行\n• 安全漏洞检测\n• 审计日志记录\n\n定价:每月$39/用户',
'source': 'GitHub博客',
'url': 'https://github.blog/copilot-enterprise',
'category': '开发工具'
},
{
'title': 'VS Code 2.0:全新的编辑器体验',
'content': 'Visual Studio Code 2.0发布,带来全新界面和性能改进。\n\n主要更新:\n1. 全新的UI设计\n2. 性能提升40%\n3. 内置AI助手\n4. 更好的远程开发支持\n\n下载地址:code.visualstudio.com',
'source': 'VS Code博客',
'url': 'https://code.visualstudio.com/blog',
'category': 'IDE'
}
]
print("模拟IT资讯自动化流程:")
print("1. 抓取技术新闻 → 2. 转换为小红书格式 → 3. 发布到小红书")
print("-" * 40)
skill = XiaohongshuSkill()
skill.initialize()
for article in it_news_articles:
print(f"\n📰 处理文章: {article['title']}")
# 补充完整数据
full_article = {
**article,
'images': [],
'publish_date': '2026-03-15',
'author': '技术编辑'
}
# 转换
convert_result = skill.handle_command('convert', full_article)
if convert_result['success']:
print(f" ✅ 转换完成")
# 显示内容摘要
xhs_content = convert_result.get('xhs_content', '')
lines = xhs_content.split('\n')
print(f" 标题: {lines[0] if lines else '无标题'}")
print(f" 来源: {lines[2] if len(lines) > 2 else '无来源'}")
# 显示标签
tags = convert_result.get('recommended_tags', [])
print(f" 生成标签: {', '.join(tags[:3])}")
# 模拟发布
publish_result = skill.handle_command('publish', full_article)
if publish_result['success']:
print(f" 🚀 模拟发布成功")
else:
print(f" ⚠️ 模拟发布失败: {publish_result.get('error')}")
else:
print(f" ❌ 转换失败: {convert_result.get('error')}")
return True
def generate_config_template():
"""生成配置模板"""
print("\n⚙️ 生成配置模板")
print("=" * 60)
template = {
"xiaohongshu": {
"enabled": True,
"cli_path": "/path/to/xhs-cli", # 需要修改为实际路径
"username": "your_xiaohongshu_username", # 需要修改
"password": "your_xiaohongshu_password", # 需要修改
"max_images": 9,
"add_watermark": False,
"watermark_text": "技术资讯",
"default_tags": ["#技术资讯", "#科技新闻", "#AI", "#编程", "#开源"],
"publish_interval": 3600,
"timeout": 30
},
"content": {
"max_title_length": 30,
"max_content_length": 1000,
"auto_generate_tags": True,
"add_source_info": True,
"add_emoji": True,
"max_tags": 10
},
"logging": {
"level": "INFO",
"file": "xiaohongshu.log"
}
}
config_path = "xiaohongshu_config_template.json"
with open(config_path, 'w', encoding='utf-8') as f:
json.dump(template, f, indent=2, ensure_ascii=False)
print(f"✅ 配置模板已生成: {config_path}")
print("\n⚠️ 使用前需要修改:")
print(" 1. cli_path: 小红书CLI的实际路径")
print(" 2. username: 你的小红书账号")
print(" 3. password: 你的小红书密码")
return True
def main():
"""主测试函数"""
print("=" * 70)
print("小红书集成技能完整测试")
print("=" * 70)
tests = [
("基本功能测试", test_basic_functionality),
("内容转换测试", test_content_conversion),
("发布模拟测试", test_publish_simulation),
("IT资讯集成测试", test_integration_with_it_news),
("配置模板生成", generate_config_template)
]
results = []
for test_name, test_func in tests:
print(f"\n▶️ 开始测试: {test_name}")
try:
success = test_func()
results.append((test_name, success))
print(f" {'✅ 通过' if success else '❌ 失败'}")
except Exception as e:
print(f" ❌ 测试异常: {e}")
results.append((test_name, False))
# 汇总结果
print("\n" + "=" * 70)
print("测试结果汇总")
print("=" * 70)
passed = sum(1 for _, success in results if success)
total = len(results)
for test_name, success in results:
status = "✅ 通过" if success else "❌ 失败"
print(f"{status} {test_name}")
print(f"\n📊 总计: {passed}/{total} 项测试通过")
if passed == total:
print("\n🎉 所有测试通过!小红书集成技能准备就绪。")
print("\n下一步:")
print("1. 获取真实的小红书CLI工具")
print("2. 修改配置文件中的账号信息")
print("3. 集成到IT资讯自动化系统")
else:
print("\n⚠️ 部分测试失败,需要检查问题。")
return passed == total
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)