diff --git a/__pycache__/sqlite_viewer.cpython-313.pyc b/__pycache__/sqlite_viewer.cpython-313.pyc new file mode 100644 index 0000000..701e8a3 Binary files /dev/null and b/__pycache__/sqlite_viewer.cpython-313.pyc differ diff --git a/check_product_db.log b/check_product_db.log new file mode 100644 index 0000000..2413fbe --- /dev/null +++ b/check_product_db.log @@ -0,0 +1,106 @@ +2025-11-26 23:10:42.930 | INFO | __main__:check_database_structure:31 - 找到数据库文件: ['product\\product.db', 'product\\products.db'] +2025-11-26 23:10:42.931 | INFO | __main__:check_database_structure:34 - +检查数据库: product\product.db +2025-11-26 23:10:42.932 | INFO | __main__:check_database_structure:48 - 数据库中的表: +2025-11-26 23:10:42.932 | INFO | __main__:check_database_structure:51 - - products +2025-11-26 23:10:42.932 | INFO | __main__:check_database_structure:57 - 表结构: +2025-11-26 23:10:42.932 | INFO | __main__:check_database_structure:59 - id (INTEGER) +2025-11-26 23:10:42.934 | INFO | __main__:check_database_structure:59 - url (TEXT) +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:59 - name (TEXT) +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:59 - introduction (TEXT) +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:59 - user_count (TEXT) +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:59 - maker_link (TEXT) +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:59 - maker_statement (TEXT) +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:59 - created_at (TEXT) +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:59 - updated_at (TEXT) +2025-11-26 23:10:42.935 | SUCCESS | __main__:check_database_structure:64 - 表 products 包含name和introduction字段 +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:69 - 示例数据: +2025-11-26 23:10:42.935 | ERROR | __main__:check_database_structure:78 - 检查数据库 product\product.db 时出错: 'NoneType' object is not subscriptable +2025-11-26 23:10:42.935 | INFO | __main__:check_database_structure:34 - +检查数据库: product\products.db +2025-11-26 23:10:42.936 | INFO | __main__:check_database_structure:48 - 数据库中的表: +2025-11-26 23:10:42.936 | INFO | __main__:check_database_structure:51 - - products +2025-11-26 23:10:42.936 | INFO | __main__:check_database_structure:57 - 表结构: +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - id (INTEGER) +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - url (TEXT) +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - name (TEXT) +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - introduction (TEXT) +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - user_count (TEXT) +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - maker_link (TEXT) +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - maker_statement (TEXT) +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - created_at (TEXT) +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:59 - updated_at (TEXT) +2025-11-26 23:10:42.937 | SUCCESS | __main__:check_database_structure:64 - 表 products 包含name和introduction字段 +2025-11-26 23:10:42.937 | INFO | __main__:check_database_structure:69 - 示例数据: +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:71 - 示例1: name='Pixley AI', introduction='Pixley is the first platform that lets children tu...' +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:71 - 示例2: name='Burner', introduction='Burner is a small, secure computer that keeps your...' +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:71 - 示例3: name='American Ratings Lead Magnet Portal', introduction='Build verified business credibility with the Ameri...' +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:51 - - sqlite_sequence +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:57 - 表结构: +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:59 - name () +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:59 - seq () +2025-11-26 23:10:42.938 | WARNING | __main__:check_database_structure:73 - 表 sqlite_sequence 缺少name或introduction字段 +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:51 - - product_analysis +2025-11-26 23:10:42.938 | INFO | __main__:check_database_structure:57 - 表结构: +2025-11-26 23:10:42.939 | INFO | __main__:check_database_structure:59 - id (INTEGER) +2025-11-26 23:10:42.939 | INFO | __main__:check_database_structure:59 - original_id (INTEGER) +2025-11-26 23:10:42.939 | INFO | __main__:check_database_structure:59 - original_name (TEXT) +2025-11-26 23:10:42.939 | INFO | __main__:check_database_structure:59 - product_name (TEXT) +2025-11-26 23:10:42.939 | INFO | __main__:check_database_structure:59 - product_intro (TEXT) +2025-11-26 23:10:42.939 | INFO | __main__:check_database_structure:59 - development_difficulty (TEXT) +2025-11-26 23:10:42.939 | INFO | __main__:check_database_structure:59 - ai_response (TEXT) +2025-11-26 23:10:42.939 | INFO | __main__:check_database_structure:59 - created_at (TIMESTAMP) +2025-11-26 23:10:42.939 | WARNING | __main__:check_database_structure:73 - 表 product_analysis 缺少name或introduction字段 +2025-11-26 23:10:49.516 | INFO | __main__:check_database_structure:31 - 找到数据库文件: ['product\\product.db', 'product\\products.db'] +2025-11-26 23:10:49.516 | INFO | __main__:check_database_structure:34 - +检查数据库: product\product.db +2025-11-26 23:10:49.517 | INFO | __main__:check_database_structure:48 - 数据库中的表: +2025-11-26 23:10:49.518 | INFO | __main__:check_database_structure:51 - - products +2025-11-26 23:10:49.519 | INFO | __main__:check_database_structure:57 - 表结构: +2025-11-26 23:10:49.519 | INFO | __main__:check_database_structure:59 - id (INTEGER) +2025-11-26 23:10:49.519 | INFO | __main__:check_database_structure:59 - url (TEXT) +2025-11-26 23:10:49.519 | INFO | __main__:check_database_structure:59 - name (TEXT) +2025-11-26 23:10:49.520 | INFO | __main__:check_database_structure:59 - introduction (TEXT) +2025-11-26 23:10:49.521 | INFO | __main__:check_database_structure:59 - user_count (TEXT) +2025-11-26 23:10:49.521 | INFO | __main__:check_database_structure:59 - maker_link (TEXT) +2025-11-26 23:10:49.521 | INFO | __main__:check_database_structure:59 - maker_statement (TEXT) +2025-11-26 23:10:49.521 | INFO | __main__:check_database_structure:59 - created_at (TEXT) +2025-11-26 23:10:49.521 | INFO | __main__:check_database_structure:59 - updated_at (TEXT) +2025-11-26 23:10:49.521 | SUCCESS | __main__:check_database_structure:64 - 表 products 包含name和introduction字段 +2025-11-26 23:10:49.522 | INFO | __main__:check_database_structure:69 - 示例数据: +2025-11-26 23:10:49.522 | ERROR | __main__:check_database_structure:78 - 检查数据库 product\product.db 时出错: 'NoneType' object is not subscriptable +2025-11-26 23:10:49.522 | INFO | __main__:check_database_structure:34 - +检查数据库: product\products.db +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:48 - 数据库中的表: +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:51 - - products +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:57 - 表结构: +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:59 - id (INTEGER) +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:59 - url (TEXT) +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:59 - name (TEXT) +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:59 - introduction (TEXT) +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:59 - user_count (TEXT) +2025-11-26 23:10:49.523 | INFO | __main__:check_database_structure:59 - maker_link (TEXT) +2025-11-26 23:10:49.524 | INFO | __main__:check_database_structure:59 - maker_statement (TEXT) +2025-11-26 23:10:49.524 | INFO | __main__:check_database_structure:59 - created_at (TEXT) +2025-11-26 23:10:49.524 | INFO | __main__:check_database_structure:59 - updated_at (TEXT) +2025-11-26 23:10:49.524 | SUCCESS | __main__:check_database_structure:64 - 表 products 包含name和introduction字段 +2025-11-26 23:10:49.524 | INFO | __main__:check_database_structure:69 - 示例数据: +2025-11-26 23:10:49.524 | INFO | __main__:check_database_structure:71 - 示例1: name='Pixley AI', introduction='Pixley is the first platform that lets children tu...' +2025-11-26 23:10:49.524 | INFO | __main__:check_database_structure:71 - 示例2: name='Burner', introduction='Burner is a small, secure computer that keeps your...' +2025-11-26 23:10:49.524 | INFO | __main__:check_database_structure:71 - 示例3: name='American Ratings Lead Magnet Portal', introduction='Build verified business credibility with the Ameri...' +2025-11-26 23:10:49.524 | INFO | __main__:check_database_structure:51 - - sqlite_sequence +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:57 - 表结构: +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:59 - name () +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:59 - seq () +2025-11-26 23:10:49.525 | WARNING | __main__:check_database_structure:73 - 表 sqlite_sequence 缺少name或introduction字段 +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:51 - - product_analysis +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:57 - 表结构: +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:59 - id (INTEGER) +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:59 - original_id (INTEGER) +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:59 - original_name (TEXT) +2025-11-26 23:10:49.525 | INFO | __main__:check_database_structure:59 - product_name (TEXT) +2025-11-26 23:10:49.526 | INFO | __main__:check_database_structure:59 - product_intro (TEXT) +2025-11-26 23:10:49.526 | INFO | __main__:check_database_structure:59 - development_difficulty (TEXT) +2025-11-26 23:10:49.526 | INFO | __main__:check_database_structure:59 - ai_response (TEXT) +2025-11-26 23:10:49.526 | INFO | __main__:check_database_structure:59 - created_at (TIMESTAMP) +2025-11-26 23:10:49.526 | WARNING | __main__:check_database_structure:73 - 表 product_analysis 缺少name或introduction字段 diff --git a/fix_chrome_debug.py b/fix_chrome_debug.py deleted file mode 100644 index 587c790..0000000 --- a/fix_chrome_debug.py +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -修复 Chrome 调试连接问题 -自动检测并处理 Chrome 调试模式连接 -""" - -import socket -import subprocess -import time -from loguru import logger - -def check_chrome_debug_port(host="127.0.0.1", port=5003): - """检查 Chrome 调试端口是否可用""" - try: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.settimeout(2) - result = sock.connect_ex((host, port)) - sock.close() - return result == 0 - except Exception as e: - logger.error(f"检查端口 {host}:{port} 失败: {e}") - return False - -def start_chrome_debug_mode(port=5003, user_data_dir="C:\\temp\\chrome_debug"): - """启动 Chrome 调试模式""" - try: - logger.info(f"正在启动 Chrome 调试模式,端口: {port}") - - # Chrome 可执行文件路径(Windows) - chrome_paths = [ - r"C:\Program Files\Google\Chrome\Application\chrome.exe", - r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" - ] - - chrome_exe = None - for path in chrome_paths: - try: - subprocess.run([path, "--version"], capture_output=True, check=True) - chrome_exe = path - logger.info(f"找到 Chrome 可执行文件: {path}") - break - except: - continue - - if not chrome_exe: - logger.error("未找到 Chrome 可执行文件") - return False - - # 启动 Chrome 调试模式 - cmd = [ - chrome_exe, - f"--remote-debugging-port={port}", - f"--user-data-dir={user_data_dir}", - "--no-first-run", - "--no-default-browser-check" - ] - - logger.info(f"启动命令: {' '.join(cmd)}") - process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - - # 等待 Chrome 启动 - time.sleep(5) - - # 检查端口是否可用 - if check_chrome_debug_port(port=port): - logger.success("Chrome 调试模式启动成功") - return True - else: - logger.error("Chrome 调试模式启动失败") - process.terminate() - return False - - except Exception as e: - logger.error(f"启动 Chrome 调试模式失败: {e}") - return False - -def main(): - """主函数""" - logger.info("=== Chrome 调试模式检查与修复 ===") - - # 检查当前端口状态 - if check_chrome_debug_port(): - logger.success("Chrome 调试端口 127.0.0.1:5003 已可用") - logger.info("您现在可以运行: python product/new_data.py") - return True - else: - logger.warning("Chrome 调试端口 127.0.0.1:5003 不可用") - - # 询问用户是否要启动 Chrome 调试模式 - logger.info("检测到 Chrome 调试模式未启动") - logger.info("建议使用以下替代方案:") - logger.info("1. 使用 Playwright 版本 (推荐): python product/new_data_stealth.py") - logger.info("2. 手动启动 Chrome 调试模式") - logger.info("3. 自动启动 Chrome 调试模式") - - choice = input("请选择方案 (1/2/3, 默认1): ").strip() or "1" - - if choice == "1": - logger.info("使用 Playwright 版本...") - logger.info("运行: python product/new_data_stealth.py") - return True - elif choice == "2": - logger.info("请手动运行以下命令:") - logger.info('chrome.exe --remote-debugging-port=5003 --user-data-dir="C:\\temp\\chrome_debug"') - return False - elif choice == "3": - if start_chrome_debug_mode(): - logger.success("Chrome 调试模式启动成功") - logger.info("您现在可以运行: python product/new_data.py") - return True - else: - logger.error("自动启动失败,请尝试手动启动") - return False - else: - logger.error("无效选择") - return False - -if __name__ == "__main__": - success = main() - if success: - logger.info("修复完成") - else: - logger.error("修复失败,请检查上述信息") \ No newline at end of file diff --git a/playwright_behavior_records_20251126_192417.json b/playwright_behavior_records_20251126_192417.json deleted file mode 100644 index 947d1bd..0000000 --- a/playwright_behavior_records_20251126_192417.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "click_records": [ - { - "timestamp": "2025-11-26 19:24:08", - "type": "click", - "x": "制作人链接", - "y": "点击制作人链接在当前窗口打开", - "selector": "", - "description": "" - } - ], - "dom_selection_records": [ - { - "timestamp": "2025-11-26 19:23:48", - "type": "dom_selection", - "selector": "//h1", - "description": "产品名称" - }, - { - "timestamp": "2025-11-26 19:23:48", - "type": "dom_selection", - "selector": "//*[@class=\"relative text-16 font-normal text-gray-700\"]//div", - "description": "产品简介" - }, - { - "timestamp": "2025-11-26 19:23:48", - "type": "dom_selection", - "selector": "//*[@class=\"flex flex-row gap-2\"]//div/div[2]/span/p", - "description": "用户数" - }, - { - "timestamp": "2025-11-26 19:24:08", - "type": "dom_selection", - "selector": "//span[contains(@class, \"absolute\")]", - "description": "制作人span标签" - }, - { - "timestamp": "2025-11-26 19:24:08", - "type": "dom_selection", - "selector": "//span[contains(@class, \"absolute\")]/parent::a", - "description": "制作人链接" - } - ] -} \ No newline at end of file diff --git a/product/product_ai_analysis.log b/product/product_ai_analysis.log new file mode 100644 index 0000000..c622c9b --- /dev/null +++ b/product/product_ai_analysis.log @@ -0,0 +1,672 @@ +2025-11-26 23:13:42.414 | INFO | __main__:__init__:37 - 初始化产品AI分析器,数据库: products.db +2025-11-26 23:13:42.414 | INFO | __main__:analyze_products:256 - 开始分析所有产品数据 +2025-11-26 23:13:42.415 | SUCCESS | __main__:connect_to_database:43 - 成功连接到数据库: products.db +2025-11-26 23:13:42.416 | SUCCESS | __main__:create_analysis_table:191 - 创建分析结果表成功 +2025-11-26 23:13:42.418 | INFO | __main__:get_product_data:71 - 从数据库获取到 360 个产品 +2025-11-26 23:13:42.419 | INFO | __main__:get_product_data:75 - 示例产品1: ID=1, 名称='Pixley AI', 简介='Pixley is the first platform that lets children tu...' +2025-11-26 23:13:42.419 | INFO | __main__:get_product_data:75 - 示例产品2: ID=2, 名称='Burner', 简介='Burner is a small, secure computer that keeps your...' +2025-11-26 23:13:42.419 | INFO | __main__:get_product_data:75 - 示例产品3: ID=3, 名称='American Ratings Lead Magnet Portal', 简介='Build verified business credibility with the Ameri...' +2025-11-26 23:13:42.419 | INFO | __main__:analyze_products:281 - 准备分析 360 个产品 +2025-11-26 23:13:42.419 | INFO | __main__:analyze_products:287 - +分析进度: 1/360 - Pixley AI +2025-11-26 23:13:42.420 | INFO | __main__:check_product_exists:240 - 产品 'Pixley AI' 已存在,跳过分析 +2025-11-26 23:13:42.420 | INFO | __main__:analyze_products:287 - +分析进度: 2/360 - Burner +2025-11-26 23:13:42.421 | INFO | __main__:check_product_exists:240 - 产品 'Burner' 已存在,跳过分析 +2025-11-26 23:13:42.421 | INFO | __main__:analyze_products:287 - +分析进度: 3/360 - American Ratings Lead Magnet Portal +2025-11-26 23:13:42.421 | INFO | __main__:check_product_exists:240 - 产品 'American Ratings Lead Magnet Portal' 已存在,跳过分析 +2025-11-26 23:13:42.421 | INFO | __main__:analyze_products:287 - +分析进度: 4/360 - Builder.io +2025-11-26 23:13:42.421 | INFO | __main__:check_product_exists:240 - 产品 'Builder.io' 已存在,跳过分析 +2025-11-26 23:13:42.421 | INFO | __main__:analyze_products:287 - +分析进度: 5/360 - BeeBot for AirPods +2025-11-26 23:13:42.422 | INFO | __main__:check_product_exists:240 - 产品 'BeeBot for AirPods' 已存在,跳过分析 +2025-11-26 23:13:42.422 | INFO | __main__:analyze_products:287 - +分析进度: 6/360 - iisee.me +2025-11-26 23:13:42.422 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: iisee.me +2025-11-26 23:14:04.260 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: iisee.me +2025-11-26 23:14:04.260 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='iisee.me', 简介='这是一个有趣的AI实验,它能将你的照片变成一个面部网格,这些...', 难度='一个人开发难度中等' +2025-11-26 23:14:04.265 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: iisee.me +2025-11-26 23:14:06.265 | INFO | __main__:analyze_products:287 - +分析进度: 7/360 - Melodic Mind +2025-11-26 23:14:06.266 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Melodic Mind +2025-11-26 23:14:41.846 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Melodic Mind +2025-11-26 23:14:41.846 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Melodic Mind', 简介='Melodic Mind 是一款全能音乐超级应用,旨在帮助您...', 难度='一个人开发难度较高' +2025-11-26 23:14:41.850 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Melodic Mind +2025-11-26 23:14:43.852 | INFO | __main__:analyze_products:287 - +分析进度: 8/360 - agor +2025-11-26 23:14:43.852 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: agor +2025-11-26 23:15:15.212 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: agor +2025-11-26 23:15:15.212 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='agor', 简介='下一代AI编程的智能体编排。Claude Code、Code...', 难度='一个人开发难度较高 + +详细分析: +这个产品是一个AI编程协作平台,需要整合多个AI模型并提供多人协作功能。一个人加上AI辅助开发存在以下挑战: + +1. 技术复杂度高:需要同时处理AI模型集成(Claude、Codex、Gemini)、实时协作系统、代码分析引擎等多个复杂子系统。 + +2. 多人协作功能:实现实时代码同步、冲突解决、版本控制等协作功能需要处理复杂的网络通信和状态同步问题。 + +3. AI编排系统:设计能够有效协调多个AI智能体的系统架构需要深厚的专业知识。 + +4. 安全性考量:处理用户代码和AI交互需要确保数据安全和隐私保护。 + +虽然AI可以辅助完成许多编码任务,如UI开发、API集成和基础功能实现,但系统架构设计、性能优化、复杂算法实现等仍需人类专家的深度参与。特别是需要同时精通前端、后端、AI集成和协作系统等多个领域,对个人能力要求极高。 + +因此,即使有AI辅助,一个人开发此类产品仍面临巨大挑战,建议组建小型团队分工合作。' +2025-11-26 23:15:15.218 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: agor +2025-11-26 23:15:17.219 | INFO | __main__:analyze_products:287 - +分析进度: 9/360 - QuiteInbox +2025-11-26 23:15:17.219 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: QuiteInbox +2025-11-26 23:16:59.846 | INFO | __main__:__init__:37 - 初始化产品AI分析器,数据库: products.db +2025-11-26 23:16:59.846 | INFO | __main__:analyze_products:256 - 开始分析所有产品数据 +2025-11-26 23:16:59.846 | SUCCESS | __main__:connect_to_database:43 - 成功连接到数据库: products.db +2025-11-26 23:16:59.847 | SUCCESS | __main__:create_analysis_table:191 - 创建分析结果表成功 +2025-11-26 23:16:59.850 | INFO | __main__:get_product_data:71 - 从数据库获取到 360 个产品 +2025-11-26 23:16:59.850 | INFO | __main__:get_product_data:75 - 示例产品1: ID=1, 名称='Pixley AI', 简介='Pixley is the first platform that lets children tu...' +2025-11-26 23:16:59.850 | INFO | __main__:get_product_data:75 - 示例产品2: ID=2, 名称='Burner', 简介='Burner is a small, secure computer that keeps your...' +2025-11-26 23:16:59.850 | INFO | __main__:get_product_data:75 - 示例产品3: ID=3, 名称='American Ratings Lead Magnet Portal', 简介='Build verified business credibility with the Ameri...' +2025-11-26 23:16:59.850 | INFO | __main__:analyze_products:281 - 准备分析 360 个产品 +2025-11-26 23:16:59.850 | INFO | __main__:analyze_products:287 - +分析进度: 1/360 - Pixley AI +2025-11-26 23:16:59.851 | INFO | __main__:check_product_exists:240 - 产品 'Pixley AI' 已存在,跳过分析 +2025-11-26 23:16:59.851 | INFO | __main__:analyze_products:292 - 跳过已存在产品,当前进度: 1/360 +2025-11-26 23:16:59.851 | INFO | __main__:analyze_products:287 - +分析进度: 2/360 - Burner +2025-11-26 23:16:59.851 | INFO | __main__:check_product_exists:240 - 产品 'Burner' 已存在,跳过分析 +2025-11-26 23:16:59.851 | INFO | __main__:analyze_products:292 - 跳过已存在产品,当前进度: 2/360 +2025-11-26 23:16:59.851 | INFO | __main__:analyze_products:287 - +分析进度: 3/360 - American Ratings Lead Magnet Portal +2025-11-26 23:16:59.851 | INFO | __main__:check_product_exists:240 - 产品 'American Ratings Lead Magnet Portal' 已存在,跳过分析 +2025-11-26 23:16:59.852 | INFO | __main__:analyze_products:292 - 跳过已存在产品,当前进度: 3/360 +2025-11-26 23:16:59.852 | INFO | __main__:analyze_products:287 - +分析进度: 4/360 - Builder.io +2025-11-26 23:16:59.852 | INFO | __main__:check_product_exists:240 - 产品 'Builder.io' 已存在,跳过分析 +2025-11-26 23:16:59.852 | INFO | __main__:analyze_products:292 - 跳过已存在产品,当前进度: 4/360 +2025-11-26 23:16:59.852 | INFO | __main__:analyze_products:287 - +分析进度: 5/360 - BeeBot for AirPods +2025-11-26 23:16:59.852 | INFO | __main__:check_product_exists:240 - 产品 'BeeBot for AirPods' 已存在,跳过分析 +2025-11-26 23:16:59.852 | INFO | __main__:analyze_products:292 - 跳过已存在产品,当前进度: 5/360 +2025-11-26 23:16:59.852 | INFO | __main__:analyze_products:287 - +分析进度: 6/360 - iisee.me +2025-11-26 23:16:59.853 | INFO | __main__:check_product_exists:240 - 产品 'iisee.me' 已存在,跳过分析 +2025-11-26 23:16:59.853 | INFO | __main__:analyze_products:292 - 跳过已存在产品,当前进度: 6/360 +2025-11-26 23:16:59.853 | INFO | __main__:analyze_products:287 - +分析进度: 7/360 - Melodic Mind +2025-11-26 23:16:59.853 | INFO | __main__:check_product_exists:240 - 产品 'Melodic Mind' 已存在,跳过分析 +2025-11-26 23:16:59.853 | INFO | __main__:analyze_products:292 - 跳过已存在产品,当前进度: 7/360 +2025-11-26 23:16:59.853 | INFO | __main__:analyze_products:287 - +分析进度: 8/360 - agor +2025-11-26 23:16:59.853 | INFO | __main__:check_product_exists:240 - 产品 'agor' 已存在,跳过分析 +2025-11-26 23:16:59.854 | INFO | __main__:analyze_products:292 - 跳过已存在产品,当前进度: 8/360 +2025-11-26 23:16:59.854 | INFO | __main__:analyze_products:287 - +分析进度: 9/360 - QuiteInbox +2025-11-26 23:16:59.854 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 9/360 +2025-11-26 23:16:59.854 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: QuiteInbox +2025-11-26 23:17:42.135 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: QuiteInbox +2025-11-26 23:17:42.135 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:17:42.135 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='QuiteInbox', 简介='几秒钟内退订不需要的邮件。无需服务器。无跟踪。所有操作都在浏...', 难度='一个人开发难度中等' +2025-11-26 23:17:42.141 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: QuiteInbox +2025-11-26 23:17:42.142 | SUCCESS | __main__:analyze_products:314 - 产品 'QuiteInbox' 分析完成,进度: 9/360 +2025-11-26 23:17:42.142 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:17:44.142 | INFO | __main__:analyze_products:287 - +分析进度: 10/360 - Everywhere +2025-11-26 23:17:44.143 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 10/360 +2025-11-26 23:17:44.143 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Everywhere +2025-11-26 23:18:27.503 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Everywhere +2025-11-26 23:18:27.505 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:18:27.506 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Everywhere', 简介='致力于将AI从浏览器标签页和独立应用中解放出来,使其成为操作...', 难度='一个人开发难度较高' +2025-11-26 23:18:27.510 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Everywhere +2025-11-26 23:18:27.510 | SUCCESS | __main__:analyze_products:314 - 产品 'Everywhere' 分析完成,进度: 10/360 +2025-11-26 23:18:27.510 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:18:29.511 | INFO | __main__:analyze_products:287 - +分析进度: 11/360 - Taskade +2025-11-26 23:18:29.511 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 11/360 +2025-11-26 23:18:29.512 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Taskade +2025-11-26 23:19:15.177 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Taskade +2025-11-26 23:19:15.178 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:19:15.178 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Taskade', 简介='Taskade是活软件的起源。一个提示就能创建一个与你一起思...', 难度='一个人开发难度非常高' +2025-11-26 23:19:15.181 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Taskade +2025-11-26 23:19:15.182 | SUCCESS | __main__:analyze_products:314 - 产品 'Taskade' 分析完成,进度: 11/360 +2025-11-26 23:19:15.182 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:19:17.182 | INFO | __main__:analyze_products:287 - +分析进度: 12/360 - Apple +2025-11-26 23:19:17.182 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 12/360 +2025-11-26 23:19:17.183 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Apple +2025-11-26 23:19:35.540 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Apple +2025-11-26 23:19:35.540 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:19:35.541 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Apple', 简介='这是硬件和软件的创造者,以其iPhone、Mac、iPad、...', 难度='一个人开发难度极高,几乎不可能完整复制Apple生态系统。虽然AI辅助可以提高个人开发效率,帮助完成代码编写、设计等工作,但Apple产品的复杂性、规模和质量要求远超个人能力范围。硬件开发需要供应链、制造等资源,软件生态系统需要大量专业团队协作和长期积累,这些都不是AI能单独解决的。最多可能开发某个特定功能或小型产品,但无法达到Apple的规模和完整性。' +2025-11-26 23:19:35.545 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Apple +2025-11-26 23:19:35.545 | SUCCESS | __main__:analyze_products:314 - 产品 'Apple' 分析完成,进度: 12/360 +2025-11-26 23:19:35.545 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:19:37.545 | INFO | __main__:analyze_products:287 - +分析进度: 13/360 - Stream Ring by Sandbar +2025-11-26 23:19:37.546 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 13/360 +2025-11-26 23:19:37.546 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Stream Ring by Sandbar +2025-11-26 23:20:19.042 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Stream Ring by Sandbar +2025-11-26 23:20:19.043 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:20:19.043 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Stream Ring by Sandbar', 简介='Stream 是一个会话式的自我延伸工具。它旨在通过对话来梳...', 难度='一个人开发难度较高' +2025-11-26 23:20:19.045 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Stream Ring by Sandbar +2025-11-26 23:20:19.045 | SUCCESS | __main__:analyze_products:314 - 产品 'Stream Ring by Sandbar' 分析完成,进度: 13/360 +2025-11-26 23:20:19.045 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:20:21.046 | INFO | __main__:analyze_products:287 - +分析进度: 14/360 - Alpha Vantage +2025-11-26 23:20:21.046 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 14/360 +2025-11-26 23:20:21.047 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Alpha Vantage +2025-11-26 23:20:50.842 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Alpha Vantage +2025-11-26 23:20:50.843 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:20:50.843 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Alpha Vantage', 简介='由研究人员、工程师和商业专业人士组成的紧密社区,是实时和历史...', 难度='一个人开发难度极高' +2025-11-26 23:20:50.846 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Alpha Vantage +2025-11-26 23:20:50.846 | SUCCESS | __main__:analyze_products:314 - 产品 'Alpha Vantage' 分析完成,进度: 14/360 +2025-11-26 23:20:50.846 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:20:52.846 | INFO | __main__:analyze_products:287 - +分析进度: 15/360 - Helicone AI +2025-11-26 23:20:52.847 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 15/360 +2025-11-26 23:20:52.847 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Helicone AI +2025-11-26 23:21:26.809 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Helicone AI +2025-11-26 23:21:26.809 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:21:26.809 | WARNING | __main__:parse_ai_response:162 - 响应格式不符合预期: 产品名称:Helicone AI +产品简介:用于路由、调试和分析AI应用的开源网关,只需一行代码集成即可访问100多个模型,实现全面的可观测性、成本跟踪和提示分析,所有功能集于一身。全球增长最快的AI公司都在构建于Helicone之上。 +开发难度:一个人开发难度较高 +2025-11-26 23:21:26.814 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: +2025-11-26 23:21:26.814 | SUCCESS | __main__:analyze_products:314 - 产品 'Helicone AI' 分析完成,进度: 15/360 +2025-11-26 23:21:26.814 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:21:28.815 | INFO | __main__:analyze_products:287 - +分析进度: 16/360 - ROAARRR +2025-11-26 23:21:28.815 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 16/360 +2025-11-26 23:21:28.815 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: ROAARRR +2025-11-26 23:21:46.497 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: ROAARRR +2025-11-26 23:21:46.498 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:21:46.498 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='ROAARRR', 简介='不要再在多个分析平台之间切换。ROAARRR在一个简单的工具...', 难度='一个人开发难度中等偏高' +2025-11-26 23:21:46.502 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: ROAARRR +2025-11-26 23:21:46.502 | SUCCESS | __main__:analyze_products:314 - 产品 'ROAARRR' 分析完成,进度: 16/360 +2025-11-26 23:21:46.502 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:21:48.502 | INFO | __main__:analyze_products:287 - +分析进度: 17/360 - Nexorify +2025-11-26 23:21:48.503 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 17/360 +2025-11-26 23:21:48.503 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Nexorify +2025-11-26 23:22:07.589 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Nexorify +2025-11-26 23:22:07.589 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:22:07.589 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Nexorify', 简介='这个产品将用户的语音即时转化为提醒事项和日历事件—无需打字,...', 难度='开发难度中等' +2025-11-26 23:22:07.594 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Nexorify +2025-11-26 23:22:07.594 | SUCCESS | __main__:analyze_products:314 - 产品 'Nexorify' 分析完成,进度: 17/360 +2025-11-26 23:22:07.594 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:22:09.595 | INFO | __main__:analyze_products:287 - +分析进度: 18/360 - Packmind Open Source +2025-11-26 23:22:09.595 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 18/360 +2025-11-26 23:22:09.596 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Packmind Open Source +2025-11-26 23:22:41.887 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Packmind Open Source +2025-11-26 23:22:41.887 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:22:41.888 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Packmind Open Source', 简介='AI助手编码速度快——但如果缺乏强大且共享的上下文,它们会放...', 难度='一个人开发难度较高' +2025-11-26 23:22:41.892 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Packmind Open Source +2025-11-26 23:22:41.893 | SUCCESS | __main__:analyze_products:314 - 产品 'Packmind Open Source' 分析完成,进度: 18/360 +2025-11-26 23:22:41.893 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:22:43.894 | INFO | __main__:analyze_products:287 - +分析进度: 19/360 - Fire Your QA Today +2025-11-26 23:22:43.894 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 19/360 +2025-11-26 23:22:43.895 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Fire Your QA Today +2025-11-26 23:23:35.620 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Fire Your QA Today +2025-11-26 23:23:35.621 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:23:35.621 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Fire Your QA Today', 简介='将您的屏幕录像转变为一个完全自主的QA代理。无需脚本或API...', 难度='一个人开发难度较高 + +详细分析: +一个人加上AI辅助开发这个产品具有挑战性但可行。这个产品需要整合屏幕录制分析、计算机视觉、AI理解和自动化测试技术。主要难点包括: +1. 需要先进的AI模型来理解屏幕内容和用户意图 +2. 必须处理各种不同UI结构的Web应用和系统 +3. 需要实现精确的元素识别和交互模拟 +4. 测试结果的准确性和异常处理需要复杂逻辑 + +虽然可以利用现有AI工具(如GPT-4)和自动化测试框架(如Selenium)加速开发,但要创建一个稳定可靠的产品仍需大量专业知识和时间投入,特别是在AI模型优化和跨平台兼容性方面。' +2025-11-26 23:23:35.625 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Fire Your QA Today +2025-11-26 23:23:35.625 | SUCCESS | __main__:analyze_products:314 - 产品 'Fire Your QA Today' 分析完成,进度: 19/360 +2025-11-26 23:23:35.625 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:23:37.626 | INFO | __main__:analyze_products:287 - +分析进度: 20/360 - MeDo by Baidu +2025-11-26 23:23:37.626 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 20/360 +2025-11-26 23:23:37.627 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: MeDo by Baidu +2025-11-26 23:24:09.708 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: MeDo by Baidu +2025-11-26 23:24:09.708 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:24:09.708 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='MeDo by Baidu', 简介='MeDo利用智能AI在几分钟内构建生产就绪的全栈应用程序——...', 难度='一个人开发难度较高' +2025-11-26 23:24:09.712 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: MeDo by Baidu +2025-11-26 23:24:09.712 | SUCCESS | __main__:analyze_products:314 - 产品 'MeDo by Baidu' 分析完成,进度: 20/360 +2025-11-26 23:24:09.712 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:24:11.713 | INFO | __main__:analyze_products:287 - +分析进度: 21/360 - OptySleep +2025-11-26 23:24:11.713 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 21/360 +2025-11-26 23:24:11.713 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: OptySleep +2025-11-26 23:24:52.184 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: OptySleep +2025-11-26 23:24:52.184 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:24:52.184 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='OptySleep', 简介='OptySleep帮助您发现真正改善睡眠的方法。运行简单的日...', 难度='一个人开发难度较高' +2025-11-26 23:24:52.189 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: OptySleep +2025-11-26 23:24:52.189 | SUCCESS | __main__:analyze_products:314 - 产品 'OptySleep' 分析完成,进度: 21/360 +2025-11-26 23:24:52.190 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:24:54.190 | INFO | __main__:analyze_products:287 - +分析进度: 22/360 - Lovelace +2025-11-26 23:24:54.191 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 22/360 +2025-11-26 23:24:54.191 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Lovelace +2025-11-26 23:25:27.272 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Lovelace +2025-11-26 23:25:27.274 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:25:27.274 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Lovelace', 简介='一款基于浏览器的 AI IDE,专为任何地点编码的开发者设计...', 难度='一个人开发难度较高' +2025-11-26 23:25:27.278 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Lovelace +2025-11-26 23:25:27.278 | SUCCESS | __main__:analyze_products:314 - 产品 'Lovelace' 分析完成,进度: 22/360 +2025-11-26 23:25:27.278 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:25:29.278 | INFO | __main__:analyze_products:287 - +分析进度: 23/360 - Aritect +2025-11-26 23:25:29.279 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 23/360 +2025-11-26 23:25:29.280 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Aritect +2025-11-26 23:26:01.030 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Aritect +2025-11-26 23:26:01.031 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:26:01.031 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Aritect', 简介='这个产品定位于三个强大趋势的交汇点:日益增加的信息过载、日益...', 难度='一个人开发难度极高' +2025-11-26 23:26:01.035 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Aritect +2025-11-26 23:26:01.035 | SUCCESS | __main__:analyze_products:314 - 产品 'Aritect' 分析完成,进度: 23/360 +2025-11-26 23:26:01.035 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:26:03.036 | INFO | __main__:analyze_products:287 - +分析进度: 24/360 - Perch +2025-11-26 23:26:03.038 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 24/360 +2025-11-26 23:26:03.038 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Perch +2025-11-26 23:26:54.233 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Perch +2025-11-26 23:26:54.234 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:26:54.234 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Perch', 简介='将您Mac的刘海屏转变为一个强大的生产力中心。直接从刘海屏与...', 难度='中等。一个人加上AI辅助可以开发这个产品,但需要macOS开发经验。AI可以帮助加速代码编写、API集成和调试过程,但系统级权限获取、跨版本兼容性和性能优化仍需人工处理。核心功能可能需要3-6个月完成,但完善和优化可能需要更长时间。' +2025-11-26 23:26:54.238 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Perch +2025-11-26 23:26:54.238 | SUCCESS | __main__:analyze_products:314 - 产品 'Perch' 分析完成,进度: 24/360 +2025-11-26 23:26:54.238 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:26:56.239 | INFO | __main__:analyze_products:287 - +分析进度: 25/360 - MCP Playground +2025-11-26 23:26:56.239 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 25/360 +2025-11-26 23:26:56.239 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: MCP Playground +2025-11-26 23:27:28.995 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: MCP Playground +2025-11-26 23:27:28.996 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:27:28.996 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='MCP Playground', 简介='这是一个基于网页的开发者工具,用于检查和测试模型上下文协议(...', 难度='一个人开发难度较高 + +详细分析:一个人加上AI辅助有可能开发这个产品,但面临一定挑战。首先,需要理解MCP协议规范,AI可以加速文档理解和代码生成。其次,需要构建交互式前端界面,AI可以提供UI设计和组件生成帮助。后端部分需要实现MCP协议通信和数据处理,AI也能辅助编写这部分逻辑。主要挑战在于:1)MCP协议的复杂性可能需要反复调试;2)交互式工具需要良好的用户体验设计;3)需要处理多种MCP服务器的兼容性。虽然AI可以大幅提升开发效率,但一个人完成整个产品仍需较长时间和持续学习,因此开发难度较高。' +2025-11-26 23:27:29.000 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: MCP Playground +2025-11-26 23:27:29.001 | SUCCESS | __main__:analyze_products:314 - 产品 'MCP Playground' 分析完成,进度: 25/360 +2025-11-26 23:27:29.001 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:27:31.002 | INFO | __main__:analyze_products:287 - +分析进度: 26/360 - Termdock +2025-11-26 23:27:31.003 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 26/360 +2025-11-26 23:27:31.003 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Termdock +2025-11-26 23:28:19.254 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Termdock +2025-11-26 23:28:19.254 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:28:19.254 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Termdock', 简介='这个是以终端为中心的AI开发环境,在一个界面中统一了多工作区...', 难度='一个人开发难度较高' +2025-11-26 23:28:19.258 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Termdock +2025-11-26 23:28:19.258 | SUCCESS | __main__:analyze_products:314 - 产品 'Termdock' 分析完成,进度: 26/360 +2025-11-26 23:28:19.259 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:28:21.259 | INFO | __main__:analyze_products:287 - +分析进度: 27/360 - Supernova.io +2025-11-26 23:28:21.259 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 27/360 +2025-11-26 23:28:21.260 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Supernova.io +2025-11-26 23:29:00.284 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Supernova.io +2025-11-26 23:29:00.284 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:29:00.284 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='产品名称:Supernova.io', 简介='产品简介:Supernova将您的产品开发之旅——从想法到原...', 难度='开发难度:一个人开发难度极高,几乎不可能在合理时间内完成一个功能完整、性能稳定的商业级产品。这需要一个团队的专业知识和协作,才能构建出Supernova这样复杂的设计系统平台。' +2025-11-26 23:29:00.289 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: 产品名称:Supernova.io +2025-11-26 23:29:00.289 | SUCCESS | __main__:analyze_products:314 - 产品 'Supernova.io' 分析完成,进度: 27/360 +2025-11-26 23:29:00.289 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:29:02.290 | INFO | __main__:analyze_products:287 - +分析进度: 28/360 - Softr +2025-11-26 23:29:02.290 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 28/360 +2025-11-26 23:29:02.291 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Softr +2025-11-26 23:29:31.752 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Softr +2025-11-26 23:29:31.752 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:29:31.752 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Softr', 简介='Softr是一个由AI驱动的无代码平台,能将您的电子表格和数...', 难度='一个人开发难度较高' +2025-11-26 23:29:31.758 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Softr +2025-11-26 23:29:31.758 | SUCCESS | __main__:analyze_products:314 - 产品 'Softr' 分析完成,进度: 28/360 +2025-11-26 23:29:31.758 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:29:33.759 | INFO | __main__:analyze_products:287 - +分析进度: 29/360 - Uneed +2025-11-26 23:29:33.759 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 29/360 +2025-11-26 23:29:33.760 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Uneed +2025-11-26 23:30:23.408 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Uneed +2025-11-26 23:30:23.409 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:30:23.409 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Uneed', 简介='Uneed是Product Hunt的最佳替代品...', 难度='一个人开发难度较高 + +详细分析: +一个人加上AI辅助可以开发Uneed这个产品,但难度较高。原因如下: + +1. 产品功能复杂度:Uneed作为Product Hunt的替代品,需要实现用户系统、产品提交、投票、评论、分类、搜索、排行榜等核心功能,每个功能模块都需要开发时间。 + +2. 技术挑战: + - 需要前后端开发能力 + - 数据库设计与优化 + - 用户界面设计 + - 可能需要实时通知系统 + - 图片处理与存储 + +3. AI辅助的作用: + - 可以帮助生成基础代码 + - 提供调试建议 + - 加速文档编写 + - 辅助测试用例生成 + - 提供设计灵感 + +4. 主要困难: + - 产品差异化:如何超越已有的Product Hunt + - 用户体验优化:需要不断迭代改进 + - 用户获取:新平台面临冷启动问题 + - 安全性与性能优化:需要专业知识 + +一个人加上AI可以在3-6个月内开发出基本功能版本,但要达到"最佳替代品"的标准,还需要长期的产品打磨和市场推广,这对个人开发者来说挑战较大。' +2025-11-26 23:30:23.416 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Uneed +2025-11-26 23:30:23.416 | SUCCESS | __main__:analyze_products:314 - 产品 'Uneed' 分析完成,进度: 29/360 +2025-11-26 23:30:23.416 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:30:25.416 | INFO | __main__:analyze_products:287 - +分析进度: 30/360 - Jinna.ai +2025-11-26 23:30:25.417 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 30/360 +2025-11-26 23:30:25.417 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Jinna.ai +2025-11-26 23:30:48.332 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Jinna.ai +2025-11-26 23:30:48.333 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:30:48.333 | WARNING | __main__:parse_ai_response:162 - 响应格式不符合预期: 产品名称:Jinna.ai +产品简介:在AI时代,企业将不再需要传统管理。每个个体创业者都将拥有一个自我运营的企业。Jinna今天自动化了商业中枯燥的方面,同时正在构建运行它的AI优先业务操作系统。 +开发难度:一个人开发难度中等偏高,可以利用AI辅助完成代码编写、UI设计等工作,但核心架构和复杂业务逻辑仍需人工决策,完整实现可能需要较长时间或团队协作。 +2025-11-26 23:30:48.338 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: +2025-11-26 23:30:48.338 | SUCCESS | __main__:analyze_products:314 - 产品 'Jinna.ai' 分析完成,进度: 30/360 +2025-11-26 23:30:48.339 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:30:50.339 | INFO | __main__:analyze_products:287 - +分析进度: 31/360 - WishfulMail +2025-11-26 23:30:50.339 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 31/360 +2025-11-26 23:30:50.339 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: WishfulMail +2025-11-26 23:31:18.257 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: WishfulMail +2025-11-26 23:31:18.258 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:31:18.258 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='WishfulMail', 简介='WishfulMail让孩子们能够安全地给圣诞老人、牙仙子、...', 难度='一个人加上AI辅助可以开发出基本功能,但要达到商业级质量和完全合规,开发难度中等偏高' +2025-11-26 23:31:18.263 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: WishfulMail +2025-11-26 23:31:18.263 | SUCCESS | __main__:analyze_products:314 - 产品 'WishfulMail' 分析完成,进度: 31/360 +2025-11-26 23:31:18.263 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:31:20.264 | INFO | __main__:analyze_products:287 - +分析进度: 32/360 - Context Link +2025-11-26 23:31:20.264 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 32/360 +2025-11-26 23:31:20.264 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Context Link +2025-11-26 23:31:59.871 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Context Link +2025-11-26 23:31:59.871 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:31:59.872 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Context Link', 简介='我们创建了Context Link,让AI工具能够了解您已经...', 难度='Claude' +2025-11-26 23:31:59.876 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Context Link +2025-11-26 23:31:59.876 | SUCCESS | __main__:analyze_products:314 - 产品 'Context Link' 分析完成,进度: 32/360 +2025-11-26 23:31:59.876 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:32:01.876 | INFO | __main__:analyze_products:287 - +分析进度: 33/360 - Golf +2025-11-26 23:32:01.877 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 33/360 +2025-11-26 23:32:01.877 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Golf +2025-11-26 23:32:18.870 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Golf +2025-11-26 23:32:18.871 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:32:18.871 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Golf防火墙', 简介='为暴露MCP服务器的公司提供的安全层。它保护您的MCP服务器...', 难度='一个人开发难度较高' +2025-11-26 23:32:18.874 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Golf防火墙 +2025-11-26 23:32:18.875 | SUCCESS | __main__:analyze_products:314 - 产品 'Golf' 分析完成,进度: 33/360 +2025-11-26 23:32:18.875 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:32:20.875 | INFO | __main__:analyze_products:287 - +分析进度: 34/360 - Firecrawl +2025-11-26 23:32:20.876 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 34/360 +2025-11-26 23:32:20.876 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Firecrawl +2025-11-26 23:33:00.255 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Firecrawl +2025-11-26 23:33:00.255 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:33:00.255 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Firecrawl', 简介='Firecrawl是从网络提取数据的最简单方式。开发者通过我...', 难度='一个人开发难度较高' +2025-11-26 23:33:00.259 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Firecrawl +2025-11-26 23:33:00.260 | SUCCESS | __main__:analyze_products:314 - 产品 'Firecrawl' 分析完成,进度: 34/360 +2025-11-26 23:33:00.260 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:33:02.260 | INFO | __main__:analyze_products:287 - +分析进度: 35/360 - Structa +2025-11-26 23:33:02.261 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 35/360 +2025-11-26 23:33:02.261 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Structa +2025-11-26 23:33:39.694 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Structa +2025-11-26 23:33:39.695 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:33:39.695 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Structa', 简介='通过可视化ER图将自然语言转化为生产就绪的数据库模式。与Ch...', 难度='一个人开发难度中等偏高 + +一个人加上AI辅助是有可能开发这个产品的,原因如下: + +1. 自然语言处理部分:AI可以辅助将自然语言转换为数据库结构,这是产品的核心功能之一。现代NLP模型已经能够理解基本的数据库关系和结构描述。 + +2. 可视化ER图:可以使用现有的图表库(如D3.js、Vis.js等)构建,AI可以帮助生成和优化这些可视化组件。 + +3. 点击编辑功能:这主要是前端交互设计,可以使用现代前端框架(如React、Vue)实现,AI可以提供代码生成和优化建议。 + +4. 错误验证和警告:AI可以帮助设计验证规则,并检测潜在的数据结构问题。 + +5. 多格式导出:SQL、Prisma和TypeScript的生成可以通过模板和AI辅助完成。 + +然而,挑战仍然存在: +- 需要全栈开发能力 +- 数据库专业知识必不可少 +- 用户体验设计需要时间和精力 +- 产品测试和优化需要大量工作 + +考虑到产品简介中提到"Built in 3 weeks",表明开发周期可以很短,结合AI辅助,一个人是有可能完成这个产品的,但需要较高的技术水平和全面的知识储备。' +2025-11-26 23:33:39.700 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Structa +2025-11-26 23:33:39.700 | SUCCESS | __main__:analyze_products:314 - 产品 'Structa' 分析完成,进度: 35/360 +2025-11-26 23:33:39.700 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:33:41.701 | INFO | __main__:analyze_products:287 - +分析进度: 36/360 - Dazl +2025-11-26 23:33:41.701 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 36/360 +2025-11-26 23:33:41.701 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Dazl +2025-11-26 23:33:59.674 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Dazl +2025-11-26 23:33:59.674 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:33:59.674 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Dazl', 简介='Dazl将生成式AI与直观的编辑工具相结合。构建应用程序,然...', 难度='一个人开发难度较高' +2025-11-26 23:33:59.678 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Dazl +2025-11-26 23:33:59.678 | SUCCESS | __main__:analyze_products:314 - 产品 'Dazl' 分析完成,进度: 36/360 +2025-11-26 23:33:59.679 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:34:01.680 | INFO | __main__:analyze_products:287 - +分析进度: 37/360 - Extra Thursday +2025-11-26 23:34:01.680 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 37/360 +2025-11-26 23:34:01.680 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Extra Thursday +2025-11-26 23:34:32.322 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Extra Thursday +2025-11-26 23:34:32.323 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:34:32.323 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Extra Thursday', 简介='我们正在构建一种更好的电子邮件方式。想象一下,如果ChatG...', 难度='一个人开发难度较高' +2025-11-26 23:34:32.327 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Extra Thursday +2025-11-26 23:34:32.327 | SUCCESS | __main__:analyze_products:314 - 产品 'Extra Thursday' 分析完成,进度: 37/360 +2025-11-26 23:34:32.327 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:34:34.328 | INFO | __main__:analyze_products:287 - +分析进度: 38/360 - Snyk +2025-11-26 23:34:34.328 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 38/360 +2025-11-26 23:34:34.329 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Snyk +2025-11-26 23:35:07.944 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Snyk +2025-11-26 23:35:07.944 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:35:07.944 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Snyk', 简介='Snyk是安全AI软件开发的领导者,通过释放开发人员生产力并...', 难度='一个人开发难度较高' +2025-11-26 23:35:07.949 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Snyk +2025-11-26 23:35:07.949 | SUCCESS | __main__:analyze_products:314 - 产品 'Snyk' 分析完成,进度: 38/360 +2025-11-26 23:35:07.949 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:35:09.950 | INFO | __main__:analyze_products:287 - +分析进度: 39/360 - EQUO +2025-11-26 23:35:09.950 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 39/360 +2025-11-26 23:35:09.950 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: EQUO +2025-11-26 23:35:49.465 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: EQUO +2025-11-26 23:35:49.466 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:35:49.466 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='EQUO', 简介='由极客为极客打造。EQUO是一个多智能体AI平台,提供个性化...', 难度='一个人开发难度较高' +2025-11-26 23:35:49.470 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: EQUO +2025-11-26 23:35:49.470 | SUCCESS | __main__:analyze_products:314 - 产品 'EQUO' 分析完成,进度: 39/360 +2025-11-26 23:35:49.470 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:35:51.471 | INFO | __main__:analyze_products:287 - +分析进度: 40/360 - Blindspot +2025-11-26 23:35:51.472 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 40/360 +2025-11-26 23:35:51.472 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Blindspot +2025-11-26 23:36:51.519 | ERROR | __main__:call_zhipu_ai_api:137 - 调用智谱AI API时出错: HTTPSConnectionPool(host='open.bigmodel.cn', port=443): Read timed out. (read timeout=60) +2025-11-26 23:36:51.519 | ERROR | __main__:analyze_products:316 - 分析失败: Blindspot +2025-11-26 23:36:51.519 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:36:53.520 | INFO | __main__:analyze_products:287 - +分析进度: 41/360 - Agora Store Builder +2025-11-26 23:36:53.521 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 41/360 +2025-11-26 23:36:53.521 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Agora Store Builder +2025-11-26 23:37:26.012 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Agora Store Builder +2025-11-26 23:37:26.013 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:37:26.013 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Agora Store Builder', 简介='几分钟内构建您的AI驱动的电子商务商店。我们帮助您推出一个内...', 难度='一个人开发难度较高' +2025-11-26 23:37:26.018 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Agora Store Builder +2025-11-26 23:37:26.018 | SUCCESS | __main__:analyze_products:314 - 产品 'Agora Store Builder' 分析完成,进度: 41/360 +2025-11-26 23:37:26.019 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:37:28.019 | INFO | __main__:analyze_products:287 - +分析进度: 42/360 - Arcitext.com +2025-11-26 23:37:28.020 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 42/360 +2025-11-26 23:37:28.021 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Arcitext.com +2025-11-26 23:38:01.719 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Arcitext.com +2025-11-26 23:38:01.720 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:38:01.721 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Arcitext', 简介='写作更快,保持风格一致。Arcitext分析您的文本并提取您...', 难度='一个人开发难度较高' +2025-11-26 23:38:01.726 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Arcitext +2025-11-26 23:38:01.726 | SUCCESS | __main__:analyze_products:314 - 产品 'Arcitext.com' 分析完成,进度: 42/360 +2025-11-26 23:38:01.727 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:38:03.727 | INFO | __main__:analyze_products:287 - +分析进度: 43/360 - Secure MCP Framework by Arcade.dev +2025-11-26 23:38:03.728 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 43/360 +2025-11-26 23:38:03.728 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Secure MCP Framework by Arcade.dev +2025-11-26 23:38:27.789 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Secure MCP Framework by Arcade.dev +2025-11-26 23:38:27.789 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:38:27.790 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Secure MCP Framework by Arcade.dev', 简介='arcade-mcp 是一个随您成长的MCP框架。使用内置的...', 难度='一个人开发难度较高' +2025-11-26 23:38:27.794 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Secure MCP Framework by Arcade.dev +2025-11-26 23:38:27.794 | SUCCESS | __main__:analyze_products:314 - 产品 'Secure MCP Framework by Arcade.dev' 分析完成,进度: 43/360 +2025-11-26 23:38:27.794 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:38:29.794 | INFO | __main__:analyze_products:287 - +分析进度: 44/360 - Floqer +2025-11-26 23:38:29.795 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 44/360 +2025-11-26 23:38:29.795 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Floqer +2025-11-26 23:39:01.475 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Floqer +2025-11-26 23:39:01.475 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:39:01.476 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Floqer', 简介='Floqer让RevOps(收入运营)和增长团队在几秒钟内自...', 难度='一个人开发难度较高' +2025-11-26 23:39:01.480 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Floqer +2025-11-26 23:39:01.480 | SUCCESS | __main__:analyze_products:314 - 产品 'Floqer' 分析完成,进度: 44/360 +2025-11-26 23:39:01.480 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:39:03.480 | INFO | __main__:analyze_products:287 - +分析进度: 45/360 - Expertise AI +2025-11-26 23:39:03.481 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 45/360 +2025-11-26 23:39:03.481 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Expertise AI +2025-11-26 23:39:43.274 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Expertise AI +2025-11-26 23:39:43.274 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:39:43.274 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Expertise AI', 简介='一个需求转化AI,通过实时吸引和筛选访问者,提供超个性化的网...', 难度='开发难度较高' +2025-11-26 23:39:43.280 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Expertise AI +2025-11-26 23:39:43.280 | SUCCESS | __main__:analyze_products:314 - 产品 'Expertise AI' 分析完成,进度: 45/360 +2025-11-26 23:39:43.280 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:39:45.281 | INFO | __main__:analyze_products:287 - +分析进度: 46/360 - Draftboard +2025-11-26 23:39:45.281 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 46/360 +2025-11-26 23:39:45.282 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Draftboard +2025-11-26 23:40:17.407 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Draftboard +2025-11-26 23:40:17.407 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:40:17.407 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Draftboard', 简介='这个产品是一个AI驱动的网络分析工具,它能自动映射你的专业网...', 难度='一个人开发难度较高' +2025-11-26 23:40:17.412 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Draftboard +2025-11-26 23:40:17.412 | SUCCESS | __main__:analyze_products:314 - 产品 'Draftboard' 分析完成,进度: 46/360 +2025-11-26 23:40:17.412 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:40:19.413 | INFO | __main__:analyze_products:287 - +分析进度: 47/360 - FlowBot +2025-11-26 23:40:19.413 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 47/360 +2025-11-26 23:40:19.413 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: FlowBot +2025-11-26 23:41:13.761 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: FlowBot +2025-11-26 23:41:13.761 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:41:13.761 | WARNING | __main__:parse_ai_response:162 - 响应格式不符合预期: 产品名称:FlowBot +产品简介:FlowBot将WhatsApp自动化转变为对话形式。描述您的需求 — FlowAgent会自动构建您的工作流程。通过拖放节点、实时分析和深度集成(Gmail、Google表格、日历),FlowBot帮助团队实现WhatsApp销售、支持和营销的自动化 — 无需设置,无需编码。 +开发难度:一个人开发难度较高 +2025-11-26 23:41:13.766 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: +2025-11-26 23:41:13.766 | SUCCESS | __main__:analyze_products:314 - 产品 'FlowBot' 分析完成,进度: 47/360 +2025-11-26 23:41:13.766 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:41:15.767 | INFO | __main__:analyze_products:287 - +分析进度: 48/360 - GitLaw +2025-11-26 23:41:15.768 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 48/360 +2025-11-26 23:41:15.768 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: GitLaw +2025-11-26 23:42:02.331 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: GitLaw +2025-11-26 23:42:02.332 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:42:02.332 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='产品名称', 简介='GitLaw +产品简介...', 难度='这是GitLaw,与GitLaw的代理聊天,几分钟内起草或审查法律文件。我们正在为数百万企业提供免费的法律文档。专为法律工作构建,像律师一样思考,使用结构化推理,比通用AI工具具有更高的准确性。提供值得信赖的开源模板,我们索引了数千份法律模板 - 结合了准确性、上下文和速度。一个无缝的工作流程,变更跟踪和版本控制,智能提醒,全部整合在一个地方。 +开发难度' +2025-11-26 23:42:02.337 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: 产品名称 +2025-11-26 23:42:02.337 | SUCCESS | __main__:analyze_products:314 - 产品 'GitLaw' 分析完成,进度: 48/360 +2025-11-26 23:42:02.337 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:42:04.337 | INFO | __main__:analyze_products:287 - +分析进度: 49/360 - Ancher +2025-11-26 23:42:04.338 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 49/360 +2025-11-26 23:42:04.338 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Ancher +2025-11-26 23:42:41.220 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Ancher +2025-11-26 23:42:41.221 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:42:41.221 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Ancher', 简介='这个产品是一个智能信息流平台,旨在帮助用户过滤噪音,提供有价...', 难度='一个人开发难度较高,虽然AI辅助可以加速开发过程,但要实现完整的个性化推荐、用户意图学习和高级内容分析功能仍面临较大挑战。' +2025-11-26 23:42:41.225 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Ancher +2025-11-26 23:42:41.225 | SUCCESS | __main__:analyze_products:314 - 产品 'Ancher' 分析完成,进度: 49/360 +2025-11-26 23:42:41.226 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:42:43.226 | INFO | __main__:analyze_products:287 - +分析进度: 50/360 - Sendr +2025-11-26 23:42:43.226 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 50/360 +2025-11-26 23:42:43.227 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Sendr +2025-11-26 23:43:42.952 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Sendr +2025-11-26 23:43:42.953 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:43:42.953 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Sendr', 简介='您的完整AI驱动的GTM(市场进入策略)套件。从一个拥有5亿...', 难度='一个人开发难度极高' +2025-11-26 23:43:42.957 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Sendr +2025-11-26 23:43:42.957 | SUCCESS | __main__:analyze_products:314 - 产品 'Sendr' 分析完成,进度: 50/360 +2025-11-26 23:43:42.957 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:43:44.958 | INFO | __main__:analyze_products:287 - +分析进度: 51/360 - Kimi AI - Now with K2 +2025-11-26 23:43:44.959 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 51/360 +2025-11-26 23:43:44.960 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Kimi AI - Now with K2 +2025-11-26 23:44:07.285 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Kimi AI - Now with K2 +2025-11-26 23:44:07.286 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:44:07.286 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Kimi AI - Now with K2', 简介='在100多个网站上实时网络搜索;轻松分析多达50个文件(PD...', 难度='一个人开发难度极高' +2025-11-26 23:44:07.289 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Kimi AI - Now with K2 +2025-11-26 23:44:07.290 | SUCCESS | __main__:analyze_products:314 - 产品 'Kimi AI - Now with K2' 分析完成,进度: 51/360 +2025-11-26 23:44:07.290 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:44:09.290 | INFO | __main__:analyze_products:287 - +分析进度: 52/360 - Layrr +2025-11-26 23:44:09.291 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 52/360 +2025-11-26 23:44:09.291 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Layrr +2025-11-26 23:44:44.338 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Layrr +2025-11-26 23:44:44.339 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:44:44.339 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Layrr', 简介='Layrr 为您的实际代码库提供类似 Framer 的可视化...', 难度='一个人开发难度较高' +2025-11-26 23:44:44.343 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Layrr +2025-11-26 23:44:44.344 | SUCCESS | __main__:analyze_products:314 - 产品 'Layrr' 分析完成,进度: 52/360 +2025-11-26 23:44:44.344 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:44:46.344 | INFO | __main__:analyze_products:287 - +分析进度: 53/360 - Groodles - Art Therapy App +2025-11-26 23:44:46.345 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 53/360 +2025-11-26 23:44:46.345 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Groodles - Art Therapy App +2025-11-26 23:45:19.660 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Groodles - Art Therapy App +2025-11-26 23:45:19.660 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:45:19.661 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='产品名称', 简介='Groodles - Art Therapy App +产品简...', 难度='Groodles是一款基于艺术的治疗应用,旨在促进正念和自我发现。它提供了在用户友好画布上的引导练习,包含语音指令和数百个插图。进入平静状态,发现更好的自己。 +开发难度' +2025-11-26 23:45:19.666 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: 产品名称 +2025-11-26 23:45:19.666 | SUCCESS | __main__:analyze_products:314 - 产品 'Groodles - Art Therapy App' 分析完成,进度: 53/360 +2025-11-26 23:45:19.666 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:45:21.666 | INFO | __main__:analyze_products:287 - +分析进度: 54/360 - Sourmize +2025-11-26 23:45:21.667 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 54/360 +2025-11-26 23:45:21.667 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Sourmize +2025-11-26 23:45:43.736 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Sourmize +2025-11-26 23:45:43.736 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:45:43.736 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Sourmize', 简介='将点击转化为洞察。AI生成完美的UTM参数、个性化短链接和分...', 难度='一个人开发难度中等偏高' +2025-11-26 23:45:43.741 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Sourmize +2025-11-26 23:45:43.741 | SUCCESS | __main__:analyze_products:314 - 产品 'Sourmize' 分析完成,进度: 54/360 +2025-11-26 23:45:43.741 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:45:45.741 | INFO | __main__:analyze_products:287 - +分析进度: 55/360 - Wagoo +2025-11-26 23:45:45.742 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 55/360 +2025-11-26 23:45:45.742 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Wagoo +2025-11-26 23:46:30.729 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: Wagoo +2025-11-26 23:46:30.729 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:46:30.729 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='Wagoo', 简介='Siri、Alexa和Google Assistant都做不...', 难度='一个人开发难度较高' +2025-11-26 23:46:30.734 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: Wagoo +2025-11-26 23:46:30.734 | SUCCESS | __main__:analyze_products:314 - 产品 'Wagoo' 分析完成,进度: 55/360 +2025-11-26 23:46:30.734 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:46:32.736 | INFO | __main__:analyze_products:287 - +分析进度: 56/360 - NocoBase +2025-11-26 23:46:32.736 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 56/360 +2025-11-26 23:46:32.736 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: NocoBase +2025-11-26 23:46:55.168 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: NocoBase +2025-11-26 23:46:55.169 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:46:55.169 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='NocoBase', 简介='完全掌控,无限扩展能力,赋能您的团队迅速适应变化并显著降低成...', 难度='一个人开发难度较高' +2025-11-26 23:46:55.175 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: NocoBase +2025-11-26 23:46:55.175 | SUCCESS | __main__:analyze_products:314 - 产品 'NocoBase' 分析完成,进度: 56/360 +2025-11-26 23:46:55.175 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:46:57.176 | INFO | __main__:analyze_products:287 - +分析进度: 57/360 - MyClone +2025-11-26 23:46:57.176 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 57/360 +2025-11-26 23:46:57.176 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: MyClone +2025-11-26 23:47:38.286 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: MyClone +2025-11-26 23:47:38.286 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:47:38.286 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='产品名称:MyClone +产品简介:MyClone是一个为知识专业人士构建的AI平台,旨在帮助他们扩展服务。请在https:', 简介='...', 难度='www.myclone.is' +2025-11-26 23:47:38.291 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: 产品名称:MyClone +产品简介:MyClone是一个为知识专业人士构建的AI平台,旨在帮助他们扩展服务。请在https: +2025-11-26 23:47:38.291 | SUCCESS | __main__:analyze_products:314 - 产品 'MyClone' 分析完成,进度: 57/360 +2025-11-26 23:47:38.291 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:47:40.292 | INFO | __main__:analyze_products:287 - +分析进度: 58/360 - BlogBowl +2025-11-26 23:47:40.292 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 58/360 +2025-11-26 23:47:40.292 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: BlogBowl +2025-11-26 23:48:17.155 | SUCCESS | __main__:call_zhipu_ai_api:130 - API调用成功: BlogBowl +2025-11-26 23:48:17.155 | INFO | __main__:analyze_products:303 - API调用成功,正在处理数据... +2025-11-26 23:48:17.155 | INFO | __main__:parse_ai_response:159 - 解析结果: 名称='BlogBowl', 简介='使用AI自动运行您的博客,AI能撰写经过研究支持、完全像人类...', 难度='一个人开发难度较高' +2025-11-26 23:48:17.159 | SUCCESS | __main__:save_analysis_result:212 - 保存分析结果成功: BlogBowl +2025-11-26 23:48:17.159 | SUCCESS | __main__:analyze_products:314 - 产品 'BlogBowl' 分析完成,进度: 58/360 +2025-11-26 23:48:17.159 | INFO | __main__:analyze_products:319 - 数据处理完成,等待2秒后继续... +2025-11-26 23:48:19.160 | INFO | __main__:analyze_products:287 - +分析进度: 59/360 - Compyle +2025-11-26 23:48:19.160 | INFO | __main__:analyze_products:296 - 正在提交API请求... 进度: 59/360 +2025-11-26 23:48:19.161 | INFO | __main__:call_zhipu_ai_api:118 - 调用智谱AI API分析产品: Compyle diff --git a/product/product_ai_analysis.py b/product/product_ai_analysis.py new file mode 100644 index 0000000..14bc421 --- /dev/null +++ b/product/product_ai_analysis.py @@ -0,0 +1,346 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +产品AI分析脚本 +读取SQLite数据库中的产品信息,调用智谱AI API进行分析,并将结果存储到新表中 +""" + +import sqlite3 +import os +import time +from typing import List, Tuple, Optional +from loguru import logger + +# 智谱AI API相关 +import requests +import json + +class ProductAIAnalyzer: + """产品AI分析器""" + + def __init__(self, api_key: str, db_path: str = "products.db"): + """ + 初始化分析器 + + Args: + api_key: 智谱AI API密钥 + db_path: 数据库文件路径 + """ + self.api_key = api_key + self.db_path = db_path + self.api_url = "https://open.bigmodel.cn/api/paas/v4/chat/completions" + + # 检查数据库文件是否存在 + if not os.path.exists(db_path): + raise FileNotFoundError(f"数据库文件不存在: {db_path}") + + logger.info(f"初始化产品AI分析器,数据库: {db_path}") + + def connect_to_database(self) -> sqlite3.Connection: + """连接到SQLite数据库""" + try: + conn = sqlite3.connect(self.db_path) + logger.success(f"成功连接到数据库: {self.db_path}") + return conn + except Exception as e: + logger.error(f"连接数据库失败: {e}") + raise + + def get_product_data(self, conn: sqlite3.Connection) -> List[Tuple]: + """ + 从数据库获取产品数据 + + Args: + conn: 数据库连接 + + Returns: + 产品数据列表,每个元素为(id, name, introduction) + """ + try: + cursor = conn.cursor() + + # 查询products表中的name和introduction字段 + cursor.execute(""" + SELECT id, name, introduction + FROM products + WHERE name IS NOT NULL AND introduction IS NOT NULL + AND name != '' AND introduction != '' + """) + + products = cursor.fetchall() + logger.info(f"从数据库获取到 {len(products)} 个产品") + + # 显示前几个产品作为示例 + for i, (id, name, intro) in enumerate(products[:3], 1): + logger.info(f"示例产品{i}: ID={id}, 名称='{name}', 简介='{intro[:50]}...'") + + return products + + except Exception as e: + logger.error(f"获取产品数据失败: {e}") + raise + + def call_zhipu_ai_api(self, name: str, introduction: str) -> Optional[str]: + """ + 调用智谱AI API进行分析 + + Args: + name: 产品名称 + introduction: 产品简介 + + Returns: + API响应内容,失败时返回None + """ + try: + # 构建请求数据 + messages = [ + { + "role": "system", + "content": "你是一个有用的AI助手。" + }, + { + "role": "user", + "content": f"这个是【{name}】,简介内容是【{introduction}】。请把产品的简介翻译成中文,并返回假设一个人加上AI辅助能否开发这个产品,请详细回答。返回的内容是产品名称/产品简介/开发难度。返回的例子一:notion/这个是笔记产品等等/一个人开发难度较高" + } + ] + + data = { + "model": "GLM-4.5-Flash", + "messages": messages, + "temperature": 0.6 + } + + headers = { + "Authorization": f"Bearer {self.api_key}", + "Content-Type": "application/json" + } + + logger.info(f"调用智谱AI API分析产品: {name}") + + response = requests.post( + self.api_url, + headers=headers, + data=json.dumps(data, ensure_ascii=False), + timeout=60 + ) + + if response.status_code == 200: + result = response.json() + content = result["choices"][0]["message"]["content"] + logger.success(f"API调用成功: {name}") + return content + else: + logger.error(f"API调用失败: {response.status_code}, {response.text}") + return None + + except Exception as e: + logger.error(f"调用智谱AI API时出错: {e}") + return None + + def parse_ai_response(self, response: str) -> Tuple[str, str, str]: + """ + 解析AI响应内容 + + Args: + response: AI响应内容 + + Returns: + (产品名称, 产品简介, 开发难度) + """ + try: + # 使用/分割响应内容 + parts = response.split('/') + + if len(parts) >= 3: + product_name = parts[0].strip() + product_intro = parts[1].strip() + difficulty = parts[2].strip() + + logger.info(f"解析结果: 名称='{product_name}', 简介='{product_intro[:30]}...', 难度='{difficulty}'") + return product_name, product_intro, difficulty + else: + logger.warning(f"响应格式不符合预期: {response}") + # 如果格式不符合,返回原始内容 + return "", response, "" + + except Exception as e: + logger.error(f"解析AI响应失败: {e}") + return "", response, "" + + def create_analysis_table(self, conn: sqlite3.Connection): + """创建分析结果表""" + try: + cursor = conn.cursor() + + # 创建分析结果表 + cursor.execute(""" + CREATE TABLE IF NOT EXISTS product_analysis ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + original_id INTEGER, + original_name TEXT, + product_name TEXT, + product_intro TEXT, + development_difficulty TEXT, + ai_response TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (original_id) REFERENCES products (id) + ) + """) + + conn.commit() + logger.success("创建分析结果表成功") + + except Exception as e: + logger.error(f"创建分析结果表失败: {e}") + raise + + def save_analysis_result(self, conn: sqlite3.Connection, + original_id: int, original_name: str, + product_name: str, product_intro: str, + difficulty: str, ai_response: str): + """保存分析结果到数据库""" + try: + cursor = conn.cursor() + + cursor.execute(""" + INSERT INTO product_analysis + (original_id, original_name, product_name, product_intro, development_difficulty, ai_response) + VALUES (?, ?, ?, ?, ?, ?) + """, (original_id, original_name, product_name, product_intro, difficulty, ai_response)) + + conn.commit() + logger.success(f"保存分析结果成功: {product_name}") + + except Exception as e: + logger.error(f"保存分析结果失败: {e}") + raise + + def check_product_exists(self, conn: sqlite3.Connection, original_name: str) -> bool: + """ + 检查产品是否已存在于分析结果表中 + + Args: + conn: 数据库连接 + original_name: 原始产品名称 + + Returns: + 如果产品已存在返回True,否则返回False + """ + try: + cursor = conn.cursor() + cursor.execute(""" + SELECT COUNT(*) FROM product_analysis + WHERE original_name = ? + """, (original_name,)) + + count = cursor.fetchone()[0] + exists = count > 0 + + if exists: + logger.info(f"产品 '{original_name}' 已存在,跳过分析") + + return exists + + except Exception as e: + logger.error(f"检查产品存在性失败: {e}") + return False + + def analyze_products(self, max_products: int = None): + """ + 分析产品数据 + + Args: + max_products: 最大分析产品数量,None表示分析所有产品 + """ + if max_products is None: + logger.info("开始分析所有产品数据") + else: + logger.info(f"开始分析产品数据,最大数量: {max_products}") + + conn = None + try: + # 连接数据库 + conn = self.connect_to_database() + + # 创建分析结果表 + self.create_analysis_table(conn) + + # 获取产品数据 + products = self.get_product_data(conn) + + if not products: + logger.warning("没有找到可分析的产品数据") + return + + # 限制分析数量 + if max_products is not None: + products_to_analyze = products[:max_products] + else: + products_to_analyze = products + + logger.info(f"准备分析 {len(products_to_analyze)} 个产品") + + # 逐个分析产品 + success_count = 0 + skip_count = 0 + for i, (original_id, name, introduction) in enumerate(products_to_analyze, 1): + logger.info(f"\n分析进度: {i}/{len(products_to_analyze)} - {name}") + + # 检查产品是否已存在 + if self.check_product_exists(conn, name): + skip_count += 1 + logger.info(f"跳过已存在产品,当前进度: {i}/{len(products_to_analyze)}") + continue + + # 显示API调用状态 + logger.info(f"正在提交API请求... 进度: {i}/{len(products_to_analyze)}") + + # 调用AI API + ai_response = self.call_zhipu_ai_api(name, introduction) + + if ai_response: + # 显示数据处理状态 + logger.info(f"API调用成功,正在处理数据...") + + # 解析响应 + product_name, product_intro, difficulty = self.parse_ai_response(ai_response) + + # 保存结果 + self.save_analysis_result(conn, original_id, name, + product_name, product_intro, difficulty, ai_response) + success_count += 1 + + # 显示完成状态 + logger.success(f"产品 '{name}' 分析完成,进度: {i}/{len(products_to_analyze)}") + else: + logger.error(f"分析失败: {name}") + + # 处理完数据后延时2秒 + logger.info("数据处理完成,等待2秒后继续...") + time.sleep(2) + + logger.success(f"分析完成! 成功分析 {success_count} 个产品,跳过 {skip_count} 个已存在产品") + + except Exception as e: + logger.error(f"分析过程中出错: {e}") + finally: + if conn: + conn.close() + logger.info("数据库连接已关闭") + +def main(): + """主函数""" + # 配置日志 + logger.add("product_ai_analysis.log", rotation="10 MB", level="INFO") + + # 智谱AI API密钥(请替换为您的实际密钥) + api_key = "fad3d9f9a45f4d939f0e7a7133fa07bf.X4bOO053GAIPKLE5" + + # 创建分析器 + analyzer = ProductAIAnalyzer(api_key) + + # 开始分析(默认分析所有产品) + analyzer.analyze_products(max_products=None) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/product/products.db b/product/products.db index e8d2485..bf62088 100644 Binary files a/product/products.db and b/product/products.db differ diff --git a/product/sqlite_viewer.log b/product/sqlite_viewer.log new file mode 100644 index 0000000..3acafaa --- /dev/null +++ b/product/sqlite_viewer.log @@ -0,0 +1,75 @@ +2025-11-26 22:30:21.718 | INFO | sqlite_viewer:__init__:26 - 初始化SQLite数据库查看器 +2025-11-26 22:30:21.718 | INFO | sqlite_viewer:init_ui:33 - 设置主窗口界面 +2025-11-26 22:30:21.720 | INFO | sqlite_viewer:create_top_buttons:60 - 创建顶部按钮 +2025-11-26 22:30:21.726 | INFO | sqlite_viewer:create_splitter:83 - 创建分割器界面 +2025-11-26 22:30:21.750 | INFO | sqlite_viewer:create_status_bar:112 - 创建状态栏 +2025-11-26 22:30:21.752 | INFO | sqlite_viewer:create_menubar:119 - 创建菜单栏 +2025-11-26 22:30:21.776 | INFO | sqlite_viewer:init_ui:56 - 界面初始化完成 +2025-11-26 22:30:21.936 | INFO | sqlite_viewer:main:271 - 应用程序启动完成 +2025-11-26 22:38:21.031 | INFO | sqlite_viewer:open_database:135 - 打开数据库文件对话框 +2025-11-26 22:38:29.485 | INFO | sqlite_viewer:open_database:149 - 打开数据库文件: C:/Users/xiaji/Documents/个人文件夹/夏骥/hothub的抓取/product/products.db +2025-11-26 22:38:29.487 | INFO | sqlite_viewer:connect_to_database:159 - 数据库连接成功 +2025-11-26 22:38:29.488 | INFO | sqlite_viewer:load_table_list:187 - 加载了 2 个表 +2025-11-26 22:38:32.263 | INFO | sqlite_viewer:on_table_selected:197 - 选中表: products +2025-11-26 22:38:32.274 | INFO | sqlite_viewer:load_table_data:232 - 加载表 products 数据完成,共 363 行 +2025-11-26 22:38:32.967 | INFO | sqlite_viewer:on_table_selected:197 - 选中表: products +2025-11-26 22:41:28.425 | INFO | sqlite_viewer:__init__:26 - 初始化SQLite数据库查看器 +2025-11-26 22:41:28.425 | INFO | sqlite_viewer:init_ui:33 - 设置主窗口界面 +2025-11-26 22:41:28.425 | INFO | sqlite_viewer:create_top_buttons:60 - 创建顶部按钮 +2025-11-26 22:41:28.426 | INFO | sqlite_viewer:create_splitter:83 - 创建分割器界面 +2025-11-26 22:41:28.431 | INFO | sqlite_viewer:create_status_bar:112 - 创建状态栏 +2025-11-26 22:41:28.431 | INFO | sqlite_viewer:create_menubar:119 - 创建菜单栏 +2025-11-26 22:41:28.443 | INFO | sqlite_viewer:init_ui:56 - 界面初始化完成 +2025-11-26 22:41:28.573 | INFO | sqlite_viewer:main:271 - 应用程序启动完成 +2025-11-26 22:41:30.668 | INFO | sqlite_viewer:open_database:135 - 打开数据库文件对话框 +2025-11-26 22:41:32.817 | INFO | sqlite_viewer:open_database:149 - 打开数据库文件: C:/Users/xiaji/Documents/个人文件夹/夏骥/hothub的抓取/product/products.db +2025-11-26 22:41:32.818 | INFO | sqlite_viewer:connect_to_database:159 - 数据库连接成功 +2025-11-26 22:41:32.819 | INFO | sqlite_viewer:load_table_list:187 - 加载了 2 个表 +2025-11-26 22:41:35.064 | INFO | sqlite_viewer:on_table_selected:197 - 选中表: products +2025-11-26 22:41:35.072 | INFO | sqlite_viewer:load_table_data:232 - 加载表 products 数据完成,共 363 行 +2025-11-26 22:41:56.841 | INFO | sqlite_viewer:on_table_selected:197 - 选中表: sqlite_sequence +2025-11-26 22:41:56.844 | INFO | sqlite_viewer:load_table_data:232 - 加载表 sqlite_sequence 数据完成,共 1 行 +2025-11-26 22:41:58.405 | INFO | sqlite_viewer:on_table_selected:197 - 选中表: products +2025-11-26 22:41:58.431 | INFO | sqlite_viewer:load_table_data:232 - 加载表 products 数据完成,共 363 行 +2025-11-26 22:42:23.194 | INFO | sqlite_viewer:closeEvent:249 - 关闭应用程序 +2025-11-26 22:42:26.912 | INFO | __main__:__init__:26 - 初始化SQLite数据库查看器 +2025-11-26 22:42:26.913 | INFO | __main__:init_ui:33 - 设置主窗口界面 +2025-11-26 22:42:26.913 | INFO | __main__:create_top_buttons:60 - 创建顶部按钮 +2025-11-26 22:42:26.914 | INFO | __main__:create_splitter:83 - 创建分割器界面 +2025-11-26 22:42:26.918 | INFO | __main__:create_status_bar:112 - 创建状态栏 +2025-11-26 22:42:26.919 | INFO | __main__:create_menubar:119 - 创建菜单栏 +2025-11-26 22:42:26.930 | INFO | __main__:init_ui:56 - 界面初始化完成 +2025-11-26 22:42:27.061 | INFO | __main__:main:271 - 应用程序启动完成 +2025-11-26 22:42:30.851 | INFO | __main__:open_database:135 - 打开数据库文件对话框 +2025-11-26 22:42:32.254 | INFO | __main__:open_database:149 - 打开数据库文件: C:/Users/xiaji/Documents/个人文件夹/夏骥/hothub的抓取/product/products.db +2025-11-26 22:42:32.254 | INFO | __main__:connect_to_database:159 - 数据库连接成功 +2025-11-26 22:42:32.255 | INFO | __main__:load_table_list:187 - 加载了 2 个表 +2025-11-26 22:42:33.747 | INFO | __main__:on_table_selected:197 - 选中表: products +2025-11-26 22:42:33.756 | INFO | __main__:load_table_data:232 - 加载表 products 数据完成,共 363 行 +2025-11-26 22:46:51.405 | INFO | __main__:closeEvent:249 - 关闭应用程序 +2025-11-26 22:50:54.320 | INFO | __main__:__init__:27 - 初始化SQLite数据库查看器 +2025-11-26 22:50:54.320 | INFO | __main__:init_ui:34 - 设置主窗口界面 +2025-11-26 22:50:54.321 | INFO | __main__:create_top_buttons:64 - 创建顶部按钮 +2025-11-26 22:50:54.321 | INFO | __main__:create_filter_section:87 - 创建筛选控件区域 +2025-11-26 22:50:54.330 | INFO | __main__:create_splitter:132 - 创建分割器界面 +2025-11-26 22:50:54.331 | INFO | __main__:create_status_bar:161 - 创建状态栏 +2025-11-26 22:50:54.331 | INFO | __main__:create_menubar:168 - 创建菜单栏 +2025-11-26 22:50:54.341 | INFO | __main__:init_ui:60 - 界面初始化完成 +2025-11-26 22:50:54.448 | INFO | __main__:main:426 - 应用程序启动完成 +2025-11-26 22:53:25.181 | INFO | __main__:__init__:27 - 初始化SQLite数据库查看器 +2025-11-26 22:53:25.182 | INFO | __main__:init_ui:34 - 设置主窗口界面 +2025-11-26 22:53:25.182 | INFO | __main__:create_top_buttons:64 - 创建顶部按钮 +2025-11-26 22:53:25.183 | INFO | __main__:create_filter_section:87 - 创建筛选控件区域 +2025-11-26 22:53:25.187 | INFO | __main__:create_splitter:132 - 创建分割器界面 +2025-11-26 22:53:25.188 | INFO | __main__:create_status_bar:161 - 创建状态栏 +2025-11-26 22:53:25.188 | INFO | __main__:create_menubar:168 - 创建菜单栏 +2025-11-26 22:53:25.199 | INFO | __main__:init_ui:60 - 界面初始化完成 +2025-11-26 22:53:25.340 | INFO | __main__:main:426 - 应用程序启动完成 +2025-11-26 22:53:27.659 | INFO | __main__:open_database:184 - 打开数据库文件对话框 +2025-11-26 22:53:29.435 | INFO | __main__:open_database:198 - 打开数据库文件: C:/Users/xiaji/Documents/个人文件夹/夏骥/hothub的抓取/product/products.db +2025-11-26 22:53:29.435 | INFO | __main__:connect_to_database:208 - 数据库连接成功 +2025-11-26 22:53:29.436 | INFO | __main__:load_table_list:236 - 加载了 2 个表 +2025-11-26 22:53:36.155 | INFO | __main__:on_table_selected:246 - 选中表: products +2025-11-26 22:53:36.163 | INFO | __main__:load_table_data:282 - 加载表 products 数据完成,共 363 行 +2025-11-26 22:53:36.164 | INFO | __main__:update_field_combo:312 - 更新字段下拉框: products, 共 9 个字段 +2025-11-26 22:54:02.226 | INFO | __main__:closeEvent:404 - 关闭应用程序 diff --git a/product/sqlite_viewer.py b/product/sqlite_viewer.py new file mode 100644 index 0000000..74a4836 --- /dev/null +++ b/product/sqlite_viewer.py @@ -0,0 +1,431 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +SQLite数据库查看器 - 基于PySide6 +功能:打开product目录下的product.db的sqlite文件,显示表和数据的界面 +""" + +import sys +import os +import sqlite3 +from loguru import logger + +from PySide6.QtWidgets import (QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, + QWidget, QPushButton, QTableWidget, QTableWidgetItem, + QListWidget, QListWidgetItem, QSplitter, QFileDialog, + QLabel, QStatusBar, QMessageBox, QHeaderView, QComboBox, + QLineEdit, QGroupBox) +from PySide6.QtCore import Qt +from PySide6.QtGui import QAction + + +class SQLiteViewer(QMainWindow): + """SQLite数据库查看器主窗口""" + + def __init__(self): + super().__init__() + logger.info("初始化SQLite数据库查看器") + self.db_connection = None + self.current_table = None + self.init_ui() + + def init_ui(self): + """初始化用户界面""" + logger.info("设置主窗口界面") + self.setWindowTitle("SQLite数据库查看器") + self.setGeometry(100, 100, 1200, 800) + + # 创建中央部件 + central_widget = QWidget() + self.setCentralWidget(central_widget) + + # 创建主布局 + main_layout = QVBoxLayout(central_widget) + + # 创建顶部按钮布局 + self.create_top_buttons(main_layout) + + # 创建筛选控件区域 + self.create_filter_section(main_layout) + + # 创建分割器(左侧表列表,右侧数据表格) + self.create_splitter(main_layout) + + # 创建状态栏 + self.create_status_bar() + + # 创建菜单栏 + self.create_menubar() + + logger.info("界面初始化完成") + + def create_top_buttons(self, layout): + """创建顶部按钮布局""" + logger.info("创建顶部按钮") + button_layout = QHBoxLayout() + + # 打开数据库按钮 + self.open_button = QPushButton("打开SQLite数据库") + self.open_button.clicked.connect(self.open_database) + button_layout.addWidget(self.open_button) + + # 刷新按钮 + self.refresh_button = QPushButton("刷新") + self.refresh_button.clicked.connect(self.refresh_data) + self.refresh_button.setEnabled(False) + button_layout.addWidget(self.refresh_button) + + # 数据库路径显示 + self.db_path_label = QLabel("未打开数据库") + button_layout.addWidget(self.db_path_label) + + button_layout.addStretch() + layout.addLayout(button_layout) + + def create_filter_section(self, layout): + """创建筛选控件区域""" + logger.info("创建筛选控件区域") + + # 创建筛选分组框 + filter_group = QGroupBox("数据筛选") + filter_layout = QHBoxLayout(filter_group) + + # 字段选择标签 + filter_layout.addWidget(QLabel("筛选字段:")) + + # 字段选择下拉框 + self.field_combo = QComboBox() + self.field_combo.setMinimumWidth(150) + filter_layout.addWidget(self.field_combo) + + # 筛选条件标签 + filter_layout.addWidget(QLabel("筛选条件:")) + + # 筛选条件输入框 + self.filter_input = QLineEdit() + self.filter_input.setPlaceholderText("输入筛选条件,如:name='test' 或 created_at>'2024-01-01'") + self.filter_input.setMinimumWidth(300) + filter_layout.addWidget(self.filter_input) + + # 筛选按钮 + self.filter_button = QPushButton("筛选") + self.filter_button.clicked.connect(self.apply_filter) + filter_layout.addWidget(self.filter_button) + + # 清除筛选按钮 + self.clear_filter_button = QPushButton("清除筛选") + self.clear_filter_button.clicked.connect(self.clear_filter) + self.clear_filter_button.setEnabled(False) + filter_layout.addWidget(self.clear_filter_button) + + filter_layout.addStretch() + + # 初始状态下禁用筛选控件 + self.field_combo.setEnabled(False) + self.filter_input.setEnabled(False) + self.filter_button.setEnabled(False) + + layout.addWidget(filter_group) + + def create_splitter(self, layout): + """创建分割器界面""" + logger.info("创建分割器界面") + splitter = QSplitter(Qt.Horizontal) + + # 左侧:表列表 + left_widget = QWidget() + left_layout = QVBoxLayout(left_widget) + + left_layout.addWidget(QLabel("数据库表列表:")) + self.table_list = QListWidget() + self.table_list.itemClicked.connect(self.on_table_selected) + left_layout.addWidget(self.table_list) + + # 右侧:数据表格 + right_widget = QWidget() + right_layout = QVBoxLayout(right_widget) + + right_layout.addWidget(QLabel("表数据:")) + self.data_table = QTableWidget() + self.data_table.setAlternatingRowColors(True) + right_layout.addWidget(self.data_table) + + splitter.addWidget(left_widget) + splitter.addWidget(right_widget) + splitter.setSizes([300, 900]) + + layout.addWidget(splitter) + + def create_status_bar(self): + """创建状态栏""" + logger.info("创建状态栏") + self.status_bar = QStatusBar() + self.setStatusBar(self.status_bar) + self.status_bar.showMessage("就绪") + + def create_menubar(self): + """创建菜单栏""" + logger.info("创建菜单栏") + menubar = self.menuBar() + + # 文件菜单 + file_menu = menubar.addMenu("文件") + + open_action = QAction("打开数据库", self) + open_action.triggered.connect(self.open_database) + file_menu.addAction(open_action) + + exit_action = QAction("退出", self) + exit_action.triggered.connect(self.close) + file_menu.addAction(exit_action) + + def open_database(self): + """打开SQLite数据库文件""" + logger.info("打开数据库文件对话框") + + # 默认打开product目录下的product.db + default_path = os.path.join('product', 'product.db') + if os.path.exists(default_path): + file_path, _ = QFileDialog.getOpenFileName( + self, "打开SQLite数据库", default_path, "SQLite数据库文件 (*.db *.sqlite *.sqlite3)" + ) + else: + file_path, _ = QFileDialog.getOpenFileName( + self, "打开SQLite数据库", "", "SQLite数据库文件 (*.db *.sqlite *.sqlite3)" + ) + + if file_path: + logger.info(f"打开数据库文件: {file_path}") + self.connect_to_database(file_path) + + def connect_to_database(self, file_path): + """连接到指定的SQLite数据库""" + try: + if self.db_connection: + self.db_connection.close() + + self.db_connection = sqlite3.connect(file_path) + logger.info("数据库连接成功") + + self.db_path_label.setText(f"数据库: {os.path.basename(file_path)}") + self.status_bar.showMessage(f"已连接到数据库: {os.path.basename(file_path)}") + self.refresh_button.setEnabled(True) + + # 加载表列表 + self.load_table_list() + + except sqlite3.Error as e: + logger.error(f"数据库连接失败: {e}") + QMessageBox.critical(self, "错误", f"无法打开数据库: {e}") + + def load_table_list(self): + """加载数据库表列表""" + if not self.db_connection: + return + + try: + cursor = self.db_connection.cursor() + cursor.execute("SELECT name FROM sqlite_master WHERE type='table'") + tables = cursor.fetchall() + + self.table_list.clear() + for table in tables: + item = QListWidgetItem(table[0]) + self.table_list.addItem(item) + + logger.info(f"加载了 {len(tables)} 个表") + self.status_bar.showMessage(f"已加载 {len(tables)} 个表") + + except sqlite3.Error as e: + logger.error(f"加载表列表失败: {e}") + QMessageBox.critical(self, "错误", f"加载表列表失败: {e}") + + def on_table_selected(self, item): + """当表被选中时加载表数据和字段列表""" + table_name = item.text() + logger.info(f"选中表: {table_name}") + self.current_table = table_name + self.load_table_data(table_name) + self.update_field_combo(table_name) + + def load_table_data(self, table_name): + """加载指定表的数据""" + if not self.db_connection: + return + + try: + cursor = self.db_connection.cursor() + + # 获取表结构 + cursor.execute(f"PRAGMA table_info({table_name})") + columns = cursor.fetchall() + column_names = [col[1] for col in columns] + + # 获取数据 + cursor.execute(f"SELECT * FROM {table_name}") + data = cursor.fetchall() + + # 设置表格 + self.data_table.setRowCount(len(data)) + self.data_table.setColumnCount(len(column_names)) + self.data_table.setHorizontalHeaderLabels(column_names) + + # 填充数据 + for row_idx, row_data in enumerate(data): + for col_idx, cell_data in enumerate(row_data): + item = QTableWidgetItem(str(cell_data) if cell_data is not None else "") + self.data_table.setItem(row_idx, col_idx, item) + + # 调整列宽 + self.data_table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) + + logger.info(f"加载表 {table_name} 数据完成,共 {len(data)} 行") + self.status_bar.showMessage(f"表 {table_name}: {len(data)} 行数据") + + except sqlite3.Error as e: + logger.error(f"加载表数据失败: {e}") + QMessageBox.critical(self, "错误", f"加载表数据失败: {e}") + + def update_field_combo(self, table_name): + """更新字段选择下拉框""" + if not self.db_connection: + return + + try: + cursor = self.db_connection.cursor() + cursor.execute(f"PRAGMA table_info({table_name})") + columns = cursor.fetchall() + + # 清空当前字段列表 + self.field_combo.clear() + + # 添加所有字段到下拉框 + for column in columns: + field_name = column[1] # 字段名在第二个位置 + self.field_combo.addItem(field_name) + + # 启用筛选控件 + self.field_combo.setEnabled(True) + self.filter_input.setEnabled(True) + self.filter_button.setEnabled(True) + + logger.info(f"更新字段下拉框: {table_name}, 共 {len(columns)} 个字段") + + except sqlite3.Error as e: + logger.error(f"获取表字段信息失败: {e}") + QMessageBox.warning(self, "错误", f"获取表字段信息失败: {e}") + + def apply_filter(self): + """应用筛选条件""" + if not self.db_connection or not self.current_table: + return + + selected_field = self.field_combo.currentText() + filter_condition = self.filter_input.text().strip() + + if not selected_field or not filter_condition: + QMessageBox.warning(self, "警告", "请选择筛选字段并输入筛选条件") + return + + try: + cursor = self.db_connection.cursor() + + # 构建SQL查询语句 + query = f"SELECT * FROM {self.current_table} WHERE {selected_field} LIKE ?" + + # 处理筛选条件(支持模糊匹配) + filter_value = f"%{filter_condition}%" + + # 执行查询 + cursor.execute(query, (filter_value,)) + data = cursor.fetchall() + + # 获取表结构 + cursor.execute(f"PRAGMA table_info({self.current_table})") + columns = cursor.fetchall() + column_names = [col[1] for col in columns] + + # 更新表格显示 + self.data_table.setRowCount(len(data)) + self.data_table.setColumnCount(len(column_names)) + self.data_table.setHorizontalHeaderLabels(column_names) + + # 填充筛选后的数据 + for row_idx, row_data in enumerate(data): + for col_idx, cell_data in enumerate(row_data): + item = QTableWidgetItem(str(cell_data) if cell_data is not None else "") + self.data_table.setItem(row_idx, col_idx, item) + + # 调整列宽 + self.data_table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) + + # 启用清除筛选按钮 + self.clear_filter_button.setEnabled(True) + + logger.info(f"应用筛选条件: {selected_field} LIKE '%{filter_condition}%', 匹配到 {len(data)} 行数据") + self.status_bar.showMessage(f"筛选结果: {len(data)} 行数据 (条件: {selected_field} 包含 '{filter_condition}')") + + except sqlite3.Error as e: + logger.error(f"筛选数据失败: {e}") + QMessageBox.critical(self, "错误", f"筛选数据失败: {e}") + + def clear_filter(self): + """清除筛选条件,显示所有数据""" + if not self.current_table: + return + + try: + # 重新加载完整数据 + self.load_table_data(self.current_table) + + # 清空筛选条件 + self.filter_input.clear() + + # 禁用清除筛选按钮 + self.clear_filter_button.setEnabled(False) + + logger.info("清除筛选条件,显示所有数据") + self.status_bar.showMessage("已清除筛选条件,显示所有数据") + + except Exception as e: + logger.error(f"清除筛选失败: {e}") + QMessageBox.critical(self, "错误", f"清除筛选失败: {e}") + + def refresh_data(self): + """刷新当前数据""" + logger.info("刷新数据") + if self.current_table: + self.load_table_data(self.current_table) + else: + self.load_table_list() + + def closeEvent(self, event): + """关闭事件处理""" + logger.info("关闭应用程序") + if self.db_connection: + self.db_connection.close() + event.accept() + + +def main(): + """主函数""" + logger.info("启动SQLite数据库查看器") + + # 配置日志 + logger.add("sqlite_viewer.log", rotation="10 MB", level="INFO") + + app = QApplication(sys.argv) + + # 设置应用程序信息 + app.setApplicationName("SQLite数据库查看器") + app.setApplicationVersion("1.0.0") + + viewer = SQLiteViewer() + viewer.show() + + logger.info("应用程序启动完成") + sys.exit(app.exec()) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/requirements_gui.txt b/requirements_gui.txt new file mode 100644 index 0000000..7996e9b --- /dev/null +++ b/requirements_gui.txt @@ -0,0 +1,8 @@ +# SQLite数据库查看器依赖包 +PySide6>=6.5.0 +loguru>=0.7.0 +pyqt-test>=1.0.0 + +# 可选:用于GUI测试的额外依赖 +pytest>=7.0.0 +pytest-qt>=4.0.0 \ No newline at end of file diff --git a/run_viewer.py b/run_viewer.py new file mode 100644 index 0000000..fee0095 --- /dev/null +++ b/run_viewer.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +SQLite数据库查看器启动脚本 +""" + +import sys +import os +from loguru import logger + +def check_dependencies(): + """检查依赖包""" + missing_deps = [] + + try: + import PySide6 + except ImportError: + missing_deps.append("PySide6") + + try: + import loguru + except ImportError: + missing_deps.append("loguru") + + if missing_deps: + print("❌ 缺少以下依赖包:") + for dep in missing_deps: + print(f" - {dep}") + print("\n请使用以下命令安装:") + print("pip install -r requirements_gui.txt") + return False + + return True + +def main(): + """主函数""" + logger.info("启动SQLite数据库查看器") + + # 检查依赖 + if not check_dependencies(): + sys.exit(1) + + # 导入主程序 + try: + from sqlite_viewer import main as viewer_main + except ImportError as e: + logger.error(f"导入主程序失败: {e}") + print("❌ 无法导入主程序,请检查文件是否存在") + sys.exit(1) + + # 运行主程序 + try: + viewer_main() + except Exception as e: + logger.error(f"程序运行错误: {e}") + print(f"❌ 程序运行错误: {e}") + sys.exit(1) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/sqlite_viewer.log b/sqlite_viewer.log new file mode 100644 index 0000000..a00f079 --- /dev/null +++ b/sqlite_viewer.log @@ -0,0 +1,17 @@ +2025-11-26 23:10:59.326 | INFO | __main__:__init__:27 - 初始化SQLite数据库查看器 +2025-11-26 23:10:59.327 | INFO | __main__:init_ui:34 - 设置主窗口界面 +2025-11-26 23:10:59.327 | INFO | __main__:create_top_buttons:64 - 创建顶部按钮 +2025-11-26 23:10:59.327 | INFO | __main__:create_filter_section:87 - 创建筛选控件区域 +2025-11-26 23:10:59.334 | INFO | __main__:create_splitter:132 - 创建分割器界面 +2025-11-26 23:10:59.335 | INFO | __main__:create_status_bar:161 - 创建状态栏 +2025-11-26 23:10:59.335 | INFO | __main__:create_menubar:168 - 创建菜单栏 +2025-11-26 23:10:59.344 | INFO | __main__:init_ui:60 - 界面初始化完成 +2025-11-26 23:10:59.494 | INFO | __main__:main:426 - 应用程序启动完成 +2025-11-26 23:11:01.008 | INFO | __main__:open_database:184 - 打开数据库文件对话框 +2025-11-26 23:11:03.377 | INFO | __main__:open_database:198 - 打开数据库文件: C:/Users/xiaji/Documents/个人文件夹/夏骥/hothub的抓取/product/products.db +2025-11-26 23:11:03.378 | INFO | __main__:connect_to_database:208 - 数据库连接成功 +2025-11-26 23:11:03.379 | INFO | __main__:load_table_list:236 - 加载了 3 个表 +2025-11-26 23:11:06.700 | INFO | __main__:on_table_selected:246 - 选中表: product_analysis +2025-11-26 23:11:06.701 | INFO | __main__:load_table_data:282 - 加载表 product_analysis 数据完成,共 5 行 +2025-11-26 23:11:06.701 | INFO | __main__:update_field_combo:312 - 更新字段下拉框: product_analysis, 共 8 个字段 +2025-11-26 23:11:49.497 | INFO | __main__:closeEvent:404 - 关闭应用程序