#!/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)