From 2afc24e6fb27690aa92131ca28ed3236ea117c41 Mon Sep 17 00:00:00 2001 From: sansan <77180927+sansan0@users.noreply.github.com> Date: Mon, 20 Oct 2025 21:41:24 +0800 Subject: [PATCH] =?UTF-8?q?v3.0.0=20AI=20=E6=99=BA=E8=83=BD=E5=88=86?= =?UTF-8?q?=E6=9E=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/crawler.yml | 2 +- README-Cherry-Studio.md | 144 ++ README-MCP-FAQ.md | 442 ++++++ _image/github-pages.png | Bin 227269 -> 264940 bytes docker/Dockerfile | 76 +- mcp_server/__init__.py | 7 + mcp_server/server.py | 657 ++++++++ mcp_server/services/__init__.py | 5 + mcp_server/services/cache_service.py | 136 ++ mcp_server/services/data_service.py | 564 +++++++ mcp_server/services/parser_service.py | 355 +++++ mcp_server/tools/__init__.py | 5 + mcp_server/tools/analytics.py | 1989 +++++++++++++++++++++++++ mcp_server/tools/config_mgmt.py | 66 + mcp_server/tools/data_query.py | 284 ++++ mcp_server/tools/search_tools.py | 664 +++++++++ mcp_server/tools/system.py | 465 ++++++ mcp_server/utils/__init__.py | 5 + mcp_server/utils/date_parser.py | 278 ++++ mcp_server/utils/errors.py | 93 ++ mcp_server/utils/validators.py | 324 ++++ pyproject.toml | 25 + readme.md | 111 +- requirements.txt | 8 +- setup-mac.sh | 118 ++ setup-windows.bat | 114 ++ start-http.bat | 25 + start-http.sh | 21 + version | 2 +- 29 files changed, 6931 insertions(+), 54 deletions(-) create mode 100644 README-Cherry-Studio.md create mode 100644 README-MCP-FAQ.md create mode 100644 mcp_server/__init__.py create mode 100644 mcp_server/server.py create mode 100644 mcp_server/services/__init__.py create mode 100644 mcp_server/services/cache_service.py create mode 100644 mcp_server/services/data_service.py create mode 100644 mcp_server/services/parser_service.py create mode 100644 mcp_server/tools/__init__.py create mode 100644 mcp_server/tools/analytics.py create mode 100644 mcp_server/tools/config_mgmt.py create mode 100644 mcp_server/tools/data_query.py create mode 100644 mcp_server/tools/search_tools.py create mode 100644 mcp_server/tools/system.py create mode 100644 mcp_server/utils/__init__.py create mode 100644 mcp_server/utils/date_parser.py create mode 100644 mcp_server/utils/errors.py create mode 100644 mcp_server/utils/validators.py create mode 100644 pyproject.toml create mode 100644 setup-mac.sh create mode 100644 setup-windows.bat create mode 100644 start-http.bat create mode 100644 start-http.sh diff --git a/.github/workflows/crawler.yml b/.github/workflows/crawler.yml index cb0e231..bec1508 100644 --- a/.github/workflows/crawler.yml +++ b/.github/workflows/crawler.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.9" + python-version: "3.10" - name: Install dependencies run: | diff --git a/README-Cherry-Studio.md b/README-Cherry-Studio.md new file mode 100644 index 0000000..bd59711 --- /dev/null +++ b/README-Cherry-Studio.md @@ -0,0 +1,144 @@ +# TrendRadar × Cherry Studio 部署指南 🍒 + +> **适合人群**:零编程基础的用户 +> **客户端**:Cherry Studio(免费开源 GUI 客户端) + +--- + +## 📥 第一步:下载 Cherry Studio + +### Windows 用户 + +访问官网下载:https://cherry-ai.com/ +或直接下载:[Cherry-Studio-Windows.exe](https://github.com/kangfenmao/cherry-studio/releases/latest) + +### Mac 用户 + +访问官网下载:https://cherry-ai.com/ +或直接下载:[Cherry-Studio-Mac.dmg](https://github.com/kangfenmao/cherry-studio/releases/latest) + + +--- + +## 📦 第二步:获取项目代码 + +为什么需要获取项目代码? + +AI 分析功能需要读取项目中的新闻数据才能工作。无论你使用 GitHub Actions 还是 Docker 部署,爬虫生成的新闻数据都保存在项目的 output 目录中。因此,在配置 MCP 服务器之前,需要先获取完整的项目代码(包含数据文件)。 + +根据你的技术水平,可以选择以下任一方式获取:: + +### 方法一:Git Clone(推荐给技术用户) + +如果你熟悉 Git,可以使用以下命令克隆项目: + +```bash +git clone https://github.com/你的用户名/你的项目名.git +cd 你的项目名 +``` + +**优点**: + +- 可以随时拉取一个命令就可以更新最新数据到本地了(`git pull`) + +### 方法二:直接下载 ZIP 压缩包(推荐给初学者) + + +1. **访问 GitHub 项目页面** + + - 项目链接:`https://github.com/你的用户名/你的项目名` + +2. **下载压缩包** + + - 点击绿色的 "Code" 按钮 + - 选择 "Download ZIP" + - 或直接访问:`https://github.com/你的用户名/你的项目名/archive/refs/heads/master.zip` + + +**注意事项**: + +- 步骤稍微麻烦,后续更新数据需要重复上面步骤,然后覆盖本地数据(output 目录) + +--- + +## 🚀 第三步:一键部署 MCP 服务器 + +### Windows 用户 + +1. **双击运行**项目文件夹中的 `setup-windows.bat` +2. **等待安装完成** +3. **记录显示的配置信息**(命令路径和参数) + +### Mac 用户 + +1. **打开终端**(在启动台搜索"终端") +2. **拖拽**项目文件夹中的 `setup-mac.sh` 到终端窗口 +3. **按回车键** +4. **记录显示的配置信息** + +--- + +## 🔧 第四步:配置 Cherry Studio + +### 1. 打开设置 + +启动 Cherry Studio,点击右上角 ⚙️ **设置** 按钮 + +### 2. 添加 MCP 服务器 + +在设置页面找到:**MCP** → 点击 **添加** + +### 3. 填写配置(重要!) + +根据刚才的安装脚本显示的信息填写 + +### 4. 保存并启用 + +- 点击 **保存** 按钮 +- 确保 MCP 服务器列表中的开关是 **开启** 状态 ✅ + +--- + +## ✅ 第五步:验证是否成功 + +### 1. 测试连接 + +在 Cherry Studio 的对话框中输入: + +``` +帮我爬取最新的新闻 +``` + +### 2. 成功标志 + +如果配置成功,AI 会: + +- ✅ 调用 TrendRadar 工具 +- ✅ 返回真实的新闻数据 +- ✅ 显示平台、标题、排名等信息 + + +--- + +## 🎯 进阶配置 + +### HTTP 模式(可选) + +如果需要远程访问或多客户端共享,可以使用 HTTP 模式: + +#### Windows + +双击运行 `start-http.bat` + +#### Mac + +```bash +./start-http.sh +``` + +然后在 Cherry Studio 中配置: + +``` +类型: streamableHttp +URL: http://localhost:3333/mcp +``` diff --git a/README-MCP-FAQ.md b/README-MCP-FAQ.md new file mode 100644 index 0000000..6e30dbc --- /dev/null +++ b/README-MCP-FAQ.md @@ -0,0 +1,442 @@ +# TrendRadar MCP 工具使用问答 + +> AI 提问指南 - 如何通过对话使用新闻热点分析工具 + +## ⚙️ 默认设置说明(重要!) + +默认采用以下优化策略,主要是为了节约 AI token 消耗: + +| 默认设置 | 说明 | 如何调整 | +| -------------- | --------------------------------------- | ------------------------------------- | +| **限制条数** | 默认返回 50 条新闻 | 对话中说"返回前 10 条"或"给我 100 条" | +| **时间范围** | 默认查询今天的数据 | 说"查询昨天"或"最近一周" | +| **URL 链接** | 默认不返回链接(节省约 160 tokens/条) | 说"需要链接"或"包含 URL" | +| **关键词列表** | 默认不使用 frequency_words.txt 过滤新闻 | 只有调用"趋势话题"工具时才使用 | + +**⚠️ 重要:** AI 模型的选择直接影响工具调用效果,AI 越智能,调用越准确。当你解除上面的限制,比如从今天的查询,放宽到一周的查询,首先你要在本地有一周的数据,其次,token 消耗量可能会倍增(为什么说可能,比如我查询 分析'苹果'最近一周的热度趋势,如果一周中没多少苹果的新闻,那么 token消耗量可能反而很少) + + +## 💰 AI 模型 + +下面我以 **[硅基流动](https://cloud.siliconflow.cn)** 平台作为例子,里面有很多大模型可选择。在开发和测试本项目的过程中,我使用本平台进行了许多的功能测试和验证。 + +### 📊 注册方式对比 + +| 注册方式 | 无邀请链接直接注册 | 含有邀请链接注册 | +|:-------:|:-------:|:-----------------:| +| 注册链接 | [siliconflow.cn](https://cloud.siliconflow.cn) | [邀请链接](https://cloud.siliconflow.cn/i/fqnyVaIU) | +| 免费额度 | 0 tokens | **2000万 tokens** (≈14元) | +| 额外福利 | ❌ | ✅ 邀请者也获得2000万tokens | + +> 💡 **提示**:上面的赠送额度,应该可以询问 **200次以上** + + +### 🚀 快速开始 + +#### 1️⃣ 注册并获取 API 密钥 + +1. 使用上方链接完成注册 +2. 访问 [API 密钥管理页面](https://cloud.siliconflow.cn/me/account/ak) +3. 点击「新建 API 密钥」 +4. 复制生成的密钥(请妥善保管) + +#### 2️⃣ 在 Cherry Studio 中配置 + +1. 打开 **Cherry Studio** +2. 进入「模型服务」设置 +3. 找到「硅基流动」 +4. 将复制的密钥粘贴到 **[API密钥]** 输入框 +5. 确保右上角勾选框打开后显示为 **绿色** ✅ + +--- + +### ✨ 配置完成! + +现在你可以开始使用本项目,享受稳定快速的 AI 服务了! + +在你测试一次询问后,请立刻去 [硅基流动账单](https://cloud.siliconflow.cn/me/bills) 查询这一次的消耗量,心底有个估算。 + + +## 基础查询 + +### Q1: 如何查看最新的新闻? + +**你可以这样问:** + +- "给我看看最新的新闻" +- "查询今天的热点新闻" +- "获取知乎和微博的最新 10 条新闻" +- "查看最新新闻,需要包含链接" + +**调用的工具:** `get_latest_news` + +**工具返回行为:** + +- MCP 工具会返回所有平台的最新 50 条新闻给 AI +- 不包含 URL 链接(节省 token) + +**AI 展示行为(重要):** + +- ⚠️ **AI 通常会自动总结**,只展示部分新闻(如 TOP 10-20 条) +- ✅ 如果你想看全部 50 条,需要明确要求:"展示所有新闻"或"完整列出所有 50 条" +- 💡 这是 AI 模型的自然行为,不是工具的限制 + +**可以调整:** + +- 指定平台:如"只看知乎的" +- 调整数量:如"返回前 20 条" +- 包含链接:如"需要链接" +- **要求完整展示**:如"展示全部,不要总结" + +--- + +### Q2: 如何查询特定日期的新闻? + +**你可以这样问:** + +- "查询昨天的新闻" +- "看看 3 天前知乎的新闻" +- "2025-10-10 的新闻有哪些" +- "上周一的新闻" +- "给我看看最新新闻"(自动查询今天) + +**调用的工具:** `get_news_by_date` + +**支持的日期格式:** + +- 相对日期:今天、昨天、前天、3 天前 +- 星期:上周一、本周三、last monday +- 绝对日期:2025-10-10、10 月 10 日 + +**工具返回行为:** + +- 不指定日期时自动查询今天(节省 token) +- MCP 工具会返回所有平台的 50 条新闻给 AI +- 不包含 URL 链接 + +**AI 展示行为(重要):** + +- ⚠️ **AI 通常会自动总结**,只展示部分新闻(如 TOP 10-20 条) +- ✅ 如果你想看全部,需要明确要求:"展示所有新闻,不要总结" + +--- + +### Q3: 如何查看我关注的话题频率统计? + +**你可以这样问:** + +- "我关注的词今天出现了多少次" +- "看看我的关注词列表中哪些词最热门" +- "统计一下 frequency_words.txt 中的关注词频率" + +**调用的工具:** `get_trending_topics` + +**重要说明:** + +- 本工具**不是**自动提取新闻热点 +- 而是统计你在 `config/frequency_words.txt` 中设置的**个人关注词** +- 这是一个**可自定义**的列表,你可以根据兴趣添加关注词 + +--- + +## 搜索检索 + +### Q4: 如何搜索包含特定关键词的新闻? + +**你可以这样问:** + +- "搜索包含'人工智能'的新闻" +- "查找关于'特斯拉降价'的报道" +- "搜索马斯克相关的新闻,返回前 20 条" +- "查找'iPhone 16 发布'这条新闻的链接" + +**调用的工具:** `search_news` + +**工具返回行为:** + +- 使用关键词模式搜索 +- 搜索今天的数据 +- MCP 工具会返回最多 50 条结果给 AI +- 不包含 URL 链接 + +**AI 展示行为(重要):** + +- ⚠️ **AI 通常会自动总结**,只展示部分搜索结果 +- ✅ 如果你想看全部,需要明确要求:"展示所有搜索结果" + +**可以调整:** + +- 指定时间范围:如"搜索最近一周的" +- 指定平台:如"只搜索知乎" +- 调整排序:如"按权重排序" +- 包含链接:如"需要链接" + +--- + +### Q5: 如何查找历史相关新闻? + +**你可以这样问:** + +- "查找昨天与'人工智能突破'相关的新闻" +- "搜索上周关于'特斯拉'的历史报道" +- "找出上个月与'ChatGPT'相关的新闻" +- "看看'iPhone 发布会'相关的历史新闻" + +**调用的工具:** `search_related_news_history` + +**工具返回行为:** + +- 搜索昨天的数据 +- 相似度阈值 0.4 +- MCP 工具会返回最多 50 条结果给 AI +- 不包含 URL 链接 + +**AI 展示行为(重要):** + +- ⚠️ **AI 通常会自动总结**,只展示部分相关新闻 +- ✅ 如果你想看全部,需要明确要求:"展示所有相关新闻" + +--- + +## 趋势分析 + +### Q6: 如何分析话题的热度趋势? + +**你可以这样问:** + +- "分析'人工智能'最近一周的热度趋势" +- "看看'特斯拉'话题是昙花一现还是持续热点" +- "检测今天有哪些突然爆火的话题" +- "预测接下来可能的热点话题" + +**调用的工具:** `analyze_topic_trend` + +**工具返回行为:** + +- 热度趋势模式 +- 分析最近 7 天数据 +- 按天粒度统计 + +**AI 展示行为:** + +- 通常会展示趋势分析结果和图表 +- AI 可能会总结关键发现 + +--- + +## 数据洞察 + +### Q7: 如何对比不同平台对话题的关注度? + +**你可以这样问:** + +- "对比各个平台对'人工智能'话题的关注度" +- "看看哪个平台更新最频繁" +- "分析一下哪些关键词经常一起出现" + +**调用的工具:** `analyze_data_insights` + +**三种洞察模式:** + +| 模式 | 功能 | 示例问法 | +| -------------- | ---------------- | -------------------------- | +| **平台对比** | 对比各平台关注度 | "对比各平台对'AI'的关注度" | +| **活跃度统计** | 统计平台发布频率 | "看看哪个平台更新最频繁" | +| **关键词共现** | 分析关键词关联 | "哪些关键词经常一起出现" | + +**工具返回行为:** + +- 平台对比模式 +- 分析今天的数据 +- 关键词共现最小频次 3 次 + +**AI 展示行为:** + +- 通常会展示分析结果和统计数据 +- AI 可能会总结洞察发现 + +--- + +## 情感分析 + +### Q8: 如何分析新闻的情感倾向? + +**你可以这样问:** + +- "分析一下今天新闻的情感倾向" +- "看看'特斯拉'相关新闻是正面还是负面的" +- "分析各平台对'人工智能'的情感态度" +- "看看'比特币'一周内的情感倾向,选择前 20 条最重要的" + +**调用的工具:** `analyze_sentiment` + +**工具返回行为:** + +- 分析今天的数据 +- MCP 工具会返回最多 50 条新闻给 AI +- 按权重排序(优先展示重要新闻) +- 不包含 URL 链接 + +**AI 展示行为(重要):** + +- ⚠️ 本工具返回 **AI 提示词**,不是直接的情感分析结果 +- AI 会根据提示词生成情感分析报告 +- 通常会展示情感分布、关键发现和代表性新闻 + +**可以调整:** + +- 指定话题:如"关于'特斯拉'" +- 指定时间:如"最近一周" +- 调整数量:如"返回前 20 条" + +--- + +### Q9: 如何查找相似的新闻报道? + +**你可以这样问:** + +- "找出和'特斯拉降价'相似的新闻" +- "查找关于 iPhone 发布的类似报道" +- "看看有没有和这条新闻相似的报道" +- "找相似新闻,需要链接" + +**调用的工具:** `find_similar_news` + +**工具返回行为:** + +- 相似度阈值 0.6 +- MCP 工具会返回最多 50 条结果给 AI +- 不包含 URL 链接 + +**AI 展示行为(重要):** + +- ⚠️ **AI 通常会自动总结**,只展示部分相似新闻 +- ✅ 如果你想看全部,需要明确要求:"展示所有相似新闻" + +--- + +### Q10: 如何生成每日或每周的热点摘要? + +**你可以这样问:** + +- "生成今天的新闻摘要报告" +- "给我一份本周的热点总结" +- "生成过去 7 天的新闻分析报告" + +**调用的工具:** `generate_summary_report` + +**报告类型:** + +- 每日摘要:总结当天的热点新闻 +- 每周摘要:总结一周的热点趋势 + +--- + +## 系统管理 + +### Q11: 如何查看系统配置? + +**你可以这样问:** + +- "查看当前系统配置" +- "显示配置文件内容" +- "有哪些可用的平台?" +- "当前的权重配置是什么?" + +**调用的工具:** `get_current_config` + +**可以查询:** + +- 可用平台列表 +- 爬虫配置(请求间隔、超时设置) +- 权重配置(排名权重、频次权重) +- 通知配置(钉钉、微信) + +--- + +### Q12: 如何检查系统运行状态? + +**你可以这样问:** + +- "检查系统状态" +- "系统运行正常吗?" +- "最后一次爬取是什么时候?" +- "有多少天的历史数据?" + +**调用的工具:** `get_system_status` + +**返回信息:** + +- 系统版本和状态 +- 最后爬取时间 +- 历史数据天数 +- 健康检查结果 + +--- + +### Q13: 如何手动触发爬取任务? + +**你可以这样问:** + +- "请你爬取当前的今日头条的新闻"(临时查询) +- "帮我抓取一下知乎和微博的最新新闻并保存"(持久化) +- "触发一次爬取并保存数据"(持久化) +- "获取 36 氪 的实时数据但不保存"(临时查询) + +**调用的工具:** `trigger_crawl` + +**两种模式:** + +| 模式 | 用途 | 示例 | +| -------------- | -------------------- | -------------------- | +| **临时爬取** | 只返回数据不保存 | "爬取今日头条的新闻" | +| **持久化爬取** | 保存到 output 文件夹 | "抓取并保存知乎新闻" | + +**工具返回行为:** + +- 临时爬取模式(不保存) +- 爬取所有平台 +- 不包含 URL 链接 + +**AI 展示行为(重要):** + +- ⚠️ **AI 通常会总结爬取结果**,只展示部分新闻 +- ✅ 如果你想看全部,需要明确要求:"展示所有爬取的新闻" + +**可以调整:** + +- 指定平台:如"只爬取知乎" +- 保存数据:说"并保存"或"保存到本地" +- 包含链接:说"需要链接" + +--- + +## 💡 使用技巧 + +### 1. 如何让 AI 展示全部数据而不是自动总结? + +**背景**: 有时 AI 会自动总结数据,只展示部分内容,即使工具返回了完整的 50 条数据。 + +**如果 AI 仍然总结,你可以**: + +- **方法 1 - 明确要求**: "请展示全部新闻,不要总结" +- **方法 2 - 指定数量**: "展示所有 50 条新闻" +- **方法 3 - 质疑行为**: "为什么只展示了 15 条?我要看全部" +- **方法 4 - 提前说明**: "查询今天的新闻,完整展示所有结果" + +**注意**: AI 仍可能根据上下文调整展示方式。 + + +### 2. 如何组合使用多个工具? + +**示例:深度分析某个话题** + +1. 先搜索:"搜索'人工智能'相关新闻" +2. 再分析趋势:"分析'人工智能'的热度趋势" +3. 最后情感分析:"分析'人工智能'新闻的情感倾向" + +**示例:追踪某个事件** + +1. 查看最新:"查询今天关于'iPhone'的新闻" +2. 查找历史:"查找上周与'iPhone'相关的历史新闻" +3. 找相似报道:"找出和'iPhone 发布会'相似的新闻" diff --git a/_image/github-pages.png b/_image/github-pages.png index f0933dde3eb6f3c673e034e7578d7bddf84912a0..b52852b643a4d92c51b54edba5c6141cabcb9fbe 100644 GIT binary patch literal 264940 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
#l#>}>huZSt1B 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

UOBnU-OiwXJK1fU0>Alv47mO>2hXKcV=-; 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 str: + """ + 获取最新一批爬取的新闻数据,快速了解当前热点 + + Args: + platforms: 平台ID列表,如 ['zhihu', 'weibo', 'douyin'] + - 不指定时:使用 config.yaml 中配置的所有平台 + - 支持的平台来自 config/config.yaml 的 platforms 配置 + - 每个平台都有对应的name字段(如"知乎"、"微博"),方便AI识别 + limit: 返回条数限制,默认50,最大1000 + 注意:实际返回数量可能少于请求值,取决于当前可用的新闻总数 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + JSON格式的新闻列表 + + **重要:数据展示建议** + 本工具会返回完整的新闻列表(通常50条)给你。但请注意: + - **工具返回**:完整的50条数据 ✅ + - **建议展示**:向用户展示全部数据,除非用户明确要求总结 + - **用户期望**:用户可能需要完整数据,请谨慎总结 + + **何时可以总结**: + - 用户明确说"给我总结一下"或"挑重点说" + - 数据量超过100条时,可先展示部分并询问是否查看全部 + + **注意**:如果用户询问"为什么只显示了部分",说明他们需要完整数据 + """ + tools = _get_tools() + result = tools['data'].get_latest_news(platforms=platforms, limit=limit, include_url=include_url) + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def get_trending_topics( + top_n: int = 10, + mode: str = 'current' +) -> str: + """ + 获取个人关注词的新闻出现频率统计(基于 config/frequency_words.txt) + + 注意:本工具不是自动提取新闻热点,而是统计你在 config/frequency_words.txt 中 + 设置的个人关注词在新闻中出现的频率。你可以自定义这个关注词列表。 + + Args: + top_n: 返回TOP N关注词,默认10 + mode: 模式选择 + - daily: 当日累计数据统计 + - current: 最新一批数据统计(默认) + + Returns: + JSON格式的关注词频率统计列表 + """ + tools = _get_tools() + result = tools['data'].get_trending_topics(top_n=top_n, mode=mode) + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def get_news_by_date( + date_query: Optional[str] = None, + platforms: Optional[List[str]] = None, + limit: int = 50, + include_url: bool = False +) -> str: + """ + 获取指定日期的新闻数据,用于历史数据分析和对比 + + Args: + date_query: 日期查询,可选格式: + - 自然语言: "今天", "昨天", "前天", "3天前" + - 标准日期: "2024-01-15", "2024/01/15" + - 默认值: "今天"(节省token) + platforms: 平台ID列表,如 ['zhihu', 'weibo', 'douyin'] + - 不指定时:使用 config.yaml 中配置的所有平台 + - 支持的平台来自 config/config.yaml 的 platforms 配置 + - 每个平台都有对应的name字段(如"知乎"、"微博"),方便AI识别 + limit: 返回条数限制,默认50,最大1000 + 注意:实际返回数量可能少于请求值,取决于指定日期的新闻总数 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + JSON格式的新闻列表,包含标题、平台、排名等信息 + + **重要:数据展示建议** + 本工具会返回完整的新闻列表(通常50条)给你。但请注意: + - **工具返回**:完整的50条数据 ✅ + - **建议展示**:向用户展示全部数据,除非用户明确要求总结 + - **用户期望**:用户可能需要完整数据,请谨慎总结 + + **何时可以总结**: + - 用户明确说"给我总结一下"或"挑重点说" + - 数据量超过100条时,可先展示部分并询问是否查看全部 + + **注意**:如果用户询问"为什么只显示了部分",说明他们需要完整数据 + """ + tools = _get_tools() + result = tools['data'].get_news_by_date( + date_query=date_query, + platforms=platforms, + limit=limit, + include_url=include_url + ) + return json.dumps(result, ensure_ascii=False, indent=2) + + + +# ==================== 高级数据分析工具 ==================== + +@mcp.tool +async def analyze_topic_trend( + topic: str, + analysis_type: str = "trend", + time_range: str = "7d", + granularity: str = "day", + threshold: float = 3.0, + time_window: int = 24, + lookback_days: int = 7, + lookahead_hours: int = 6, + confidence_threshold: float = 0.7 +) -> str: + """ + 统一话题趋势分析工具 - 整合多种趋势分析模式 + + Args: + topic: 话题关键词(必需) + analysis_type: 分析类型,可选值: + - "trend": 热度趋势分析(追踪话题的热度变化) + - "lifecycle": 生命周期分析(从出现到消失的完整周期) + - "viral": 异常热度检测(识别突然爆火的话题) + - "predict": 话题预测(预测未来可能的热点) + time_range: 时间范围(trend模式),默认"7d"(7d/24h/1w/1m/2m) + granularity: 时间粒度(trend模式),默认"day"(仅支持 day,因为底层数据按天聚合) + threshold: 热度突增倍数阈值(viral模式),默认3.0 + time_window: 检测时间窗口小时数(viral模式),默认24 + lookback_days: 回溯天数(lifecycle模式),默认7 + lookahead_hours: 预测未来小时数(predict模式),默认6 + confidence_threshold: 置信度阈值(predict模式),默认0.7 + + Returns: + JSON格式的趋势分析结果 + + Examples: + - analyze_topic_trend(topic="人工智能", analysis_type="trend", time_range="7d") + - analyze_topic_trend(topic="特斯拉", analysis_type="lifecycle", lookback_days=7) + - analyze_topic_trend(topic="比特币", analysis_type="viral", threshold=3.0) + - analyze_topic_trend(topic="ChatGPT", analysis_type="predict", lookahead_hours=6) + """ + tools = _get_tools() + result = tools['analytics'].analyze_topic_trend_unified( + topic=topic, + analysis_type=analysis_type, + time_range=time_range, + granularity=granularity, + threshold=threshold, + time_window=time_window, + lookback_days=lookback_days, + lookahead_hours=lookahead_hours, + confidence_threshold=confidence_threshold + ) + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def analyze_data_insights( + insight_type: str = "platform_compare", + topic: Optional[str] = None, + date_range: Optional[Dict[str, str]] = None, + min_frequency: int = 3, + top_n: int = 20 +) -> str: + """ + 统一数据洞察分析工具 - 整合多种数据分析模式 + + Args: + insight_type: 洞察类型,可选值: + - "platform_compare": 平台对比分析(对比不同平台对话题的关注度) + - "platform_activity": 平台活跃度统计(统计各平台发布频率和活跃时间) + - "keyword_cooccur": 关键词共现分析(分析关键词同时出现的模式) + topic: 话题关键词(可选,platform_compare模式适用) + date_range: 日期范围,格式: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} + min_frequency: 最小共现频次(keyword_cooccur模式),默认3 + top_n: 返回TOP N结果(keyword_cooccur模式),默认20 + + Returns: + JSON格式的数据洞察分析结果 + + Examples: + - analyze_data_insights(insight_type="platform_compare", topic="人工智能") + - analyze_data_insights(insight_type="platform_activity", date_range={...}) + - analyze_data_insights(insight_type="keyword_cooccur", min_frequency=5, top_n=15) + """ + tools = _get_tools() + result = tools['analytics'].analyze_data_insights_unified( + insight_type=insight_type, + topic=topic, + date_range=date_range, + min_frequency=min_frequency, + top_n=top_n + ) + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def analyze_sentiment( + topic: Optional[str] = None, + platforms: Optional[List[str]] = None, + date_range: Optional[Dict[str, str]] = None, + limit: int = 50, + sort_by_weight: bool = True, + include_url: bool = False +) -> str: + """ + 分析新闻的情感倾向和热度趋势 + + Args: + keywords: 关键词列表,如 ["AI", "人工智能"] + date_range: 日期范围(天数),如 7 表示最近7天,默认3天 + platforms: 平台ID列表,如 ['zhihu', 'weibo', 'douyin'] + - 不指定时:使用 config.yaml 中配置的所有平台 + - 支持的平台来自 config/config.yaml 的 platforms 配置 + - 每个平台都有对应的name字段(如"知乎"、"微博"),方便AI识别 + limit: 返回新闻数量,默认50,最大100 + 注意:本工具会对新闻标题进行去重(同一标题在不同平台只保留一次), + 因此实际返回数量可能少于请求的 limit 值 + sort_by_weight: 是否按热度权重排序,默认True + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + JSON格式的分析结果,包含情感分布、热度趋势和相关新闻 + + **重要:数据展示策略** + - 本工具返回完整的分析结果和新闻列表 + - **默认展示方式**:展示完整的分析结果(包括所有新闻) + - 仅在用户明确要求"总结"或"挑重点"时才进行筛选 + """ + tools = _get_tools() + result = tools['analytics'].analyze_sentiment( + topic=topic, + platforms=platforms, + date_range=date_range, + limit=limit, + sort_by_weight=sort_by_weight, + include_url=include_url + ) + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def find_similar_news( + reference_title: str, + threshold: float = 0.6, + limit: int = 50, + include_url: bool = False +) -> str: + """ + 查找与指定新闻标题相似的其他新闻 + + Args: + title: 新闻标题(完整或部分) + threshold: 相似度阈值,0-1之间,默认0.6 + 注意:阈值越高匹配越严格,返回结果越少 + limit: 返回条数限制,默认50,最大100 + 注意:实际返回数量取决于相似度匹配结果,可能少于请求值 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + JSON格式的相似新闻列表,包含相似度分数 + + **重要:数据展示策略** + - 本工具返回完整的相似新闻列表 + - **默认展示方式**:展示全部返回的新闻(包括相似度分数) + - 仅在用户明确要求"总结"或"挑重点"时才进行筛选 + """ + tools = _get_tools() + result = tools['analytics'].find_similar_news( + reference_title=reference_title, + threshold=threshold, + limit=limit, + include_url=include_url + ) + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def generate_summary_report( + report_type: str = "daily", + date_range: Optional[Dict[str, str]] = None +) -> str: + """ + 每日/每周摘要生成器 - 自动生成热点摘要报告 + + Args: + report_type: 报告类型(daily/weekly) + date_range: 自定义日期范围(可选) + + Returns: + JSON格式的摘要报告,包含Markdown格式内容 + """ + tools = _get_tools() + result = tools['analytics'].generate_summary_report( + report_type=report_type, + date_range=date_range + ) + return json.dumps(result, ensure_ascii=False, indent=2) + + +# ==================== 智能检索工具 ==================== + +@mcp.tool +async def search_news( + query: str, + search_mode: str = "keyword", + date_range: Optional[Dict[str, str]] = None, + platforms: Optional[List[str]] = None, + limit: int = 50, + sort_by: str = "relevance", + threshold: float = 0.6, + include_url: bool = False +) -> str: + """ + 统一搜索接口,支持多种搜索模式 + + Args: + query: 搜索关键词或内容片段 + search_mode: 搜索模式,可选值: + - "keyword": 精确关键词匹配(默认,适合搜索特定话题) + - "fuzzy": 模糊内容匹配(适合搜索内容片段,会过滤相似度低于阈值的结果) + - "entity": 实体名称搜索(适合搜索人物/地点/机构) + threshold: 相似度阈值(仅fuzzy模式有效),0-1之间,默认0.6 + 注意:阈值越高匹配越严格,返回结果越少 + platforms: 平台ID列表,如 ['zhihu', 'weibo', 'douyin'] + - 不指定时:使用 config.yaml 中配置的所有平台 + - 支持的平台来自 config/config.yaml 的 platforms 配置 + - 每个平台都有对应的name字段(如"知乎"、"微博"),方便AI识别 + lookback_days: 回溯天数,默认7天,最大30天 + limit: 返回条数限制,默认50,最大1000 + 注意:实际返回数量取决于搜索匹配结果(特别是 fuzzy 模式下会过滤低相似度结果) + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + JSON格式的搜索结果,包含标题、平台、排名等信息 + + **重要:数据展示策略** + - 本工具返回完整的搜索结果列表 + - **默认展示方式**:展示全部返回的新闻,无需总结或筛选 + - 仅在用户明确要求"总结"或"挑重点"时才进行筛选 + """ + tools = _get_tools() + result = tools['search'].search_news_unified( + query=query, + search_mode=search_mode, + date_range=date_range, + platforms=platforms, + limit=limit, + sort_by=sort_by, + threshold=threshold, + include_url=include_url + ) + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def search_related_news_history( + reference_text: str, + time_range: str = "yesterday", + threshold: float = 0.4, + limit: int = 50, + include_url: bool = False +) -> str: + """ + 基于种子新闻,在历史数据中搜索相关新闻 + + Args: + seed_news_title: 种子新闻标题(完整或部分) + lookback_days: 向前查找的天数范围,默认7天,最大30天 + threshold: 相关性阈值,0-1之间,默认0.4 + 注意:综合相似度计算(70%关键词重合 + 30%文本相似度) + 阈值越高匹配越严格,返回结果越少 + platforms: 平台ID列表。不指定则搜索所有平台 + limit: 返回条数限制,默认50,最大100 + 注意:实际返回数量取决于相关性匹配结果,可能少于请求值 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + JSON格式的相关新闻列表,包含相关性分数和时间分布 + + **重要:数据展示策略** + - 本工具返回完整的相关新闻列表 + - **默认展示方式**:展示全部返回的新闻(包括相关性分数) + - 仅在用户明确要求"总结"或"挑重点"时才进行筛选 + """ + tools = _get_tools() + result = tools['search'].search_related_news_history( + reference_text=reference_text, + time_range=time_range, + threshold=threshold, + limit=limit, + include_url=include_url + ) + return json.dumps(result, ensure_ascii=False, indent=2) + + +# ==================== 配置与系统管理工具 ==================== + +@mcp.tool +async def get_current_config( + section: str = "all" +) -> str: + """ + 获取当前系统配置 + + Args: + section: 配置节,可选值: + - "all": 所有配置(默认) + - "crawler": 爬虫配置 + - "push": 推送配置 + - "keywords": 关键词配置 + - "weights": 权重配置 + + Returns: + JSON格式的配置信息 + """ + tools = _get_tools() + result = tools['config'].get_current_config(section=section) + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def get_system_status() -> str: + """ + 获取系统运行状态和健康检查信息 + + 返回系统版本、数据统计、缓存状态等信息 + + Returns: + JSON格式的系统状态信息 + """ + tools = _get_tools() + result = tools['system'].get_system_status() + return json.dumps(result, ensure_ascii=False, indent=2) + + +@mcp.tool +async def trigger_crawl( + platforms: Optional[List[str]] = None, + save_to_local: bool = False, + include_url: bool = False +) -> str: + """ + 手动触发一次爬取任务(可选持久化) + + Args: + platforms: 指定平台ID列表,如 ['zhihu', 'weibo', 'douyin'] + - 不指定时:使用 config.yaml 中配置的所有平台 + - 支持的平台来自 config/config.yaml 的 platforms 配置 + - 每个平台都有对应的name字段(如"知乎"、"微博"),方便AI识别 + - 注意:失败的平台会在返回结果的 failed_platforms 字段中列出 + save_to_local: 是否保存到本地 output 目录,默认 False + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + JSON格式的任务状态信息,包含: + - platforms: 成功爬取的平台列表 + - failed_platforms: 失败的平台列表(如有) + - total_news: 爬取的新闻总数 + - data: 新闻数据 + + Examples: + - 临时爬取: trigger_crawl(platforms=['zhihu']) + - 爬取并保存: trigger_crawl(platforms=['weibo'], save_to_local=True) + - 使用默认平台: trigger_crawl() # 爬取config.yaml中配置的所有平台 + """ + tools = _get_tools() + result = tools['system'].trigger_crawl(platforms=platforms, save_to_local=save_to_local, include_url=include_url) + return json.dumps(result, ensure_ascii=False, indent=2) + + +# ==================== 启动入口 ==================== + +def run_server( + project_root: Optional[str] = None, + transport: str = 'stdio', + host: str = '0.0.0.0', + port: int = 3333 +): + """ + 启动 MCP 服务器 + + Args: + project_root: 项目根目录路径 + transport: 传输模式,'stdio' 或 'http' + host: HTTP模式的监听地址,默认 0.0.0.0 + port: HTTP模式的监听端口,默认 3333 + """ + # 初始化工具实例 + _get_tools(project_root) + + # 打印启动信息 + print() + print("=" * 60) + print(" TrendRadar MCP Server - FastMCP 2.0") + print("=" * 60) + print(f" 传输模式: {transport.upper()}") + + if transport == 'stdio': + print(" 协议: MCP over stdio (标准输入输出)") + print(" 说明: 通过标准输入输出与 MCP 客户端通信") + elif transport == 'http': + print(f" 监听地址: http://{host}:{port}") + print(f" HTTP端点: http://{host}:{port}/mcp") + print(" 协议: MCP over HTTP (生产环境)") + + if project_root: + print(f" 项目目录: {project_root}") + else: + print(" 项目目录: 当前目录") + + print() + print(" 已注册的工具:") + print(" === 基础数据查询(P0核心)===") + print(" 1. get_latest_news - 获取最新新闻") + print(" 2. get_news_by_date - 按日期查询新闻(支持自然语言)") + print(" 3. get_trending_topics - 获取趋势话题") + print() + print(" === 智能检索工具 ===") + print(" 4. search_news - 统一新闻搜索(关键词/模糊/实体)") + print(" 5. search_related_news_history - 历史相关新闻检索") + print() + print(" === 高级数据分析 ===") + print(" 6. analyze_topic_trend - 统一话题趋势分析(热度/生命周期/爆火/预测)") + print(" 7. analyze_data_insights - 统一数据洞察分析(平台对比/活跃度/关键词共现)") + print(" 8. analyze_sentiment - 情感倾向分析") + print(" 9. find_similar_news - 相似新闻查找") + print(" 10. generate_summary_report - 每日/每周摘要生成") + print() + print(" === 配置与系统管理 ===") + print(" 11. get_current_config - 获取当前系统配置") + print(" 12. get_system_status - 获取系统运行状态") + print(" 13. trigger_crawl - 手动触发爬取任务") + print("=" * 60) + print() + + # 根据传输模式运行服务器 + if transport == 'stdio': + mcp.run(transport='stdio') + elif transport == 'http': + # HTTP 模式(生产推荐) + mcp.run( + transport='http', + host=host, + port=port, + path='/mcp' # HTTP 端点路径 + ) + else: + raise ValueError(f"不支持的传输模式: {transport}") + + +if __name__ == '__main__': + import sys + import argparse + + parser = argparse.ArgumentParser( + description='TrendRadar MCP Server - 新闻热点聚合 MCP 工具服务器', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +使用示例: + # STDIO 模式(用于 Cherry Studio) + uv run python mcp_server/server.py + + # HTTP 模式(适合远程访问) + uv run python mcp_server/server.py --transport http --port 3333 + +Cherry Studio 配置示例: + 设置 > MCP Servers > 添加服务器 + - 名称: TrendRadar + - 类型: STDIO + - 命令: [UV的完整路径] + - 参数: --directory [项目路径] run python mcp_server/server.py + +详细配置教程请查看: README-Cherry-Studio.md + """ + ) + parser.add_argument( + '--transport', + choices=['stdio', 'http'], + default='stdio', + help='传输模式:stdio (默认) 或 http (生产环境)' + ) + parser.add_argument( + '--host', + default='0.0.0.0', + help='HTTP模式的监听地址,默认 0.0.0.0' + ) + parser.add_argument( + '--port', + type=int, + default=3333, + help='HTTP模式的监听端口,默认 3333' + ) + parser.add_argument( + '--project-root', + help='项目根目录路径' + ) + + args = parser.parse_args() + + run_server( + project_root=args.project_root, + transport=args.transport, + host=args.host, + port=args.port + ) diff --git a/mcp_server/services/__init__.py b/mcp_server/services/__init__.py new file mode 100644 index 0000000..81fd84e --- /dev/null +++ b/mcp_server/services/__init__.py @@ -0,0 +1,5 @@ +""" +服务层模块 + +提供数据访问、缓存、解析等核心服务。 +""" diff --git a/mcp_server/services/cache_service.py b/mcp_server/services/cache_service.py new file mode 100644 index 0000000..ce09d00 --- /dev/null +++ b/mcp_server/services/cache_service.py @@ -0,0 +1,136 @@ +""" +缓存服务 + +实现TTL缓存机制,提升数据访问性能。 +""" + +import time +from typing import Any, Optional +from threading import Lock + + +class CacheService: + """缓存服务类""" + + def __init__(self): + """初始化缓存服务""" + self._cache = {} + self._timestamps = {} + self._lock = Lock() + + def get(self, key: str, ttl: int = 900) -> Optional[Any]: + """ + 获取缓存数据 + + Args: + key: 缓存键 + ttl: 存活时间(秒),默认15分钟 + + Returns: + 缓存的值,如果不存在或已过期则返回None + """ + with self._lock: + if key in self._cache: + # 检查是否过期 + if time.time() - self._timestamps[key] < ttl: + return self._cache[key] + else: + # 已过期,删除缓存 + del self._cache[key] + del self._timestamps[key] + return None + + def set(self, key: str, value: Any) -> None: + """ + 设置缓存数据 + + Args: + key: 缓存键 + value: 缓存值 + """ + with self._lock: + self._cache[key] = value + self._timestamps[key] = time.time() + + def delete(self, key: str) -> bool: + """ + 删除缓存 + + Args: + key: 缓存键 + + Returns: + 是否成功删除 + """ + with self._lock: + if key in self._cache: + del self._cache[key] + del self._timestamps[key] + return True + return False + + def clear(self) -> None: + """清空所有缓存""" + with self._lock: + self._cache.clear() + self._timestamps.clear() + + def cleanup_expired(self, ttl: int = 900) -> int: + """ + 清理过期缓存 + + Args: + ttl: 存活时间(秒) + + Returns: + 清理的条目数量 + """ + with self._lock: + current_time = time.time() + expired_keys = [ + key for key, timestamp in self._timestamps.items() + if current_time - timestamp >= ttl + ] + + for key in expired_keys: + del self._cache[key] + del self._timestamps[key] + + return len(expired_keys) + + def get_stats(self) -> dict: + """ + 获取缓存统计信息 + + Returns: + 统计信息字典 + """ + with self._lock: + return { + "total_entries": len(self._cache), + "oldest_entry_age": ( + time.time() - min(self._timestamps.values()) + if self._timestamps else 0 + ), + "newest_entry_age": ( + time.time() - max(self._timestamps.values()) + if self._timestamps else 0 + ) + } + + +# 全局缓存实例 +_global_cache = None + + +def get_cache() -> CacheService: + """ + 获取全局缓存实例 + + Returns: + 全局缓存服务实例 + """ + global _global_cache + if _global_cache is None: + _global_cache = CacheService() + return _global_cache diff --git a/mcp_server/services/data_service.py b/mcp_server/services/data_service.py new file mode 100644 index 0000000..ddf1b93 --- /dev/null +++ b/mcp_server/services/data_service.py @@ -0,0 +1,564 @@ +""" +数据访问服务 + +提供统一的数据查询接口,封装数据访问逻辑。 +""" + +import re +from collections import Counter +from datetime import datetime, timedelta +from typing import Dict, List, Optional, Tuple + +from .cache_service import get_cache +from .parser_service import ParserService +from ..utils.errors import DataNotFoundError + + +class DataService: + """数据访问服务类""" + + def __init__(self, project_root: str = None): + """ + 初始化数据服务 + + Args: + project_root: 项目根目录 + """ + self.parser = ParserService(project_root) + self.cache = get_cache() + + def get_latest_news( + self, + platforms: Optional[List[str]] = None, + limit: int = 50, + include_url: bool = False + ) -> List[Dict]: + """ + 获取最新一批爬取的新闻数据 + + Args: + platforms: 平台ID列表,None表示所有平台 + limit: 返回条数限制 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 新闻列表 + + Raises: + DataNotFoundError: 数据不存在 + """ + # 尝试从缓存获取 + cache_key = f"latest_news:{','.join(platforms or [])}:{limit}:{include_url}" + cached = self.cache.get(cache_key, ttl=900) # 15分钟缓存 + if cached: + return cached + + # 读取今天的数据 + all_titles, id_to_name, timestamps = self.parser.read_all_titles_for_date( + date=None, + platform_ids=platforms + ) + + # 获取最新的文件时间 + if timestamps: + latest_timestamp = max(timestamps.values()) + fetch_time = datetime.fromtimestamp(latest_timestamp) + else: + fetch_time = datetime.now() + + # 转换为新闻列表 + news_list = [] + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + # 取第一个排名 + rank = info["ranks"][0] if info["ranks"] else 0 + + news_item = { + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "rank": rank, + "timestamp": fetch_time.strftime("%Y-%m-%d %H:%M:%S") + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + news_item["mobileUrl"] = info.get("mobileUrl", "") + + news_list.append(news_item) + + # 按排名排序 + news_list.sort(key=lambda x: x["rank"]) + + # 限制返回数量 + result = news_list[:limit] + + # 缓存结果 + self.cache.set(cache_key, result) + + return result + + def get_news_by_date( + self, + target_date: datetime, + platforms: Optional[List[str]] = None, + limit: int = 50, + include_url: bool = False + ) -> List[Dict]: + """ + 按指定日期获取新闻 + + Args: + target_date: 目标日期 + platforms: 平台ID列表,None表示所有平台 + limit: 返回条数限制 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 新闻列表 + + Raises: + DataNotFoundError: 数据不存在 + + Examples: + >>> service = DataService() + >>> news = service.get_news_by_date( + ... target_date=datetime(2025, 10, 10), + ... platforms=['zhihu'], + ... limit=20 + ... ) + """ + # 尝试从缓存获取 + date_str = target_date.strftime("%Y-%m-%d") + cache_key = f"news_by_date:{date_str}:{','.join(platforms or [])}:{limit}:{include_url}" + cached = self.cache.get(cache_key, ttl=1800) # 30分钟缓存 + if cached: + return cached + + # 读取指定日期的数据 + all_titles, id_to_name, timestamps = self.parser.read_all_titles_for_date( + date=target_date, + platform_ids=platforms + ) + + # 转换为新闻列表 + news_list = [] + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + # 计算平均排名 + avg_rank = sum(info["ranks"]) / len(info["ranks"]) if info["ranks"] else 0 + + news_item = { + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "rank": info["ranks"][0] if info["ranks"] else 0, + "avg_rank": round(avg_rank, 2), + "count": len(info["ranks"]), + "date": date_str + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + news_item["mobileUrl"] = info.get("mobileUrl", "") + + news_list.append(news_item) + + # 按排名排序 + news_list.sort(key=lambda x: x["rank"]) + + # 限制返回数量 + result = news_list[:limit] + + # 缓存结果(历史数据缓存更久) + self.cache.set(cache_key, result) + + return result + + def search_news_by_keyword( + self, + keyword: str, + date_range: Optional[Tuple[datetime, datetime]] = None, + platforms: Optional[List[str]] = None, + limit: Optional[int] = None + ) -> Dict: + """ + 按关键词搜索新闻 + + Args: + keyword: 搜索关键词 + date_range: 日期范围 (start_date, end_date) + platforms: 平台过滤列表 + limit: 返回条数限制(可选) + + Returns: + 搜索结果字典 + + Raises: + DataNotFoundError: 数据不存在 + """ + # 确定搜索日期范围 + if date_range: + start_date, end_date = date_range + else: + # 默认搜索今天 + start_date = end_date = datetime.now() + + # 收集所有匹配的新闻 + results = [] + platform_distribution = Counter() + + # 遍历日期范围 + current_date = start_date + while current_date <= end_date: + try: + all_titles, id_to_name, _ = self.parser.read_all_titles_for_date( + date=current_date, + platform_ids=platforms + ) + + # 搜索包含关键词的标题 + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + if keyword.lower() in title.lower(): + # 计算平均排名 + avg_rank = sum(info["ranks"]) / len(info["ranks"]) if info["ranks"] else 0 + + results.append({ + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "ranks": info["ranks"], + "count": len(info["ranks"]), + "avg_rank": round(avg_rank, 2), + "url": info.get("url", ""), + "mobileUrl": info.get("mobileUrl", ""), + "date": current_date.strftime("%Y-%m-%d") + }) + + platform_distribution[platform_id] += 1 + + except DataNotFoundError: + # 该日期没有数据,继续下一天 + pass + + # 下一天 + current_date += timedelta(days=1) + + if not results: + raise DataNotFoundError( + f"未找到包含关键词 '{keyword}' 的新闻", + suggestion="请尝试其他关键词或扩大日期范围" + ) + + # 计算统计信息 + total_ranks = [] + for item in results: + total_ranks.extend(item["ranks"]) + + avg_rank = sum(total_ranks) / len(total_ranks) if total_ranks else 0 + + # 限制返回数量(如果指定) + total_found = len(results) + if limit is not None and limit > 0: + results = results[:limit] + + return { + "results": results, + "total": len(results), + "total_found": total_found, + "statistics": { + "platform_distribution": dict(platform_distribution), + "avg_rank": round(avg_rank, 2), + "keyword": keyword + } + } + + def get_trending_topics( + self, + top_n: int = 10, + mode: str = "current" + ) -> Dict: + """ + 获取个人关注词的新闻出现频率统计 + + 注意:本工具基于 config/frequency_words.txt 中的个人关注词列表进行统计, + 而不是自动从新闻中提取热点话题。用户可以自定义这个关注词列表。 + + Args: + top_n: 返回TOP N关注词 + mode: 模式 - daily(当日累计), current(最新一批) + + Returns: + 关注词频率统计字典 + + Raises: + DataNotFoundError: 数据不存在 + """ + # 尝试从缓存获取 + cache_key = f"trending_topics:{top_n}:{mode}" + cached = self.cache.get(cache_key, ttl=1800) # 30分钟缓存 + if cached: + return cached + + # 读取今天的数据 + all_titles, id_to_name, timestamps = self.parser.read_all_titles_for_date() + + if not all_titles: + raise DataNotFoundError( + "未找到今天的新闻数据", + suggestion="请确保爬虫已经运行并生成了数据" + ) + + # 加载关键词配置 + word_groups = self.parser.parse_frequency_words() + + # 根据mode选择要处理的标题数据 + titles_to_process = {} + + if mode == "daily": + # daily模式:处理当天所有累计数据 + titles_to_process = all_titles + + elif mode == "current": + # current模式:只处理最新一批数据(最新时间戳的文件) + if timestamps: + # 找出最新的时间戳 + latest_timestamp = max(timestamps.values()) + + # 重新读取,只获取最新时间的数据 + # 这里我们通过timestamps字典反查找最新文件对应的平台 + latest_titles, _, _ = self.parser.read_all_titles_for_date() + + # 由于read_all_titles_for_date返回所有文件的合并数据, + # 我们需要通过timestamps来过滤出最新批次 + # 简化实现:使用当前所有数据作为最新批次 + # (更精确的实现需要解析服务支持按时间过滤) + titles_to_process = latest_titles + else: + titles_to_process = all_titles + + else: + raise ValueError( + f"不支持的模式: {mode}。支持的模式: daily, current" + ) + + # 统计词频 + word_frequency = Counter() + keyword_to_news = {} + + # 遍历要处理的标题 + for platform_id, titles in titles_to_process.items(): + for title in titles.keys(): + # 对每个关键词组进行匹配 + for group in word_groups: + all_words = group.get("required", []) + group.get("normal", []) + + for word in all_words: + if word and word in title: + word_frequency[word] += 1 + + if word not in keyword_to_news: + keyword_to_news[word] = [] + keyword_to_news[word].append(title) + + # 获取TOP N关键词 + top_keywords = word_frequency.most_common(top_n) + + # 构建话题列表 + topics = [] + for keyword, frequency in top_keywords: + matched_news = keyword_to_news.get(keyword, []) + + topics.append({ + "keyword": keyword, + "frequency": frequency, + "matched_news": len(set(matched_news)), # 去重后的新闻数量 + "trend": "stable", # TODO: 需要历史数据来计算趋势 + "weight_score": 0.0 # TODO: 需要实现权重计算 + }) + + # 构建结果 + result = { + "topics": topics, + "generated_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "mode": mode, + "total_keywords": len(word_frequency), + "description": self._get_mode_description(mode) + } + + # 缓存结果 + self.cache.set(cache_key, result) + + return result + + def _get_mode_description(self, mode: str) -> str: + """获取模式描述""" + descriptions = { + "daily": "当日累计统计", + "current": "最新一批统计" + } + return descriptions.get(mode, "未知模式") + + def get_current_config(self, section: str = "all") -> Dict: + """ + 获取当前系统配置 + + Args: + section: 配置节 - all/crawler/push/keywords/weights + + Returns: + 配置字典 + + Raises: + FileParseError: 配置文件解析错误 + """ + # 尝试从缓存获取 + cache_key = f"config:{section}" + cached = self.cache.get(cache_key, ttl=3600) # 1小时缓存 + if cached: + return cached + + # 解析配置文件 + config_data = self.parser.parse_yaml_config() + word_groups = self.parser.parse_frequency_words() + + # 根据section返回对应配置 + if section == "all" or section == "crawler": + crawler_config = { + "enable_crawler": config_data.get("crawler", {}).get("enable_crawler", True), + "use_proxy": config_data.get("crawler", {}).get("use_proxy", False), + "request_interval": config_data.get("crawler", {}).get("request_interval", 1), + "retry_times": 3, + "platforms": [p["id"] for p in config_data.get("platforms", [])] + } + + if section == "all" or section == "push": + push_config = { + "enable_notification": config_data.get("notification", {}).get("enable_notification", True), + "enabled_channels": [], + "message_batch_size": config_data.get("notification", {}).get("message_batch_size", 20), + "push_window": config_data.get("notification", {}).get("push_window", {}) + } + + # 检测已配置的通知渠道 + webhooks = config_data.get("notification", {}).get("webhooks", {}) + if webhooks.get("feishu_url"): + push_config["enabled_channels"].append("feishu") + if webhooks.get("dingtalk_url"): + push_config["enabled_channels"].append("dingtalk") + if webhooks.get("wework_url"): + push_config["enabled_channels"].append("wework") + + if section == "all" or section == "keywords": + keywords_config = { + "word_groups": word_groups, + "total_groups": len(word_groups) + } + + if section == "all" or section == "weights": + weights_config = { + "rank_weight": config_data.get("weight", {}).get("rank_weight", 0.6), + "frequency_weight": config_data.get("weight", {}).get("frequency_weight", 0.3), + "hotness_weight": config_data.get("weight", {}).get("hotness_weight", 0.1) + } + + # 组装结果 + if section == "all": + result = { + "crawler": crawler_config, + "push": push_config, + "keywords": keywords_config, + "weights": weights_config + } + elif section == "crawler": + result = crawler_config + elif section == "push": + result = push_config + elif section == "keywords": + result = keywords_config + elif section == "weights": + result = weights_config + else: + result = {} + + # 缓存结果 + self.cache.set(cache_key, result) + + return result + + def get_system_status(self) -> Dict: + """ + 获取系统运行状态 + + Returns: + 系统状态字典 + """ + # 获取数据统计 + output_dir = self.parser.project_root / "output" + + total_storage = 0 + oldest_record = None + latest_record = None + total_news = 0 + + if output_dir.exists(): + # 遍历日期文件夹 + for date_folder in output_dir.iterdir(): + if date_folder.is_dir(): + # 解析日期 + try: + date_str = date_folder.name + # 格式: YYYY年MM月DD日 + date_match = re.match(r'(\d{4})年(\d{2})月(\d{2})日', date_str) + if date_match: + folder_date = datetime( + int(date_match.group(1)), + int(date_match.group(2)), + int(date_match.group(3)) + ) + + if oldest_record is None or folder_date < oldest_record: + oldest_record = folder_date + if latest_record is None or folder_date > latest_record: + latest_record = folder_date + + except: + pass + + # 计算存储大小 + for item in date_folder.rglob("*"): + if item.is_file(): + total_storage += item.stat().st_size + + # 读取版本信息 + version_file = self.parser.project_root / "version" + version = "unknown" + if version_file.exists(): + try: + with open(version_file, "r") as f: + version = f.read().strip() + except: + pass + + return { + "system": { + "version": version, + "project_root": str(self.parser.project_root) + }, + "data": { + "total_storage": f"{total_storage / 1024 / 1024:.2f} MB", + "oldest_record": oldest_record.strftime("%Y-%m-%d") if oldest_record else None, + "latest_record": latest_record.strftime("%Y-%m-%d") if latest_record else None, + }, + "cache": self.cache.get_stats(), + "health": "healthy" + } diff --git a/mcp_server/services/parser_service.py b/mcp_server/services/parser_service.py new file mode 100644 index 0000000..6bd2969 --- /dev/null +++ b/mcp_server/services/parser_service.py @@ -0,0 +1,355 @@ +""" +文件解析服务 + +提供txt格式新闻数据和YAML配置文件的解析功能。 +""" + +import re +from pathlib import Path +from typing import Dict, List, Tuple, Optional +from datetime import datetime + +import yaml + +from ..utils.errors import FileParseError, DataNotFoundError +from .cache_service import get_cache + + +class ParserService: + """文件解析服务类""" + + def __init__(self, project_root: str = None): + """ + 初始化解析服务 + + Args: + project_root: 项目根目录,默认为当前目录的父目录 + """ + if project_root is None: + # 获取当前文件所在目录的父目录的父目录 + current_file = Path(__file__) + self.project_root = current_file.parent.parent.parent + else: + self.project_root = Path(project_root) + + # 初始化缓存服务 + self.cache = get_cache() + + @staticmethod + def clean_title(title: str) -> str: + """ + 清理标题文本 + + Args: + title: 原始标题 + + Returns: + 清理后的标题 + """ + # 移除多余空白 + title = re.sub(r'\s+', ' ', title) + # 移除特殊字符 + title = title.strip() + return title + + def parse_txt_file(self, file_path: Path) -> Tuple[Dict, Dict]: + """ + 解析单个txt文件的标题数据 + + Args: + file_path: txt文件路径 + + Returns: + (titles_by_id, id_to_name) 元组 + - titles_by_id: {platform_id: {title: {ranks, url, mobileUrl}}} + - id_to_name: {platform_id: platform_name} + + Raises: + FileParseError: 文件解析错误 + """ + if not file_path.exists(): + raise FileParseError(str(file_path), "文件不存在") + + titles_by_id = {} + id_to_name = {} + + try: + with open(file_path, "r", encoding="utf-8") as f: + content = f.read() + sections = content.split("\n\n") + + for section in sections: + if not section.strip() or "==== 以下ID请求失败 ====" in section: + continue + + lines = section.strip().split("\n") + if len(lines) < 2: + continue + + # 解析header: id | name 或 id + header_line = lines[0].strip() + if " | " in header_line: + parts = header_line.split(" | ", 1) + source_id = parts[0].strip() + name = parts[1].strip() + id_to_name[source_id] = name + else: + source_id = header_line + id_to_name[source_id] = source_id + + titles_by_id[source_id] = {} + + # 解析标题行 + for line in lines[1:]: + if line.strip(): + try: + title_part = line.strip() + rank = None + + # 提取排名 + if ". " in title_part and title_part.split(". ")[0].isdigit(): + rank_str, title_part = title_part.split(". ", 1) + rank = int(rank_str) + + # 提取 MOBILE URL + mobile_url = "" + if " [MOBILE:" in title_part: + title_part, mobile_part = title_part.rsplit(" [MOBILE:", 1) + if mobile_part.endswith("]"): + mobile_url = mobile_part[:-1] + + # 提取 URL + url = "" + if " [URL:" in title_part: + title_part, url_part = title_part.rsplit(" [URL:", 1) + if url_part.endswith("]"): + url = url_part[:-1] + + title = self.clean_title(title_part.strip()) + ranks = [rank] if rank is not None else [1] + + titles_by_id[source_id][title] = { + "ranks": ranks, + "url": url, + "mobileUrl": mobile_url, + } + + except Exception as e: + # 忽略单行解析错误 + continue + + except Exception as e: + raise FileParseError(str(file_path), str(e)) + + return titles_by_id, id_to_name + + def get_date_folder_name(self, date: datetime = None) -> str: + """ + 获取日期文件夹名称 + + Args: + date: 日期对象,默认为今天 + + Returns: + 文件夹名称,格式: YYYY年MM月DD日 + """ + if date is None: + date = datetime.now() + return date.strftime("%Y年%m月%d日") + + def read_all_titles_for_date( + self, + date: datetime = None, + platform_ids: Optional[List[str]] = None + ) -> Tuple[Dict, Dict, Dict]: + """ + 读取指定日期的所有标题文件(带缓存) + + Args: + date: 日期对象,默认为今天 + platform_ids: 平台ID列表,None表示所有平台 + + Returns: + (all_titles, id_to_name, all_timestamps) 元组 + - all_titles: {platform_id: {title: {ranks, url, mobileUrl, ...}}} + - id_to_name: {platform_id: platform_name} + - all_timestamps: {filename: timestamp} + + Raises: + DataNotFoundError: 数据不存在 + """ + # 生成缓存键 + date_str = self.get_date_folder_name(date) + platform_key = ','.join(sorted(platform_ids)) if platform_ids else 'all' + cache_key = f"read_all_titles:{date_str}:{platform_key}" + + # 尝试从缓存获取 + # 对于历史数据(非今天),使用更长的缓存时间(1小时) + # 对于今天的数据,使用较短的缓存时间(15分钟),因为可能有新数据 + is_today = (date is None) or (date.date() == datetime.now().date()) + ttl = 900 if is_today else 3600 # 15分钟 vs 1小时 + + cached = self.cache.get(cache_key, ttl=ttl) + if cached: + return cached + + # 缓存未命中,读取文件 + date_folder = self.get_date_folder_name(date) + txt_dir = self.project_root / "output" / date_folder / "txt" + + if not txt_dir.exists(): + raise DataNotFoundError( + f"未找到 {date_folder} 的数据目录", + suggestion="请先运行爬虫或检查日期是否正确" + ) + + all_titles = {} + id_to_name = {} + all_timestamps = {} + + # 读取所有txt文件 + txt_files = sorted(txt_dir.glob("*.txt")) + + if not txt_files: + raise DataNotFoundError( + f"{date_folder} 没有数据文件", + suggestion="请等待爬虫任务完成" + ) + + for txt_file in txt_files: + try: + titles_by_id, file_id_to_name = self.parse_txt_file(txt_file) + + # 更新id_to_name + id_to_name.update(file_id_to_name) + + # 合并标题数据 + for platform_id, titles in titles_by_id.items(): + # 如果指定了平台过滤 + if platform_ids and platform_id not in platform_ids: + continue + + if platform_id not in all_titles: + all_titles[platform_id] = {} + + for title, info in titles.items(): + if title in all_titles[platform_id]: + # 合并排名 + all_titles[platform_id][title]["ranks"].extend(info["ranks"]) + else: + all_titles[platform_id][title] = info.copy() + + # 记录文件时间戳 + all_timestamps[txt_file.name] = txt_file.stat().st_mtime + + except Exception as e: + # 忽略单个文件的解析错误,继续处理其他文件 + print(f"Warning: 解析文件 {txt_file} 失败: {e}") + continue + + if not all_titles: + raise DataNotFoundError( + f"{date_folder} 没有有效的数据", + suggestion="请检查数据文件格式或重新运行爬虫" + ) + + # 缓存结果 + result = (all_titles, id_to_name, all_timestamps) + self.cache.set(cache_key, result) + + return result + + def parse_yaml_config(self, config_path: str = None) -> dict: + """ + 解析YAML配置文件 + + Args: + config_path: 配置文件路径,默认为 config/config.yaml + + Returns: + 配置字典 + + Raises: + FileParseError: 配置文件解析错误 + """ + if config_path is None: + config_path = self.project_root / "config" / "config.yaml" + else: + config_path = Path(config_path) + + if not config_path.exists(): + raise FileParseError(str(config_path), "配置文件不存在") + + try: + with open(config_path, "r", encoding="utf-8") as f: + config_data = yaml.safe_load(f) + return config_data + except Exception as e: + raise FileParseError(str(config_path), str(e)) + + def parse_frequency_words(self, words_file: str = None) -> List[Dict]: + """ + 解析关键词配置文件 + + Args: + words_file: 关键词文件路径,默认为 config/frequency_words.txt + + Returns: + 词组列表 + + Raises: + FileParseError: 文件解析错误 + """ + if words_file is None: + words_file = self.project_root / "config" / "frequency_words.txt" + else: + words_file = Path(words_file) + + if not words_file.exists(): + return [] + + word_groups = [] + + try: + with open(words_file, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if not line or line.startswith("#"): + continue + + # 使用 | 分隔符 + parts = [p.strip() for p in line.split("|")] + if not parts: + continue + + group = { + "required": [], + "normal": [], + "filter_words": [] + } + + for part in parts: + if not part: + continue + + words = [w.strip() for w in part.split(",")] + for word in words: + if not word: + continue + if word.endswith("+"): + # 必须词 + group["required"].append(word[:-1]) + elif word.endswith("!"): + # 过滤词 + group["filter_words"].append(word[:-1]) + else: + # 普通词 + group["normal"].append(word) + + if group["required"] or group["normal"]: + word_groups.append(group) + + except Exception as e: + raise FileParseError(str(words_file), str(e)) + + return word_groups diff --git a/mcp_server/tools/__init__.py b/mcp_server/tools/__init__.py new file mode 100644 index 0000000..6996540 --- /dev/null +++ b/mcp_server/tools/__init__.py @@ -0,0 +1,5 @@ +""" +MCP 工具模块 + +包含所有MCP工具的实现。 +""" diff --git a/mcp_server/tools/analytics.py b/mcp_server/tools/analytics.py new file mode 100644 index 0000000..5d84b7e --- /dev/null +++ b/mcp_server/tools/analytics.py @@ -0,0 +1,1989 @@ +""" +高级数据分析工具 + +提供热度趋势分析、平台对比、关键词共现、情感分析等高级分析功能。 +""" + +import re +from collections import Counter, defaultdict +from datetime import datetime, timedelta +from typing import Dict, List, Optional +from difflib import SequenceMatcher + +from ..services.data_service import DataService +from ..utils.validators import ( + validate_platforms, + validate_limit, + validate_keyword, + validate_top_n, + validate_date_range +) +from ..utils.errors import MCPError, InvalidParameterError, DataNotFoundError + + +def calculate_news_weight(news_data: Dict, rank_threshold: int = 5) -> float: + """ + 计算新闻权重(用于排序) + + 基于 main.py 的权重算法实现,综合考虑: + - 排名权重 (60%):新闻在榜单中的排名 + - 频次权重 (30%):新闻出现的次数 + - 热度权重 (10%):高排名出现的比例 + + Args: + news_data: 新闻数据字典,包含 ranks 和 count 字段 + rank_threshold: 高排名阈值,默认5 + + Returns: + 权重分数(0-100之间的浮点数) + """ + ranks = news_data.get("ranks", []) + if not ranks: + return 0.0 + + count = news_data.get("count", len(ranks)) + + # 权重配置(与 config.yaml 保持一致) + RANK_WEIGHT = 0.6 + FREQUENCY_WEIGHT = 0.3 + HOTNESS_WEIGHT = 0.1 + + # 1. 排名权重:Σ(11 - min(rank, 10)) / 出现次数 + rank_scores = [] + for rank in ranks: + score = 11 - min(rank, 10) + rank_scores.append(score) + + rank_weight = sum(rank_scores) / len(ranks) if ranks else 0 + + # 2. 频次权重:min(出现次数, 10) × 10 + frequency_weight = min(count, 10) * 10 + + # 3. 热度加成:高排名次数 / 总出现次数 × 100 + high_rank_count = sum(1 for rank in ranks if rank <= rank_threshold) + hotness_ratio = high_rank_count / len(ranks) if ranks else 0 + hotness_weight = hotness_ratio * 100 + + # 综合权重 + total_weight = ( + rank_weight * RANK_WEIGHT + + frequency_weight * FREQUENCY_WEIGHT + + hotness_weight * HOTNESS_WEIGHT + ) + + return total_weight + + +class AnalyticsTools: + """高级数据分析工具类""" + + def __init__(self, project_root: str = None): + """ + 初始化分析工具 + + Args: + project_root: 项目根目录 + """ + self.data_service = DataService(project_root) + + def analyze_data_insights_unified( + self, + insight_type: str = "platform_compare", + topic: Optional[str] = None, + date_range: Optional[Dict[str, str]] = None, + min_frequency: int = 3, + top_n: int = 20 + ) -> Dict: + """ + 统一数据洞察分析工具 - 整合多种数据分析模式 + + Args: + insight_type: 洞察类型,可选值: + - "platform_compare": 平台对比分析(对比不同平台对话题的关注度) + - "platform_activity": 平台活跃度统计(统计各平台发布频率和活跃时间) + - "keyword_cooccur": 关键词共现分析(分析关键词同时出现的模式) + topic: 话题关键词(可选,platform_compare模式适用) + date_range: 日期范围,格式: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} + min_frequency: 最小共现频次(keyword_cooccur模式),默认3 + top_n: 返回TOP N结果(keyword_cooccur模式),默认20 + + Returns: + 数据洞察分析结果字典 + + Examples: + - analyze_data_insights_unified(insight_type="platform_compare", topic="人工智能") + - analyze_data_insights_unified(insight_type="platform_activity", date_range={...}) + - analyze_data_insights_unified(insight_type="keyword_cooccur", min_frequency=5) + """ + try: + # 参数验证 + if insight_type not in ["platform_compare", "platform_activity", "keyword_cooccur"]: + raise InvalidParameterError( + f"无效的洞察类型: {insight_type}", + suggestion="支持的类型: platform_compare, platform_activity, keyword_cooccur" + ) + + # 根据洞察类型调用相应方法 + if insight_type == "platform_compare": + return self.compare_platforms( + topic=topic, + date_range=date_range + ) + elif insight_type == "platform_activity": + return self.get_platform_activity_stats( + date_range=date_range + ) + else: # keyword_cooccur + return self.analyze_keyword_cooccurrence( + min_frequency=min_frequency, + top_n=top_n + ) + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def analyze_topic_trend_unified( + self, + topic: str, + analysis_type: str = "trend", + time_range: str = "7d", + granularity: str = "day", + threshold: float = 3.0, + time_window: int = 24, + lookback_days: int = 7, + lookahead_hours: int = 6, + confidence_threshold: float = 0.7 + ) -> Dict: + """ + 统一话题趋势分析工具 - 整合多种趋势分析模式 + + Args: + topic: 话题关键词(必需) + analysis_type: 分析类型,可选值: + - "trend": 热度趋势分析(追踪话题的热度变化) + - "lifecycle": 生命周期分析(从出现到消失的完整周期) + - "viral": 异常热度检测(识别突然爆火的话题) + - "predict": 话题预测(预测未来可能的热点) + time_range: 时间范围(trend模式),默认"7d"(7d/24h/1w/1m/2m) + granularity: 时间粒度(trend模式),默认"day"(hour/day) + threshold: 热度突增倍数阈值(viral模式),默认3.0 + time_window: 检测时间窗口小时数(viral模式),默认24 + lookback_days: 回溯天数(lifecycle模式),默认7 + lookahead_hours: 预测未来小时数(predict模式),默认6 + confidence_threshold: 置信度阈值(predict模式),默认0.7 + + Returns: + 趋势分析结果字典 + + Examples: + - analyze_topic_trend_unified(topic="人工智能", analysis_type="trend", time_range="7d") + - analyze_topic_trend_unified(topic="特斯拉", analysis_type="lifecycle", lookback_days=7) + - analyze_topic_trend_unified(topic="比特币", analysis_type="viral", threshold=3.0) + - analyze_topic_trend_unified(topic="ChatGPT", analysis_type="predict", lookahead_hours=6) + """ + try: + # 参数验证 + topic = validate_keyword(topic) + + if analysis_type not in ["trend", "lifecycle", "viral", "predict"]: + raise InvalidParameterError( + f"无效的分析类型: {analysis_type}", + suggestion="支持的类型: trend, lifecycle, viral, predict" + ) + + # 根据分析类型调用相应方法 + if analysis_type == "trend": + return self.get_topic_trend_analysis( + topic=topic, + time_range=time_range, + granularity=granularity + ) + elif analysis_type == "lifecycle": + return self.analyze_topic_lifecycle( + topic=topic, + lookback_days=lookback_days + ) + elif analysis_type == "viral": + # viral模式不需要topic参数,使用通用检测 + return self.detect_viral_topics( + threshold=threshold, + time_window=time_window + ) + else: # predict + # predict模式不需要topic参数,使用通用预测 + return self.predict_trending_topics( + lookahead_hours=lookahead_hours, + confidence_threshold=confidence_threshold + ) + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def get_topic_trend_analysis( + self, + topic: str, + time_range: str = "7d", + granularity: str = "day" + ) -> Dict: + """ + 热度趋势分析 - 追踪特定话题的热度变化趋势 + + Args: + topic: 话题关键词 + time_range: 时间范围,格式:7d(7天)、24h(24小时)、1w(1周)、1m(1个月)、2m(2个月) + granularity: 时间粒度,仅支持 day(天) + + Returns: + 趋势分析结果字典 + + Examples: + 用户询问示例: + - "帮我分析一下'人工智能'这个话题最近一周的热度趋势" + - "查看'比特币'过去一周的热度变化" + - "看看'iPhone'最近7天的趋势如何" + - "分析'特斯拉'最近一个月的热度趋势" + - "查看'ChatGPT'过去2个月的趋势变化" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> # 分析7天趋势 + >>> result = tools.get_topic_trend_analysis( + ... topic="人工智能", + ... time_range="7d", + ... granularity="day" + ... ) + >>> # 分析1个月趋势 + >>> result = tools.get_topic_trend_analysis( + ... topic="特斯拉", + ... time_range="1m", + ... granularity="day" + ... ) + >>> print(result['trend_data']) + """ + try: + # 验证参数 + topic = validate_keyword(topic) + + # 验证粒度参数(只支持day) + if granularity != "day": + from ..utils.errors import InvalidParameterError + raise InvalidParameterError( + f"不支持的粒度参数: {granularity}", + suggestion="当前仅支持 'day' 粒度,因为底层数据按天聚合" + ) + + # 解析时间范围 + days = self._parse_time_range(time_range) + + # 收集趋势数据 + trend_data = [] + start_date = datetime.now() - timedelta(days=days) + current_date = start_date + + while current_date <= datetime.now(): + try: + all_titles, _, _ = self.data_service.parser.read_all_titles_for_date( + date=current_date + ) + + # 统计该时间点的话题出现次数 + count = 0 + matched_titles = [] + + for _, titles in all_titles.items(): + for title in titles.keys(): + if topic.lower() in title.lower(): + count += 1 + matched_titles.append(title) + + trend_data.append({ + "date": current_date.strftime("%Y-%m-%d"), + "count": count, + "sample_titles": matched_titles[:3] # 只保留前3个样本 + }) + + except DataNotFoundError: + trend_data.append({ + "date": current_date.strftime("%Y-%m-%d"), + "count": 0, + "sample_titles": [] + }) + + # 按天增加时间 + current_date += timedelta(days=1) + + # 计算趋势指标 + counts = [item["count"] for item in trend_data] + + if len(counts) >= 2: + # 计算涨跌幅度 + first_non_zero = next((c for c in counts if c > 0), 0) + last_count = counts[-1] + + if first_non_zero > 0: + change_rate = ((last_count - first_non_zero) / first_non_zero) * 100 + else: + change_rate = 0 + + # 找到峰值时间 + max_count = max(counts) + peak_index = counts.index(max_count) + peak_time = trend_data[peak_index]["date"] + else: + change_rate = 0 + peak_time = None + max_count = 0 + + return { + "success": True, + "topic": topic, + "time_range": time_range, + "granularity": granularity, + "trend_data": trend_data, + "statistics": { + "total_mentions": sum(counts), + "average_mentions": round(sum(counts) / len(counts), 2) if counts else 0, + "peak_count": max_count, + "peak_time": peak_time, + "change_rate": round(change_rate, 2) + }, + "trend_direction": "上升" if change_rate > 10 else "下降" if change_rate < -10 else "稳定" + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def compare_platforms( + self, + topic: Optional[str] = None, + date_range: Optional[Dict[str, str]] = None + ) -> Dict: + """ + 平台对比分析 - 对比不同平台对同一话题的关注度 + + Args: + topic: 话题关键词(可选,不指定则对比整体活跃度) + date_range: 日期范围,格式: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} + + Returns: + 平台对比分析结果 + + Examples: + 用户询问示例: + - "对比一下各个平台对'人工智能'话题的关注度" + - "看看知乎和微博哪个平台更关注科技新闻" + - "分析各平台今天的热点分布" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.compare_platforms( + ... topic="人工智能", + ... date_range={"start": "2025-10-01", "end": "2025-10-11"} + ... ) + >>> print(result['platform_stats']) + """ + try: + # 参数验证 + if topic: + topic = validate_keyword(topic) + date_range_tuple = validate_date_range(date_range) + + # 确定日期范围 + if date_range_tuple: + start_date, end_date = date_range_tuple + else: + start_date = end_date = datetime.now() + + # 收集各平台数据 + platform_stats = defaultdict(lambda: { + "total_news": 0, + "topic_mentions": 0, + "unique_titles": set(), + "top_keywords": Counter() + }) + + # 遍历日期范围 + current_date = start_date + while current_date <= end_date: + try: + all_titles, id_to_name, _ = self.data_service.parser.read_all_titles_for_date( + date=current_date + ) + + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title in titles.keys(): + platform_stats[platform_name]["total_news"] += 1 + platform_stats[platform_name]["unique_titles"].add(title) + + # 如果指定了话题,统计包含话题的新闻 + if topic and topic.lower() in title.lower(): + platform_stats[platform_name]["topic_mentions"] += 1 + + # 提取关键词(简单分词) + keywords = self._extract_keywords(title) + platform_stats[platform_name]["top_keywords"].update(keywords) + + except DataNotFoundError: + pass + + current_date += timedelta(days=1) + + # 转换为可序列化的格式 + result_stats = {} + for platform, stats in platform_stats.items(): + coverage_rate = 0 + if stats["total_news"] > 0: + coverage_rate = (stats["topic_mentions"] / stats["total_news"]) * 100 + + result_stats[platform] = { + "total_news": stats["total_news"], + "topic_mentions": stats["topic_mentions"], + "unique_titles": len(stats["unique_titles"]), + "coverage_rate": round(coverage_rate, 2), + "top_keywords": [ + {"keyword": k, "count": v} + for k, v in stats["top_keywords"].most_common(5) + ] + } + + # 找出各平台独有的热点 + unique_topics = self._find_unique_topics(platform_stats) + + return { + "success": True, + "topic": topic, + "date_range": { + "start": start_date.strftime("%Y-%m-%d"), + "end": end_date.strftime("%Y-%m-%d") + }, + "platform_stats": result_stats, + "unique_topics": unique_topics, + "total_platforms": len(result_stats) + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def analyze_keyword_cooccurrence( + self, + min_frequency: int = 3, + top_n: int = 20 + ) -> Dict: + """ + 关键词共现分析 - 分析哪些关键词经常同时出现 + + Args: + min_frequency: 最小共现频次 + top_n: 返回TOP N关键词对 + + Returns: + 关键词共现分析结果 + + Examples: + 用户询问示例: + - "分析一下哪些关键词经常一起出现" + - "看看'人工智能'经常和哪些词一起出现" + - "找出今天新闻中的关键词关联" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.analyze_keyword_cooccurrence( + ... min_frequency=5, + ... top_n=15 + ... ) + >>> print(result['cooccurrence_pairs']) + """ + try: + # 参数验证 + min_frequency = validate_limit(min_frequency, default=3, max_limit=100) + top_n = validate_top_n(top_n, default=20) + + # 读取今天的数据 + all_titles, _, _ = self.data_service.parser.read_all_titles_for_date() + + # 关键词共现统计 + cooccurrence = Counter() + keyword_titles = defaultdict(list) + + for platform_id, titles in all_titles.items(): + for title in titles.keys(): + # 提取关键词 + keywords = self._extract_keywords(title) + + # 记录每个关键词出现的标题 + for kw in keywords: + keyword_titles[kw].append(title) + + # 计算两两共现 + if len(keywords) >= 2: + for i, kw1 in enumerate(keywords): + for kw2 in keywords[i+1:]: + # 统一排序,避免重复 + pair = tuple(sorted([kw1, kw2])) + cooccurrence[pair] += 1 + + # 过滤低频共现 + filtered_pairs = [ + (pair, count) for pair, count in cooccurrence.items() + if count >= min_frequency + ] + + # 排序并取TOP N + top_pairs = sorted(filtered_pairs, key=lambda x: x[1], reverse=True)[:top_n] + + # 构建结果 + result_pairs = [] + for (kw1, kw2), count in top_pairs: + # 找出同时包含两个关键词的标题样本 + titles_with_both = [ + title for title in keyword_titles[kw1] + if kw2 in self._extract_keywords(title) + ] + + result_pairs.append({ + "keyword1": kw1, + "keyword2": kw2, + "cooccurrence_count": count, + "sample_titles": titles_with_both[:3] + }) + + return { + "success": True, + "cooccurrence_pairs": result_pairs, + "total_pairs": len(result_pairs), + "min_frequency": min_frequency, + "generated_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def analyze_sentiment( + self, + topic: Optional[str] = None, + platforms: Optional[List[str]] = None, + date_range: Optional[Dict[str, str]] = None, + limit: int = 50, + sort_by_weight: bool = True, + include_url: bool = False + ) -> Dict: + """ + 情感倾向分析 - 生成用于 AI 情感分析的结构化提示词 + + 本工具收集新闻数据并生成优化的 AI 提示词,你可以将其发送给 AI 进行深度情感分析。 + + Args: + topic: 话题关键词(可选),只分析包含该关键词的新闻 + platforms: 平台过滤列表(可选),如 ['zhihu', 'weibo'] + date_range: 日期范围(可选),格式: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} + 不指定则默认查询今天的数据 + limit: 返回新闻数量限制,默认50,最大100 + sort_by_weight: 是否按权重排序,默认True(推荐) + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 包含 AI 提示词和新闻数据的结构化结果 + + Examples: + 用户询问示例: + - "分析一下今天新闻的情感倾向" + - "看看'特斯拉'相关新闻是正面还是负面的" + - "分析各平台对'人工智能'的情感态度" + - "看看'特斯拉'相关新闻是正面还是负面的,请选择一周内的前10条新闻来分析" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> # 分析今天的特斯拉新闻,返回前10条 + >>> result = tools.analyze_sentiment( + ... topic="特斯拉", + ... limit=10 + ... ) + >>> # 分析一周内的特斯拉新闻,返回前10条按权重排序 + >>> result = tools.analyze_sentiment( + ... topic="特斯拉", + ... date_range={"start": "2025-10-06", "end": "2025-10-13"}, + ... limit=10 + ... ) + >>> print(result['ai_prompt']) # 获取生成的提示词 + """ + try: + # 参数验证 + if topic: + topic = validate_keyword(topic) + platforms = validate_platforms(platforms) + limit = validate_limit(limit, default=50) + + # 处理日期范围 + if date_range: + date_range_tuple = validate_date_range(date_range) + start_date, end_date = date_range_tuple + else: + # 默认今天 + start_date = end_date = datetime.now() + + # 收集新闻数据(支持多天) + all_news_items = [] + current_date = start_date + + while current_date <= end_date: + try: + all_titles, id_to_name, _ = self.data_service.parser.read_all_titles_for_date( + date=current_date, + platform_ids=platforms + ) + + # 收集该日期的新闻 + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + for title, info in titles.items(): + # 如果指定了话题,只收集包含话题的标题 + if topic and topic.lower() not in title.lower(): + continue + + news_item = { + "platform": platform_name, + "title": title, + "ranks": info.get("ranks", []), + "count": len(info.get("ranks", [])), + "date": current_date.strftime("%Y-%m-%d") + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + news_item["mobileUrl"] = info.get("mobileUrl", "") + + all_news_items.append(news_item) + + except DataNotFoundError: + # 该日期没有数据,继续下一天 + pass + + # 下一天 + current_date += timedelta(days=1) + + if not all_news_items: + time_desc = "今天" if start_date == end_date else f"{start_date.strftime('%Y-%m-%d')} 至 {end_date.strftime('%Y-%m-%d')}" + raise DataNotFoundError( + f"未找到相关新闻({time_desc})", + suggestion="请尝试其他话题、日期范围或平台" + ) + + # 去重(同一标题只保留一次) + unique_news = {} + for item in all_news_items: + key = f"{item['platform']}::{item['title']}" + if key not in unique_news: + unique_news[key] = item + else: + # 合并 ranks(如果同一新闻在多天出现) + existing = unique_news[key] + existing["ranks"].extend(item["ranks"]) + existing["count"] = len(existing["ranks"]) + + deduplicated_news = list(unique_news.values()) + + # 按权重排序(如果启用) + if sort_by_weight: + deduplicated_news.sort( + key=lambda x: calculate_news_weight(x), + reverse=True + ) + + # 限制返回数量 + selected_news = deduplicated_news[:limit] + + # 生成 AI 提示词 + ai_prompt = self._create_sentiment_analysis_prompt( + news_data=selected_news, + topic=topic + ) + + # 构建时间范围描述 + if start_date == end_date: + time_range_desc = start_date.strftime("%Y-%m-%d") + else: + time_range_desc = f"{start_date.strftime('%Y-%m-%d')} 至 {end_date.strftime('%Y-%m-%d')}" + + result = { + "success": True, + "method": "ai_prompt_generation", + "summary": { + "total_found": len(deduplicated_news), + "returned_count": len(selected_news), + "requested_limit": limit, + "duplicates_removed": len(all_news_items) - len(deduplicated_news), + "topic": topic, + "time_range": time_range_desc, + "platforms": list(set(item["platform"] for item in selected_news)), + "sorted_by_weight": sort_by_weight + }, + "ai_prompt": ai_prompt, + "news_sample": selected_news, + "usage_note": "请将 ai_prompt 字段的内容发送给 AI 进行情感分析" + } + + # 如果返回数量少于请求数量,增加提示 + if len(selected_news) < limit and len(deduplicated_news) >= limit: + result["note"] = "返回数量少于请求数量是因为去重逻辑(同一标题在不同平台只保留一次)" + elif len(deduplicated_news) < limit: + result["note"] = f"在指定时间范围内仅找到 {len(deduplicated_news)} 条匹配的新闻" + + return result + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def _create_sentiment_analysis_prompt( + self, + news_data: List[Dict], + topic: Optional[str] + ) -> str: + """ + 创建情感分析的 AI 提示词 + + Args: + news_data: 新闻数据列表(已排序和限制数量) + topic: 话题关键词 + + Returns: + 格式化的 AI 提示词 + """ + # 按平台分组 + platform_news = defaultdict(list) + for item in news_data: + platform_news[item["platform"]].append({ + "title": item["title"], + "date": item.get("date", "") + }) + + # 构建提示词 + prompt_parts = [] + + # 1. 任务说明 + if topic: + prompt_parts.append(f"请分析以下关于「{topic}」的新闻标题的情感倾向。") + else: + prompt_parts.append("请分析以下新闻标题的情感倾向。") + + prompt_parts.append("") + prompt_parts.append("分析要求:") + prompt_parts.append("1. 识别每条新闻的情感倾向(正面/负面/中性)") + prompt_parts.append("2. 统计各情感类别的数量和百分比") + prompt_parts.append("3. 分析不同平台的情感差异") + prompt_parts.append("4. 总结整体情感趋势") + prompt_parts.append("5. 列举典型的正面和负面新闻样本") + prompt_parts.append("") + + # 2. 数据概览 + prompt_parts.append(f"数据概览:") + prompt_parts.append(f"- 总新闻数:{len(news_data)}") + prompt_parts.append(f"- 覆盖平台:{len(platform_news)}") + + # 时间范围 + dates = set(item.get("date", "") for item in news_data if item.get("date")) + if dates: + date_list = sorted(dates) + if len(date_list) == 1: + prompt_parts.append(f"- 时间范围:{date_list[0]}") + else: + prompt_parts.append(f"- 时间范围:{date_list[0]} 至 {date_list[-1]}") + + prompt_parts.append("") + + # 3. 按平台展示新闻 + prompt_parts.append("新闻列表(按平台分类,已按重要性排序):") + prompt_parts.append("") + + for platform, items in sorted(platform_news.items()): + prompt_parts.append(f"【{platform}】({len(items)} 条)") + for i, item in enumerate(items, 1): + title = item["title"] + date_str = f" [{item['date']}]" if item.get("date") else "" + prompt_parts.append(f"{i}. {title}{date_str}") + prompt_parts.append("") + + # 4. 输出格式说明 + prompt_parts.append("请按以下格式输出分析结果:") + prompt_parts.append("") + prompt_parts.append("## 情感分布统计") + prompt_parts.append("- 正面:XX条 (XX%)") + prompt_parts.append("- 负面:XX条 (XX%)") + prompt_parts.append("- 中性:XX条 (XX%)") + prompt_parts.append("") + prompt_parts.append("## 平台情感对比") + prompt_parts.append("[各平台的情感倾向差异]") + prompt_parts.append("") + prompt_parts.append("## 整体情感趋势") + prompt_parts.append("[总体分析和关键发现]") + prompt_parts.append("") + prompt_parts.append("## 典型样本") + prompt_parts.append("正面新闻样本:") + prompt_parts.append("[列举3-5条]") + prompt_parts.append("") + prompt_parts.append("负面新闻样本:") + prompt_parts.append("[列举3-5条]") + + return "\n".join(prompt_parts) + + def find_similar_news( + self, + reference_title: str, + threshold: float = 0.6, + limit: int = 50, + include_url: bool = False + ) -> Dict: + """ + 相似新闻查找 - 基于标题相似度查找相关新闻 + + Args: + reference_title: 参考标题 + threshold: 相似度阈值(0-1之间) + limit: 返回条数限制,默认50 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 相似新闻列表 + + Examples: + 用户询问示例: + - "找出和'特斯拉降价'相似的新闻" + - "查找关于iPhone发布的类似报道" + - "看看有没有和这条新闻相似的报道" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.find_similar_news( + ... reference_title="特斯拉宣布降价", + ... threshold=0.6, + ... limit=10 + ... ) + >>> print(result['similar_news']) + """ + try: + # 参数验证 + reference_title = validate_keyword(reference_title) + + if not 0 <= threshold <= 1: + raise InvalidParameterError( + "threshold 必须在 0 到 1 之间", + suggestion="推荐值:0.5-0.8" + ) + + limit = validate_limit(limit, default=50) + + # 读取数据 + all_titles, id_to_name, _ = self.data_service.parser.read_all_titles_for_date() + + # 计算相似度 + similar_items = [] + + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + if title == reference_title: + continue + + # 计算相似度 + similarity = self._calculate_similarity(reference_title, title) + + if similarity >= threshold: + news_item = { + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "similarity": round(similarity, 3), + "rank": info["ranks"][0] if info["ranks"] else 0 + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + + similar_items.append(news_item) + + # 按相似度排序 + similar_items.sort(key=lambda x: x["similarity"], reverse=True) + + # 限制数量 + result_items = similar_items[:limit] + + if not result_items: + raise DataNotFoundError( + f"未找到相似度超过 {threshold} 的新闻", + suggestion="请降低相似度阈值或尝试其他标题" + ) + + result = { + "success": True, + "summary": { + "total_found": len(similar_items), + "returned_count": len(result_items), + "requested_limit": limit, + "threshold": threshold, + "reference_title": reference_title + }, + "similar_news": result_items + } + + if len(similar_items) < limit: + result["note"] = f"相似度阈值 {threshold} 下仅找到 {len(similar_items)} 条相似新闻" + + return result + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def search_by_entity( + self, + entity: str, + entity_type: Optional[str] = None, + limit: int = 50, + sort_by_weight: bool = True + ) -> Dict: + """ + 实体识别搜索 - 搜索包含特定人物/地点/机构的新闻 + + Args: + entity: 实体名称 + entity_type: 实体类型(person/location/organization),可选 + limit: 返回条数限制,默认50,最大200 + sort_by_weight: 是否按权重排序,默认True + + Returns: + 实体相关新闻列表 + + Examples: + 用户询问示例: + - "搜索马斯克相关的新闻" + - "查找关于特斯拉公司的报道,返回前20条" + - "看看北京有什么新闻" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.search_by_entity( + ... entity="马斯克", + ... entity_type="person", + ... limit=20 + ... ) + >>> print(result['related_news']) + """ + try: + # 参数验证 + entity = validate_keyword(entity) + limit = validate_limit(limit, default=50) + + if entity_type and entity_type not in ["person", "location", "organization"]: + raise InvalidParameterError( + f"无效的实体类型: {entity_type}", + suggestion="支持的类型: person, location, organization" + ) + + # 读取数据 + all_titles, id_to_name, _ = self.data_service.parser.read_all_titles_for_date() + + # 搜索包含实体的新闻 + related_news = [] + entity_context = Counter() # 统计实体周边的词 + + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + if entity in title: + url = info.get("url", "") + mobile_url = info.get("mobileUrl", "") + ranks = info.get("ranks", []) + count = len(ranks) + + related_news.append({ + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "url": url, + "mobileUrl": mobile_url, + "ranks": ranks, + "count": count, + "rank": ranks[0] if ranks else 999 + }) + + # 提取实体周边的关键词 + keywords = self._extract_keywords(title) + entity_context.update(keywords) + + if not related_news: + raise DataNotFoundError( + f"未找到包含实体 '{entity}' 的新闻", + suggestion="请尝试其他实体名称" + ) + + # 移除实体本身 + if entity in entity_context: + del entity_context[entity] + + # 按权重排序(如果启用) + if sort_by_weight: + related_news.sort( + key=lambda x: calculate_news_weight(x), + reverse=True + ) + else: + # 按排名排序 + related_news.sort(key=lambda x: x["rank"]) + + # 限制返回数量 + result_news = related_news[:limit] + + return { + "success": True, + "entity": entity, + "entity_type": entity_type or "auto", + "related_news": result_news, + "total_found": len(related_news), + "returned_count": len(result_news), + "sorted_by_weight": sort_by_weight, + "related_keywords": [ + {"keyword": k, "count": v} + for k, v in entity_context.most_common(10) + ] + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def generate_summary_report( + self, + report_type: str = "daily", + date_range: Optional[Dict[str, str]] = None + ) -> Dict: + """ + 每日/每周摘要生成器 - 自动生成热点摘要报告 + + Args: + report_type: 报告类型(daily/weekly) + date_range: 自定义日期范围(可选) + + Returns: + Markdown格式的摘要报告 + + Examples: + 用户询问示例: + - "生成今天的新闻摘要报告" + - "给我一份本周的热点总结" + - "生成过去7天的新闻分析报告" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.generate_summary_report( + ... report_type="daily" + ... ) + >>> print(result['markdown_report']) + """ + try: + # 参数验证 + if report_type not in ["daily", "weekly"]: + raise InvalidParameterError( + f"无效的报告类型: {report_type}", + suggestion="支持的类型: daily, weekly" + ) + + # 确定日期范围 + if date_range: + date_range_tuple = validate_date_range(date_range) + start_date, end_date = date_range_tuple + else: + if report_type == "daily": + start_date = end_date = datetime.now() + else: # weekly + end_date = datetime.now() + start_date = end_date - timedelta(days=6) + + # 收集数据 + all_keywords = Counter() + all_platforms_news = defaultdict(int) + all_titles_list = [] + + current_date = start_date + while current_date <= end_date: + try: + all_titles, id_to_name, _ = self.data_service.parser.read_all_titles_for_date( + date=current_date + ) + + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + all_platforms_news[platform_name] += len(titles) + + for title in titles.keys(): + all_titles_list.append({ + "title": title, + "platform": platform_name, + "date": current_date.strftime("%Y-%m-%d") + }) + + # 提取关键词 + keywords = self._extract_keywords(title) + all_keywords.update(keywords) + + except DataNotFoundError: + pass + + current_date += timedelta(days=1) + + # 生成报告 + report_title = f"{'每日' if report_type == 'daily' else '每周'}新闻热点摘要" + date_str = f"{start_date.strftime('%Y-%m-%d')}" if report_type == "daily" else f"{start_date.strftime('%Y-%m-%d')} 至 {end_date.strftime('%Y-%m-%d')}" + + # 构建Markdown报告 + markdown = f"""# {report_title} + +**报告日期**: {date_str} +**生成时间**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} + +--- + +## 📊 数据概览 + +- **总新闻数**: {len(all_titles_list)} +- **覆盖平台**: {len(all_platforms_news)} +- **热门关键词数**: {len(all_keywords)} + +## 🔥 TOP 10 热门话题 + +""" + + # 添加TOP 10关键词 + for i, (keyword, count) in enumerate(all_keywords.most_common(10), 1): + markdown += f"{i}. **{keyword}** - 出现 {count} 次\n" + + # 平台分析 + markdown += "\n## 📱 平台活跃度\n\n" + sorted_platforms = sorted(all_platforms_news.items(), key=lambda x: x[1], reverse=True) + + for platform, count in sorted_platforms: + markdown += f"- **{platform}**: {count} 条新闻\n" + + # 趋势变化(如果是周报) + if report_type == "weekly": + markdown += "\n## 📈 趋势分析\n\n" + markdown += "本周热度持续的话题(样本数据):\n\n" + + # 简单的趋势分析 + top_keywords = [kw for kw, _ in all_keywords.most_common(5)] + for keyword in top_keywords: + markdown += f"- **{keyword}**: 持续热门\n" + + # 添加样本新闻(按权重选择,确保确定性) + markdown += "\n## 📰 精选新闻样本\n\n" + + # 确定性选取:按标题的权重排序,取前5条 + # 这样相同输入总是返回相同结果 + if all_titles_list: + # 计算每条新闻的权重分数(基于关键词出现次数) + news_with_scores = [] + for news in all_titles_list: + # 简单权重:统计包含TOP关键词的次数 + score = 0 + title_lower = news['title'].lower() + for keyword, count in all_keywords.most_common(10): + if keyword.lower() in title_lower: + score += count + news_with_scores.append((news, score)) + + # 按权重降序排序,权重相同则按标题字母顺序(确保确定性) + news_with_scores.sort(key=lambda x: (-x[1], x[0]['title'])) + + # 取前5条 + sample_news = [item[0] for item in news_with_scores[:5]] + + for news in sample_news: + markdown += f"- [{news['platform']}] {news['title']}\n" + + markdown += "\n---\n\n*本报告由 TrendRadar MCP 自动生成*\n" + + return { + "success": True, + "report_type": report_type, + "date_range": { + "start": start_date.strftime("%Y-%m-%d"), + "end": end_date.strftime("%Y-%m-%d") + }, + "markdown_report": markdown, + "statistics": { + "total_news": len(all_titles_list), + "platforms_count": len(all_platforms_news), + "keywords_count": len(all_keywords), + "top_keyword": all_keywords.most_common(1)[0] if all_keywords else None + } + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def get_platform_activity_stats( + self, + date_range: Optional[Dict[str, str]] = None + ) -> Dict: + """ + 平台活跃度统计 - 统计各平台的发布频率和活跃时间段 + + Args: + date_range: 日期范围(可选) + + Returns: + 平台活跃度统计结果 + + Examples: + 用户询问示例: + - "统计各平台今天的活跃度" + - "看看哪个平台更新最频繁" + - "分析各平台的发布时间规律" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.get_platform_activity_stats( + ... date_range={"start": "2025-10-01", "end": "2025-10-11"} + ... ) + >>> print(result['platform_activity']) + """ + try: + # 参数验证 + date_range_tuple = validate_date_range(date_range) + + # 确定日期范围 + if date_range_tuple: + start_date, end_date = date_range_tuple + else: + start_date = end_date = datetime.now() + + # 统计各平台活跃度 + platform_activity = defaultdict(lambda: { + "total_updates": 0, + "days_active": set(), + "news_count": 0, + "hourly_distribution": Counter() + }) + + # 遍历日期范围 + current_date = start_date + while current_date <= end_date: + try: + all_titles, id_to_name, timestamps = self.data_service.parser.read_all_titles_for_date( + date=current_date + ) + + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + platform_activity[platform_name]["news_count"] += len(titles) + platform_activity[platform_name]["days_active"].add(current_date.strftime("%Y-%m-%d")) + + # 统计更新次数(基于文件数量) + platform_activity[platform_name]["total_updates"] += len(timestamps) + + # 统计时间分布(基于文件名中的时间) + for filename in timestamps.keys(): + # 解析文件名中的小时(格式:HHMM.txt) + match = re.match(r'(\d{2})(\d{2})\.txt', filename) + if match: + hour = int(match.group(1)) + platform_activity[platform_name]["hourly_distribution"][hour] += 1 + + except DataNotFoundError: + pass + + current_date += timedelta(days=1) + + # 转换为可序列化的格式 + result_activity = {} + for platform, stats in platform_activity.items(): + days_count = len(stats["days_active"]) + avg_news_per_day = stats["news_count"] / days_count if days_count > 0 else 0 + + # 找出最活跃的时间段 + most_active_hours = stats["hourly_distribution"].most_common(3) + + result_activity[platform] = { + "total_updates": stats["total_updates"], + "news_count": stats["news_count"], + "days_active": days_count, + "avg_news_per_day": round(avg_news_per_day, 2), + "most_active_hours": [ + {"hour": f"{hour:02d}:00", "count": count} + for hour, count in most_active_hours + ], + "activity_score": round(stats["news_count"] / max(days_count, 1), 2) + } + + # 按活跃度排序 + sorted_platforms = sorted( + result_activity.items(), + key=lambda x: x[1]["activity_score"], + reverse=True + ) + + return { + "success": True, + "date_range": { + "start": start_date.strftime("%Y-%m-%d"), + "end": end_date.strftime("%Y-%m-%d") + }, + "platform_activity": dict(sorted_platforms), + "most_active_platform": sorted_platforms[0][0] if sorted_platforms else None, + "total_platforms": len(result_activity) + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def analyze_topic_lifecycle( + self, + topic: str, + lookback_days: int = 7 + ) -> Dict: + """ + 话题生命周期分析 - 追踪话题从出现到消失的完整周期 + + Args: + topic: 话题关键词 + lookback_days: 回溯天数 + + Returns: + 话题生命周期分析结果 + + Examples: + 用户询问示例: + - "分析'人工智能'这个话题的生命周期" + - "看看'iPhone'话题是昙花一现还是持续热点" + - "追踪'比特币'话题的热度变化" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.analyze_topic_lifecycle( + ... topic="人工智能", + ... lookback_days=7 + ... ) + >>> print(result['lifecycle_stage']) + """ + try: + # 参数验证 + topic = validate_keyword(topic) + lookback_days = validate_limit(lookback_days, default=7, max_limit=30) + + # 收集话题历史数据 + lifecycle_data = [] + start_date = datetime.now() - timedelta(days=lookback_days) + + current_date = start_date + while current_date <= datetime.now(): + try: + all_titles, _, _ = self.data_service.parser.read_all_titles_for_date( + date=current_date + ) + + # 统计该日的话题出现次数 + count = 0 + for _, titles in all_titles.items(): + for title in titles.keys(): + if topic.lower() in title.lower(): + count += 1 + + lifecycle_data.append({ + "date": current_date.strftime("%Y-%m-%d"), + "count": count + }) + + except DataNotFoundError: + lifecycle_data.append({ + "date": current_date.strftime("%Y-%m-%d"), + "count": 0 + }) + + current_date += timedelta(days=1) + + # 分析生命周期阶段 + counts = [item["count"] for item in lifecycle_data] + + if not any(counts): + raise DataNotFoundError( + f"在过去 {lookback_days} 天内未找到话题 '{topic}'", + suggestion="请尝试其他话题或扩大时间范围" + ) + + # 找到首次出现和最后出现 + first_appearance = next((item["date"] for item in lifecycle_data if item["count"] > 0), None) + last_appearance = next((item["date"] for item in reversed(lifecycle_data) if item["count"] > 0), None) + + # 计算峰值 + max_count = max(counts) + peak_index = counts.index(max_count) + peak_date = lifecycle_data[peak_index]["date"] + + # 计算平均值和标准差(简单实现) + non_zero_counts = [c for c in counts if c > 0] + avg_count = sum(non_zero_counts) / len(non_zero_counts) if non_zero_counts else 0 + + # 判断生命周期阶段 + recent_counts = counts[-3:] # 最近3天 + early_counts = counts[:3] # 前3天 + + if sum(recent_counts) > sum(early_counts): + lifecycle_stage = "上升期" + elif sum(recent_counts) < sum(early_counts) * 0.5: + lifecycle_stage = "衰退期" + elif max_count in recent_counts: + lifecycle_stage = "爆发期" + else: + lifecycle_stage = "稳定期" + + # 分类:昙花一现 vs 持续热点 + active_days = sum(1 for c in counts if c > 0) + + if active_days <= 2 and max_count > avg_count * 2: + topic_type = "昙花一现" + elif active_days >= lookback_days * 0.6: + topic_type = "持续热点" + else: + topic_type = "周期性热点" + + return { + "success": True, + "topic": topic, + "lookback_days": lookback_days, + "lifecycle_data": lifecycle_data, + "analysis": { + "first_appearance": first_appearance, + "last_appearance": last_appearance, + "peak_date": peak_date, + "peak_count": max_count, + "active_days": active_days, + "avg_daily_mentions": round(avg_count, 2), + "lifecycle_stage": lifecycle_stage, + "topic_type": topic_type + } + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def detect_viral_topics( + self, + threshold: float = 3.0, + time_window: int = 24 + ) -> Dict: + """ + 异常热度检测 - 自动识别突然爆火的话题 + + Args: + threshold: 热度突增倍数阈值 + time_window: 检测时间窗口(小时) + + Returns: + 爆火话题列表 + + Examples: + 用户询问示例: + - "检测今天有哪些突然爆火的话题" + - "看看有没有热度异常的新闻" + - "预警可能的重大事件" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.detect_viral_topics( + ... threshold=3.0, + ... time_window=24 + ... ) + >>> print(result['viral_topics']) + """ + try: + # 参数验证 + if threshold < 1.0: + raise InvalidParameterError( + "threshold 必须大于等于 1.0", + suggestion="推荐值:2.0-5.0" + ) + + time_window = validate_limit(time_window, default=24, max_limit=72) + + # 读取当前和之前的数据 + current_all_titles, _, _ = self.data_service.parser.read_all_titles_for_date() + + # 读取昨天的数据作为基准 + yesterday = datetime.now() - timedelta(days=1) + try: + previous_all_titles, _, _ = self.data_service.parser.read_all_titles_for_date( + date=yesterday + ) + except DataNotFoundError: + previous_all_titles = {} + + # 统计当前的关键词频率 + current_keywords = Counter() + current_keyword_titles = defaultdict(list) + + for _, titles in current_all_titles.items(): + for title in titles.keys(): + keywords = self._extract_keywords(title) + current_keywords.update(keywords) + + for kw in keywords: + current_keyword_titles[kw].append(title) + + # 统计之前的关键词频率 + previous_keywords = Counter() + + for _, titles in previous_all_titles.items(): + for title in titles.keys(): + keywords = self._extract_keywords(title) + previous_keywords.update(keywords) + + # 检测异常热度 + viral_topics = [] + + for keyword, current_count in current_keywords.items(): + previous_count = previous_keywords.get(keyword, 0) + + # 计算增长倍数 + if previous_count == 0: + # 新出现的话题 + if current_count >= 5: # 至少出现5次才认为是爆火 + growth_rate = float('inf') + is_viral = True + else: + continue + else: + growth_rate = current_count / previous_count + is_viral = growth_rate >= threshold + + if is_viral: + viral_topics.append({ + "keyword": keyword, + "current_count": current_count, + "previous_count": previous_count, + "growth_rate": round(growth_rate, 2) if growth_rate != float('inf') else "新话题", + "sample_titles": current_keyword_titles[keyword][:3], + "alert_level": "高" if growth_rate > threshold * 2 else "中" + }) + + # 按增长率排序 + viral_topics.sort( + key=lambda x: x["current_count"] if x["growth_rate"] == "新话题" else x["growth_rate"], + reverse=True + ) + + if not viral_topics: + return { + "success": True, + "viral_topics": [], + "total_detected": 0, + "message": f"未检测到热度增长超过 {threshold} 倍的话题" + } + + return { + "success": True, + "viral_topics": viral_topics, + "total_detected": len(viral_topics), + "threshold": threshold, + "time_window": time_window, + "detection_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def predict_trending_topics( + self, + lookahead_hours: int = 6, + confidence_threshold: float = 0.7 + ) -> Dict: + """ + 话题预测 - 基于历史数据预测未来可能的热点 + + Args: + lookahead_hours: 预测未来多少小时 + confidence_threshold: 置信度阈值 + + Returns: + 预测的潜力话题列表 + + Examples: + 用户询问示例: + - "预测接下来6小时可能的热点话题" + - "有哪些话题可能会火起来" + - "早期发现潜力话题" + + 代码调用示例: + >>> tools = AnalyticsTools() + >>> result = tools.predict_trending_topics( + ... lookahead_hours=6, + ... confidence_threshold=0.7 + ... ) + >>> print(result['predicted_topics']) + """ + try: + # 参数验证 + lookahead_hours = validate_limit(lookahead_hours, default=6, max_limit=48) + + if not 0 <= confidence_threshold <= 1: + raise InvalidParameterError( + "confidence_threshold 必须在 0 到 1 之间", + suggestion="推荐值:0.6-0.8" + ) + + # 收集最近3天的数据用于预测 + keyword_trends = defaultdict(list) + + for days_ago in range(3, 0, -1): + date = datetime.now() - timedelta(days=days_ago) + + try: + all_titles, _, _ = self.data_service.parser.read_all_titles_for_date( + date=date + ) + + # 统计关键词 + keywords_count = Counter() + for _, titles in all_titles.items(): + for title in titles.keys(): + keywords = self._extract_keywords(title) + keywords_count.update(keywords) + + # 记录每个关键词的历史数据 + for keyword, count in keywords_count.items(): + keyword_trends[keyword].append(count) + + except DataNotFoundError: + pass + + # 添加今天的数据 + try: + all_titles, _, _ = self.data_service.parser.read_all_titles_for_date() + + keywords_count = Counter() + keyword_titles = defaultdict(list) + + for _, titles in all_titles.items(): + for title in titles.keys(): + keywords = self._extract_keywords(title) + keywords_count.update(keywords) + + for kw in keywords: + keyword_titles[kw].append(title) + + for keyword, count in keywords_count.items(): + keyword_trends[keyword].append(count) + + except DataNotFoundError: + raise DataNotFoundError( + "未找到今天的数据", + suggestion="请等待爬虫任务完成" + ) + + # 预测潜力话题 + predicted_topics = [] + + for keyword, trend_data in keyword_trends.items(): + if len(trend_data) < 2: + continue + + # 简单的线性趋势预测 + # 计算增长率 + recent_value = trend_data[-1] + previous_value = trend_data[-2] if len(trend_data) >= 2 else 0 + + if previous_value == 0: + if recent_value >= 3: + growth_rate = 1.0 + else: + continue + else: + growth_rate = (recent_value - previous_value) / previous_value + + # 判断是否是上升趋势 + if growth_rate > 0.3: # 增长超过30% + # 计算置信度(基于趋势的稳定性) + if len(trend_data) >= 3: + # 检查是否连续增长 + is_consistent = all( + trend_data[i] <= trend_data[i+1] + for i in range(len(trend_data)-1) + ) + confidence = 0.9 if is_consistent else 0.7 + else: + confidence = 0.6 + + if confidence >= confidence_threshold: + predicted_topics.append({ + "keyword": keyword, + "current_count": recent_value, + "growth_rate": round(growth_rate * 100, 2), + "confidence": round(confidence, 2), + "trend_data": trend_data, + "prediction": "上升趋势,可能成为热点", + "sample_titles": keyword_titles.get(keyword, [])[:3] + }) + + # 按置信度和增长率排序 + predicted_topics.sort( + key=lambda x: (x["confidence"], x["growth_rate"]), + reverse=True + ) + + return { + "success": True, + "predicted_topics": predicted_topics[:20], # 返回TOP 20 + "total_predicted": len(predicted_topics), + "lookahead_hours": lookahead_hours, + "confidence_threshold": confidence_threshold, + "prediction_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "note": "预测基于历史趋势,实际结果可能有偏差" + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + # ==================== 辅助方法 ==================== + + def _parse_time_range(self, time_range: str) -> int: + """解析时间范围字符串为天数""" + match = re.match(r'(\d+)([dhwm])', time_range.lower()) + if not match: + raise InvalidParameterError( + f"无效的时间范围格式: {time_range}", + suggestion="格式示例:7d(7天)、24h(24小时)、1w(1周)、1m(1个月)、2m(2个月)" + ) + + value = int(match.group(1)) + unit = match.group(2) + + if unit == 'h': + return max(1, value // 24) # 转换为天数 + elif unit == 'd': + return value + elif unit == 'w': + return value * 7 + elif unit == 'm': + return value * 30 # 1个月按30天计算 + + return value + + def _extract_keywords(self, title: str, min_length: int = 2) -> List[str]: + """ + 从标题中提取关键词(简单实现) + + Args: + title: 标题文本 + min_length: 最小关键词长度 + + Returns: + 关键词列表 + """ + # 移除URL和特殊字符 + title = re.sub(r'http[s]?://\S+', '', title) + title = re.sub(r'[^\w\s]', ' ', title) + + # 简单分词(按空格和常见分隔符) + words = re.split(r'[\s,。!?、]+', title) + + # 过滤停用词和短词 + stopwords = {'的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'} + + keywords = [ + word.strip() for word in words + if word.strip() and len(word.strip()) >= min_length and word.strip() not in stopwords + ] + + return keywords + + def _calculate_similarity(self, text1: str, text2: str) -> float: + """ + 计算两个文本的相似度 + + Args: + text1: 文本1 + text2: 文本2 + + Returns: + 相似度分数(0-1之间) + """ + # 使用 SequenceMatcher 计算相似度 + return SequenceMatcher(None, text1, text2).ratio() + + def _find_unique_topics(self, platform_stats: Dict) -> Dict[str, List[str]]: + """ + 找出各平台独有的热点话题 + + Args: + platform_stats: 平台统计数据 + + Returns: + 各平台独有话题字典 + """ + unique_topics = {} + + # 获取每个平台的TOP关键词 + platform_keywords = {} + for platform, stats in platform_stats.items(): + top_keywords = set([kw for kw, _ in stats["top_keywords"].most_common(10)]) + platform_keywords[platform] = top_keywords + + # 找出独有关键词 + for platform, keywords in platform_keywords.items(): + # 找出其他平台的所有关键词 + other_keywords = set() + for other_platform, other_kws in platform_keywords.items(): + if other_platform != platform: + other_keywords.update(other_kws) + + # 找出独有的 + unique = keywords - other_keywords + if unique: + unique_topics[platform] = list(unique)[:5] # 最多5个 + + return unique_topics diff --git a/mcp_server/tools/config_mgmt.py b/mcp_server/tools/config_mgmt.py new file mode 100644 index 0000000..25ab7f5 --- /dev/null +++ b/mcp_server/tools/config_mgmt.py @@ -0,0 +1,66 @@ +""" +配置管理工具 + +实现配置查询和管理功能。 +""" + +from typing import Dict, Optional + +from ..services.data_service import DataService +from ..utils.validators import validate_config_section +from ..utils.errors import MCPError + + +class ConfigManagementTools: + """配置管理工具类""" + + def __init__(self, project_root: str = None): + """ + 初始化配置管理工具 + + Args: + project_root: 项目根目录 + """ + self.data_service = DataService(project_root) + + def get_current_config(self, section: Optional[str] = None) -> Dict: + """ + 获取当前系统配置 + + Args: + section: 配置节 - all/crawler/push/keywords/weights,默认all + + Returns: + 配置字典 + + Example: + >>> tools = ConfigManagementTools() + >>> result = tools.get_current_config(section="crawler") + >>> print(result['crawler']['platforms']) + """ + try: + # 参数验证 + section = validate_config_section(section) + + # 获取配置 + config = self.data_service.get_current_config(section=section) + + return { + "config": config, + "section": section, + "success": True + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } diff --git a/mcp_server/tools/data_query.py b/mcp_server/tools/data_query.py new file mode 100644 index 0000000..49504da --- /dev/null +++ b/mcp_server/tools/data_query.py @@ -0,0 +1,284 @@ +""" +数据查询工具 + +实现P0核心的数据查询工具。 +""" + +from typing import Dict, List, Optional + +from ..services.data_service import DataService +from ..utils.validators import ( + validate_platforms, + validate_limit, + validate_keyword, + validate_date_range, + validate_top_n, + validate_mode, + validate_date_query +) +from ..utils.errors import MCPError + + +class DataQueryTools: + """数据查询工具类""" + + def __init__(self, project_root: str = None): + """ + 初始化数据查询工具 + + Args: + project_root: 项目根目录 + """ + self.data_service = DataService(project_root) + + def get_latest_news( + self, + platforms: Optional[List[str]] = None, + limit: Optional[int] = None, + include_url: bool = False + ) -> Dict: + """ + 获取最新一批爬取的新闻数据 + + Args: + platforms: 平台ID列表,如 ['zhihu', 'weibo'] + limit: 返回条数限制,默认20 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 新闻列表字典 + + Example: + >>> tools = DataQueryTools() + >>> result = tools.get_latest_news(platforms=['zhihu'], limit=10) + >>> print(result['total']) + 10 + """ + try: + # 参数验证 + platforms = validate_platforms(platforms) + limit = validate_limit(limit, default=50) + + # 获取数据 + news_list = self.data_service.get_latest_news( + platforms=platforms, + limit=limit, + include_url=include_url + ) + + return { + "news": news_list, + "total": len(news_list), + "platforms": platforms, + "success": True + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def search_news_by_keyword( + self, + keyword: str, + date_range: Optional[Dict] = None, + platforms: Optional[List[str]] = None, + limit: Optional[int] = None + ) -> Dict: + """ + 按关键词搜索历史新闻 + + Args: + keyword: 搜索关键词(必需) + date_range: 日期范围,格式: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} + platforms: 平台过滤列表 + limit: 返回条数限制(可选,默认返回所有) + + Returns: + 搜索结果字典 + + Example: + >>> tools = DataQueryTools() + >>> result = tools.search_news_by_keyword( + ... keyword="人工智能", + ... date_range={"start": "2025-10-01", "end": "2025-10-11"}, + ... limit=50 + ... ) + >>> print(result['total']) + """ + try: + # 参数验证 + keyword = validate_keyword(keyword) + date_range_tuple = validate_date_range(date_range) + platforms = validate_platforms(platforms) + + if limit is not None: + limit = validate_limit(limit, default=100) + + # 搜索数据 + search_result = self.data_service.search_news_by_keyword( + keyword=keyword, + date_range=date_range_tuple, + platforms=platforms, + limit=limit + ) + + return { + **search_result, + "success": True + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def get_trending_topics( + self, + top_n: Optional[int] = None, + mode: Optional[str] = None + ) -> Dict: + """ + 获取个人关注词的新闻出现频率统计 + + 注意:本工具基于 config/frequency_words.txt 中的个人关注词列表进行统计, + 而不是自动从新闻中提取热点话题。这是一个个人可定制的关注词列表, + 用户可以根据自己的兴趣添加或删除关注词。 + + Args: + top_n: 返回TOP N关注词,默认10 + mode: 模式 - daily(当日累计), current(最新一批), incremental(增量) + + Returns: + 关注词频率统计字典,包含每个关注词在新闻中出现的次数 + + Example: + >>> tools = DataQueryTools() + >>> result = tools.get_trending_topics(top_n=5, mode="current") + >>> print(len(result['topics'])) + 5 + >>> # 返回的是你在 frequency_words.txt 中设置的关注词的频率统计 + """ + try: + # 参数验证 + top_n = validate_top_n(top_n, default=10) + valid_modes = ["daily", "current", "incremental"] + mode = validate_mode(mode, valid_modes, default="current") + + # 获取趋势话题 + trending_result = self.data_service.get_trending_topics( + top_n=top_n, + mode=mode + ) + + return { + **trending_result, + "success": True + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def get_news_by_date( + self, + date_query: Optional[str] = None, + platforms: Optional[List[str]] = None, + limit: Optional[int] = None, + include_url: bool = False + ) -> Dict: + """ + 按日期查询新闻,支持自然语言日期 + + Args: + date_query: 日期查询字符串(可选,默认"今天"),支持: + - 相对日期:今天、昨天、前天、3天前、yesterday、3 days ago + - 星期:上周一、本周三、last monday、this friday + - 绝对日期:2025-10-10、10月10日、2025年10月10日 + platforms: 平台ID列表,如 ['zhihu', 'weibo'] + limit: 返回条数限制,默认50 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 新闻列表字典 + + Example: + >>> tools = DataQueryTools() + >>> # 不指定日期,默认查询今天 + >>> result = tools.get_news_by_date(platforms=['zhihu'], limit=20) + >>> # 指定日期 + >>> result = tools.get_news_by_date( + ... date_query="昨天", + ... platforms=['zhihu'], + ... limit=20 + ... ) + >>> print(result['total']) + 20 + """ + try: + # 参数验证 - 默认今天 + if date_query is None: + date_query = "今天" + target_date = validate_date_query(date_query) + platforms = validate_platforms(platforms) + limit = validate_limit(limit, default=50) + + # 获取数据 + news_list = self.data_service.get_news_by_date( + target_date=target_date, + platforms=platforms, + limit=limit, + include_url=include_url + ) + + return { + "news": news_list, + "total": len(news_list), + "date": target_date.strftime("%Y-%m-%d"), + "date_query": date_query, + "platforms": platforms, + "success": True + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + diff --git a/mcp_server/tools/search_tools.py b/mcp_server/tools/search_tools.py new file mode 100644 index 0000000..a68ee17 --- /dev/null +++ b/mcp_server/tools/search_tools.py @@ -0,0 +1,664 @@ +""" +智能新闻检索工具 + +提供模糊搜索、链接查询、历史相关新闻检索等高级搜索功能。 +""" + +import re +from collections import Counter +from datetime import datetime, timedelta +from difflib import SequenceMatcher +from typing import Dict, List, Optional, Tuple + +from ..services.data_service import DataService +from ..utils.validators import validate_keyword, validate_limit +from ..utils.errors import MCPError, InvalidParameterError, DataNotFoundError + + +class SearchTools: + """智能新闻检索工具类""" + + def __init__(self, project_root: str = None): + """ + 初始化智能检索工具 + + Args: + project_root: 项目根目录 + """ + self.data_service = DataService(project_root) + # 中文停用词列表 + self.stopwords = { + '的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', + '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', + '看', '好', '自己', '这', '那', '来', '被', '与', '为', '对', '将', '从', + '以', '及', '等', '但', '或', '而', '于', '中', '由', '可', '可以', '已', + '已经', '还', '更', '最', '再', '因为', '所以', '如果', '虽然', '然而' + } + + def search_news_unified( + self, + query: str, + search_mode: str = "keyword", + date_range: Optional[Dict[str, str]] = None, + platforms: Optional[List[str]] = None, + limit: int = 50, + sort_by: str = "relevance", + threshold: float = 0.6, + include_url: bool = False + ) -> Dict: + """ + 统一新闻搜索工具 - 整合多种搜索模式 + + Args: + query: 查询内容(必需)- 关键词、内容片段或实体名称 + search_mode: 搜索模式,可选值: + - "keyword": 精确关键词匹配(默认) + - "fuzzy": 模糊内容匹配(使用相似度算法) + - "entity": 实体名称搜索(自动按权重排序) + date_range: 日期范围,格式: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} + 不指定则默认查询今天 + platforms: 平台过滤列表,如 ['zhihu', 'weibo'] + limit: 返回条数限制,默认50 + sort_by: 排序方式,可选值: + - "relevance": 按相关度排序(默认) + - "weight": 按新闻权重排序 + - "date": 按日期排序 + threshold: 相似度阈值(仅fuzzy模式有效),0-1之间,默认0.6 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 搜索结果字典,包含匹配的新闻列表 + + Examples: + - search_news_unified(query="人工智能", search_mode="keyword") + - search_news_unified(query="特斯拉降价", search_mode="fuzzy", threshold=0.4) + - search_news_unified(query="马斯克", search_mode="entity", limit=20) + - search_news_unified(query="iPhone 16发布", search_mode="keyword") + """ + try: + # 参数验证 + query = validate_keyword(query) + + if search_mode not in ["keyword", "fuzzy", "entity"]: + raise InvalidParameterError( + f"无效的搜索模式: {search_mode}", + suggestion="支持的模式: keyword, fuzzy, entity" + ) + + if sort_by not in ["relevance", "weight", "date"]: + raise InvalidParameterError( + f"无效的排序方式: {sort_by}", + suggestion="支持的排序: relevance, weight, date" + ) + + limit = validate_limit(limit, default=50) + threshold = max(0.0, min(1.0, threshold)) + + # 处理日期范围 + if date_range: + from ..utils.validators import validate_date_range + date_range_tuple = validate_date_range(date_range) + start_date, end_date = date_range_tuple + else: + # 默认今天 + start_date = end_date = datetime.now() + + # 收集所有匹配的新闻 + all_matches = [] + current_date = start_date + + while current_date <= end_date: + try: + all_titles, id_to_name, timestamps = self.data_service.parser.read_all_titles_for_date( + date=current_date, + platform_ids=platforms + ) + + # 根据搜索模式执行不同的搜索逻辑 + if search_mode == "keyword": + matches = self._search_by_keyword_mode( + query, all_titles, id_to_name, current_date, include_url + ) + elif search_mode == "fuzzy": + matches = self._search_by_fuzzy_mode( + query, all_titles, id_to_name, current_date, threshold, include_url + ) + else: # entity + matches = self._search_by_entity_mode( + query, all_titles, id_to_name, current_date, include_url + ) + + all_matches.extend(matches) + + except DataNotFoundError: + # 该日期没有数据,继续下一天 + pass + + current_date += timedelta(days=1) + + if not all_matches: + time_desc = "今天" if start_date == end_date else f"{start_date.strftime('%Y-%m-%d')} 至 {end_date.strftime('%Y-%m-%d')}" + return { + "success": True, + "results": [], + "total": 0, + "query": query, + "search_mode": search_mode, + "time_range": time_desc, + "message": f"未找到匹配的新闻({time_desc})" + } + + # 统一排序逻辑 + if sort_by == "relevance": + all_matches.sort(key=lambda x: x.get("similarity_score", 1.0), reverse=True) + elif sort_by == "weight": + from .analytics import calculate_news_weight + all_matches.sort(key=lambda x: calculate_news_weight(x), reverse=True) + elif sort_by == "date": + all_matches.sort(key=lambda x: x.get("date", ""), reverse=True) + + # 限制返回数量 + results = all_matches[:limit] + + # 构建时间范围描述 + if start_date == end_date: + time_range_desc = start_date.strftime("%Y-%m-%d") + else: + time_range_desc = f"{start_date.strftime('%Y-%m-%d')} 至 {end_date.strftime('%Y-%m-%d')}" + + result = { + "success": True, + "summary": { + "total_found": len(all_matches), + "returned_count": len(results), + "requested_limit": limit, + "search_mode": search_mode, + "query": query, + "platforms": platforms or "所有平台", + "time_range": time_range_desc, + "sort_by": sort_by + }, + "results": results + } + + if search_mode == "fuzzy": + result["summary"]["threshold"] = threshold + if len(all_matches) < limit: + result["note"] = f"模糊搜索模式下,相似度阈值 {threshold} 仅匹配到 {len(all_matches)} 条结果" + + return result + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def _search_by_keyword_mode( + self, + query: str, + all_titles: Dict, + id_to_name: Dict, + current_date: datetime, + include_url: bool + ) -> List[Dict]: + """ + 关键词搜索模式(精确匹配) + + Args: + query: 搜索关键词 + all_titles: 所有标题字典 + id_to_name: 平台ID到名称映射 + current_date: 当前日期 + + Returns: + 匹配的新闻列表 + """ + matches = [] + query_lower = query.lower() + + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + # 精确包含判断 + if query_lower in title.lower(): + news_item = { + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "date": current_date.strftime("%Y-%m-%d"), + "similarity_score": 1.0, # 精确匹配,相似度为1 + "ranks": info.get("ranks", []), + "count": len(info.get("ranks", [])), + "rank": info["ranks"][0] if info["ranks"] else 999 + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + news_item["mobileUrl"] = info.get("mobileUrl", "") + + matches.append(news_item) + + return matches + + def _search_by_fuzzy_mode( + self, + query: str, + all_titles: Dict, + id_to_name: Dict, + current_date: datetime, + threshold: float, + include_url: bool + ) -> List[Dict]: + """ + 模糊搜索模式(使用相似度算法) + + Args: + query: 搜索内容 + all_titles: 所有标题字典 + id_to_name: 平台ID到名称映射 + current_date: 当前日期 + threshold: 相似度阈值 + + Returns: + 匹配的新闻列表 + """ + matches = [] + + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + # 模糊匹配 + is_match, similarity = self._fuzzy_match(query, title, threshold) + + if is_match: + news_item = { + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "date": current_date.strftime("%Y-%m-%d"), + "similarity_score": round(similarity, 4), + "ranks": info.get("ranks", []), + "count": len(info.get("ranks", [])), + "rank": info["ranks"][0] if info["ranks"] else 999 + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + news_item["mobileUrl"] = info.get("mobileUrl", "") + + matches.append(news_item) + + return matches + + def _search_by_entity_mode( + self, + query: str, + all_titles: Dict, + id_to_name: Dict, + current_date: datetime, + include_url: bool + ) -> List[Dict]: + """ + 实体搜索模式(自动按权重排序) + + Args: + query: 实体名称 + all_titles: 所有标题字典 + id_to_name: 平台ID到名称映射 + current_date: 当前日期 + + Returns: + 匹配的新闻列表 + """ + matches = [] + + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + # 实体搜索:精确包含实体名称 + if query in title: + news_item = { + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "date": current_date.strftime("%Y-%m-%d"), + "similarity_score": 1.0, + "ranks": info.get("ranks", []), + "count": len(info.get("ranks", [])), + "rank": info["ranks"][0] if info["ranks"] else 999 + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + news_item["mobileUrl"] = info.get("mobileUrl", "") + + matches.append(news_item) + + return matches + + def _calculate_similarity(self, text1: str, text2: str) -> float: + """ + 计算两个文本的相似度 + + Args: + text1: 文本1 + text2: 文本2 + + Returns: + 相似度分数 (0-1之间) + """ + # 使用 difflib.SequenceMatcher 计算序列相似度 + return SequenceMatcher(None, text1.lower(), text2.lower()).ratio() + + def _fuzzy_match(self, query: str, text: str, threshold: float = 0.3) -> Tuple[bool, float]: + """ + 模糊匹配函数 + + Args: + query: 查询文本 + text: 待匹配文本 + threshold: 匹配阈值 + + Returns: + (是否匹配, 相似度分数) + """ + # 直接包含判断 + if query.lower() in text.lower(): + return True, 1.0 + + # 计算整体相似度 + similarity = self._calculate_similarity(query, text) + if similarity >= threshold: + return True, similarity + + # 分词后的部分匹配 + query_words = set(self._extract_keywords(query)) + text_words = set(self._extract_keywords(text)) + + if not query_words or not text_words: + return False, 0.0 + + # 计算关键词重合度 + common_words = query_words & text_words + keyword_overlap = len(common_words) / len(query_words) + + if keyword_overlap >= 0.5: # 50%的关键词重合 + return True, keyword_overlap + + return False, similarity + + def _extract_keywords(self, text: str, min_length: int = 2) -> List[str]: + """ + 从文本中提取关键词 + + Args: + text: 输入文本 + min_length: 最小词长 + + Returns: + 关键词列表 + """ + # 移除URL和特殊字符 + text = re.sub(r'http[s]?://\S+', '', text) + text = re.sub(r'\[.*?\]', '', text) # 移除方括号内容 + + # 使用正则表达式分词(中文和英文) + words = re.findall(r'[\w]+', text) + + # 过滤停用词和短词 + keywords = [ + word for word in words + if word and len(word) >= min_length and word not in self.stopwords + ] + + return keywords + + def _calculate_keyword_overlap(self, keywords1: List[str], keywords2: List[str]) -> float: + """ + 计算两个关键词列表的重合度 + + Args: + keywords1: 关键词列表1 + keywords2: 关键词列表2 + + Returns: + 重合度分数 (0-1之间) + """ + if not keywords1 or not keywords2: + return 0.0 + + set1 = set(keywords1) + set2 = set(keywords2) + + # Jaccard 相似度 + intersection = len(set1 & set2) + union = len(set1 | set2) + + if union == 0: + return 0.0 + + return intersection / union + + def search_related_news_history( + self, + reference_text: str, + time_range: str = "yesterday", + start_date: Optional[datetime] = None, + end_date: Optional[datetime] = None, + threshold: float = 0.4, + limit: int = 50, + include_url: bool = False + ) -> Dict: + """ + 在历史数据中搜索与给定新闻相关的新闻 + + Args: + reference_text: 参考新闻标题或内容 + time_range: 时间范围预设值,可选: + - "yesterday": 昨天 + - "last_week": 上周 (7天) + - "last_month": 上个月 (30天) + - "custom": 自定义日期范围(需要提供 start_date 和 end_date) + start_date: 自定义开始日期(仅当 time_range="custom" 时有效) + end_date: 自定义结束日期(仅当 time_range="custom" 时有效) + threshold: 相似度阈值 (0-1之间),默认0.4 + limit: 返回条数限制,默认50 + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 搜索结果字典,包含相关新闻列表 + + Example: + >>> tools = SearchTools() + >>> result = tools.search_related_news_history( + ... reference_text="人工智能技术突破", + ... time_range="last_week", + ... threshold=0.4, + ... limit=50 + ... ) + >>> for news in result['results']: + ... print(f"{news['date']}: {news['title']} (相似度: {news['similarity_score']})") + """ + try: + # 参数验证 + reference_text = validate_keyword(reference_text) + threshold = max(0.0, min(1.0, threshold)) + limit = validate_limit(limit, default=50) + + # 确定查询日期范围 + today = datetime.now() + + if time_range == "yesterday": + search_start = today - timedelta(days=1) + search_end = today - timedelta(days=1) + elif time_range == "last_week": + search_start = today - timedelta(days=7) + search_end = today - timedelta(days=1) + elif time_range == "last_month": + search_start = today - timedelta(days=30) + search_end = today - timedelta(days=1) + elif time_range == "custom": + if not start_date or not end_date: + raise InvalidParameterError( + "自定义时间范围需要提供 start_date 和 end_date", + suggestion="请提供 start_date 和 end_date 参数" + ) + search_start = start_date + search_end = end_date + else: + raise InvalidParameterError( + f"不支持的时间范围: {time_range}", + suggestion="请使用 'yesterday', 'last_week', 'last_month' 或 'custom'" + ) + + # 提取参考文本的关键词 + reference_keywords = self._extract_keywords(reference_text) + + if not reference_keywords: + raise InvalidParameterError( + "无法从参考文本中提取关键词", + suggestion="请提供更详细的文本内容" + ) + + # 收集所有相关新闻 + all_related_news = [] + current_date = search_start + + while current_date <= search_end: + try: + # 读取该日期的数据 + all_titles, id_to_name, _ = self.data_service.parser.read_all_titles_for_date(current_date) + + # 搜索相关新闻 + for platform_id, titles in all_titles.items(): + platform_name = id_to_name.get(platform_id, platform_id) + + for title, info in titles.items(): + # 计算标题相似度 + title_similarity = self._calculate_similarity(reference_text, title) + + # 提取标题关键词 + title_keywords = self._extract_keywords(title) + + # 计算关键词重合度 + keyword_overlap = self._calculate_keyword_overlap( + reference_keywords, + title_keywords + ) + + # 综合相似度 (70% 关键词重合 + 30% 文本相似度) + combined_score = keyword_overlap * 0.7 + title_similarity * 0.3 + + if combined_score >= threshold: + news_item = { + "title": title, + "platform": platform_id, + "platform_name": platform_name, + "date": current_date.strftime("%Y-%m-%d"), + "similarity_score": round(combined_score, 4), + "keyword_overlap": round(keyword_overlap, 4), + "text_similarity": round(title_similarity, 4), + "common_keywords": list(set(reference_keywords) & set(title_keywords)), + "rank": info["ranks"][0] if info["ranks"] else 0 + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + news_item["mobileUrl"] = info.get("mobileUrl", "") + + all_related_news.append(news_item) + + except DataNotFoundError: + # 该日期没有数据,继续下一天 + pass + except Exception as e: + # 记录错误但继续处理其他日期 + print(f"Warning: 处理日期 {current_date.strftime('%Y-%m-%d')} 时出错: {e}") + + # 移动到下一天 + current_date += timedelta(days=1) + + if not all_related_news: + return { + "success": True, + "results": [], + "total": 0, + "query": reference_text, + "time_range": time_range, + "date_range": { + "start": search_start.strftime("%Y-%m-%d"), + "end": search_end.strftime("%Y-%m-%d") + }, + "message": "未找到相关新闻" + } + + # 按相似度排序 + all_related_news.sort(key=lambda x: x["similarity_score"], reverse=True) + + # 限制返回数量 + results = all_related_news[:limit] + + # 统计信息 + platform_distribution = Counter([news["platform"] for news in all_related_news]) + date_distribution = Counter([news["date"] for news in all_related_news]) + + result = { + "success": True, + "summary": { + "total_found": len(all_related_news), + "returned_count": len(results), + "requested_limit": limit, + "threshold": threshold, + "reference_text": reference_text, + "reference_keywords": reference_keywords, + "time_range": time_range, + "date_range": { + "start": search_start.strftime("%Y-%m-%d"), + "end": search_end.strftime("%Y-%m-%d") + } + }, + "results": results, + "statistics": { + "platform_distribution": dict(platform_distribution), + "date_distribution": dict(date_distribution), + "avg_similarity": round( + sum([news["similarity_score"] for news in all_related_news]) / len(all_related_news), + 4 + ) if all_related_news else 0.0 + } + } + + if len(all_related_news) < limit: + result["note"] = f"相关性阈值 {threshold} 下仅找到 {len(all_related_news)} 条相关新闻" + + return result + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } diff --git a/mcp_server/tools/system.py b/mcp_server/tools/system.py new file mode 100644 index 0000000..2cf2248 --- /dev/null +++ b/mcp_server/tools/system.py @@ -0,0 +1,465 @@ +""" +系统管理工具 + +实现系统状态查询和爬虫触发功能。 +""" + +from pathlib import Path +from typing import Dict, List, Optional + +from ..services.data_service import DataService +from ..utils.validators import validate_platforms +from ..utils.errors import MCPError, CrawlTaskError + + +class SystemManagementTools: + """系统管理工具类""" + + def __init__(self, project_root: str = None): + """ + 初始化系统管理工具 + + Args: + project_root: 项目根目录 + """ + self.data_service = DataService(project_root) + if project_root: + self.project_root = Path(project_root) + else: + # 获取项目根目录 + current_file = Path(__file__) + self.project_root = current_file.parent.parent.parent + + def get_system_status(self) -> Dict: + """ + 获取系统运行状态和健康检查信息 + + Returns: + 系统状态字典 + + Example: + >>> tools = SystemManagementTools() + >>> result = tools.get_system_status() + >>> print(result['system']['version']) + """ + try: + # 获取系统状态 + status = self.data_service.get_system_status() + + return { + **status, + "success": True + } + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e) + } + } + + def trigger_crawl(self, platforms: Optional[List[str]] = None, save_to_local: bool = False, include_url: bool = False) -> Dict: + """ + 手动触发一次临时爬取任务(可选持久化) + + Args: + platforms: 指定平台列表,为空则爬取所有平台 + save_to_local: 是否保存到本地 output 目录,默认 False + include_url: 是否包含URL链接,默认False(节省token) + + Returns: + 爬取结果字典,包含新闻数据和保存路径(如果保存) + + Example: + >>> tools = SystemManagementTools() + >>> # 临时爬取,不保存 + >>> result = tools.trigger_crawl(platforms=['zhihu', 'weibo']) + >>> print(result['data']) + >>> # 爬取并保存到本地 + >>> result = tools.trigger_crawl(platforms=['zhihu'], save_to_local=True) + >>> print(result['saved_files']) + """ + try: + import json + import time + import random + import requests + from datetime import datetime + import pytz + import yaml + + # 参数验证 + platforms = validate_platforms(platforms) + + # 加载配置文件 + config_path = self.project_root / "config" / "config.yaml" + if not config_path.exists(): + raise CrawlTaskError( + "配置文件不存在", + suggestion=f"请确保配置文件存在: {config_path}" + ) + + # 读取配置 + with open(config_path, "r", encoding="utf-8") as f: + config_data = yaml.safe_load(f) + + # 获取平台配置 + all_platforms = config_data.get("platforms", []) + if not all_platforms: + raise CrawlTaskError( + "配置文件中没有平台配置", + suggestion="请检查 config/config.yaml 中的 platforms 配置" + ) + + # 过滤平台 + if platforms: + target_platforms = [p for p in all_platforms if p["id"] in platforms] + if not target_platforms: + raise CrawlTaskError( + f"指定的平台不存在: {platforms}", + suggestion=f"可用平台: {[p['id'] for p in all_platforms]}" + ) + else: + target_platforms = all_platforms + + # 获取请求间隔 + request_interval = config_data.get("crawler", {}).get("request_interval", 100) + + # 构建平台ID列表 + ids = [] + for platform in target_platforms: + if "name" in platform: + ids.append((platform["id"], platform["name"])) + else: + ids.append(platform["id"]) + + print(f"开始临时爬取,平台: {[p.get('name', p['id']) for p in target_platforms]}") + + # 爬取数据 + results = {} + id_to_name = {} + failed_ids = [] + + for i, id_info in enumerate(ids): + if isinstance(id_info, tuple): + id_value, name = id_info + else: + id_value = id_info + name = id_value + + id_to_name[id_value] = name + + # 构建请求URL + url = f"https://newsnow.busiyi.world/api/s?id={id_value}&latest" + + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", + "Accept": "application/json, text/plain, */*", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Connection": "keep-alive", + "Cache-Control": "no-cache", + } + + # 重试机制 + max_retries = 2 + retries = 0 + success = False + + while retries <= max_retries and not success: + try: + response = requests.get(url, headers=headers, timeout=10) + response.raise_for_status() + + data_text = response.text + data_json = json.loads(data_text) + + status = data_json.get("status", "未知") + if status not in ["success", "cache"]: + raise ValueError(f"响应状态异常: {status}") + + status_info = "最新数据" if status == "success" else "缓存数据" + print(f"获取 {id_value} 成功({status_info})") + + # 解析数据 + results[id_value] = {} + for index, item in enumerate(data_json.get("items", []), 1): + title = item["title"] + url_link = item.get("url", "") + mobile_url = item.get("mobileUrl", "") + + if title in results[id_value]: + results[id_value][title]["ranks"].append(index) + else: + results[id_value][title] = { + "ranks": [index], + "url": url_link, + "mobileUrl": mobile_url, + } + + success = True + + except Exception as e: + retries += 1 + if retries <= max_retries: + wait_time = random.uniform(3, 5) + print(f"请求 {id_value} 失败: {e}. {wait_time:.2f}秒后重试...") + time.sleep(wait_time) + else: + print(f"请求 {id_value} 失败: {e}") + failed_ids.append(id_value) + + # 请求间隔 + if i < len(ids) - 1: + actual_interval = request_interval + random.randint(-10, 20) + actual_interval = max(50, actual_interval) + time.sleep(actual_interval / 1000) + + # 格式化返回数据 + news_data = [] + for platform_id, titles_data in results.items(): + platform_name = id_to_name.get(platform_id, platform_id) + for title, info in titles_data.items(): + news_item = { + "platform_id": platform_id, + "platform_name": platform_name, + "title": title, + "ranks": info["ranks"] + } + + # 条件性添加 URL 字段 + if include_url: + news_item["url"] = info.get("url", "") + news_item["mobile_url"] = info.get("mobileUrl", "") + + news_data.append(news_item) + + # 获取北京时间 + beijing_tz = pytz.timezone("Asia/Shanghai") + now = datetime.now(beijing_tz) + + # 构建返回结果 + result = { + "success": True, + "task_id": f"crawl_{int(time.time())}", + "status": "completed", + "crawl_time": now.strftime("%Y-%m-%d %H:%M:%S"), + "platforms": list(results.keys()), + "total_news": len(news_data), + "failed_platforms": failed_ids, + "data": news_data, + "saved_to_local": save_to_local + } + + # 如果需要持久化,调用保存逻辑 + if save_to_local: + try: + import re + + # 辅助函数:清理标题 + def clean_title(title: str) -> str: + """清理标题中的特殊字符""" + if not isinstance(title, str): + title = str(title) + cleaned_title = title.replace("\n", " ").replace("\r", " ") + cleaned_title = re.sub(r"\s+", " ", cleaned_title) + cleaned_title = cleaned_title.strip() + return cleaned_title + + # 辅助函数:创建目录 + def ensure_directory_exists(directory: str): + """确保目录存在""" + Path(directory).mkdir(parents=True, exist_ok=True) + + # 格式化日期和时间 + date_folder = now.strftime("%Y年%m月%d日") + time_filename = now.strftime("%H时%M分") + + # 创建 txt 文件路径 + txt_dir = self.project_root / "output" / date_folder / "txt" + ensure_directory_exists(str(txt_dir)) + txt_file_path = txt_dir / f"{time_filename}.txt" + + # 创建 html 文件路径 + html_dir = self.project_root / "output" / date_folder / "html" + ensure_directory_exists(str(html_dir)) + html_file_path = html_dir / f"{time_filename}.html" + + # 保存 txt 文件(按照 main.py 的格式) + with open(txt_file_path, "w", encoding="utf-8") as f: + for id_value, title_data in results.items(): + # id | name 或 id + name = id_to_name.get(id_value) + if name and name != id_value: + f.write(f"{id_value} | {name}\n") + else: + f.write(f"{id_value}\n") + + # 按排名排序标题 + sorted_titles = [] + for title, info in title_data.items(): + cleaned = clean_title(title) + if isinstance(info, dict): + ranks = info.get("ranks", []) + url = info.get("url", "") + mobile_url = info.get("mobileUrl", "") + else: + ranks = info if isinstance(info, list) else [] + url = "" + mobile_url = "" + + rank = ranks[0] if ranks else 1 + sorted_titles.append((rank, cleaned, url, mobile_url)) + + sorted_titles.sort(key=lambda x: x[0]) + + for rank, cleaned, url, mobile_url in sorted_titles: + line = f"{rank}. {cleaned}" + if url: + line += f" [URL:{url}]" + if mobile_url: + line += f" [MOBILE:{mobile_url}]" + f.write(line + "\n") + + f.write("\n") + + if failed_ids: + f.write("==== 以下ID请求失败 ====\n") + for id_value in failed_ids: + f.write(f"{id_value}\n") + + # 保存 html 文件(简化版) + html_content = self._generate_simple_html(results, id_to_name, failed_ids, now) + with open(html_file_path, "w", encoding="utf-8") as f: + f.write(html_content) + + print(f"数据已保存到:") + print(f" TXT: {txt_file_path}") + print(f" HTML: {html_file_path}") + + result["saved_files"] = { + "txt": str(txt_file_path), + "html": str(html_file_path) + } + result["note"] = "数据已持久化到 output 文件夹" + + except Exception as e: + print(f"保存文件失败: {e}") + result["save_error"] = str(e) + result["note"] = "爬取成功但保存失败,数据仅在内存中" + else: + result["note"] = "临时爬取结果,未持久化到output文件夹" + + return result + + except MCPError as e: + return { + "success": False, + "error": e.to_dict() + } + except Exception as e: + import traceback + return { + "success": False, + "error": { + "code": "INTERNAL_ERROR", + "message": str(e), + "traceback": traceback.format_exc() + } + } + + def _generate_simple_html(self, results: Dict, id_to_name: Dict, failed_ids: List, now) -> str: + """生成简化的 HTML 报告""" + html = """ + + + + + MCP 爬取结果 + + + +

+

MCP 爬取结果

+""" + + # 添加时间戳 + html += f'

爬取时间: {now.strftime("%Y-%m-%d %H:%M:%S")}

\n\n' + + # 遍历每个平台 + for platform_id, titles_data in results.items(): + platform_name = id_to_name.get(platform_id, platform_id) + html += f'
\n' + html += f'
{platform_name}
\n' + + # 排序标题 + sorted_items = [] + for title, info in titles_data.items(): + ranks = info.get("ranks", []) + url = info.get("url", "") + mobile_url = info.get("mobileUrl", "") + rank = ranks[0] if ranks else 999 + sorted_items.append((rank, title, url, mobile_url)) + + sorted_items.sort(key=lambda x: x[0]) + + # 显示新闻 + for rank, title, url, mobile_url in sorted_items: + html += f'
\n' + html += f' {rank}.\n' + html += f' {self._html_escape(title)}\n' + if url: + html += f' 链接\n' + if mobile_url and mobile_url != url: + html += f' 移动版\n' + html += '
\n' + + html += '
\n\n' + + # 失败的平台 + if failed_ids: + html += '
\n' + html += '

请求失败的平台

\n' + html += '
    \n' + for platform_id in failed_ids: + html += f'
  • {self._html_escape(platform_id)}
  • \n' + html += '
\n' + html += '
\n' + + html += """
+ +""" + + return html + + def _html_escape(self, text: str) -> str: + """HTML 转义""" + if not isinstance(text, str): + text = str(text) + return ( + text.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace('"', """) + .replace("'", "'") + ) diff --git a/mcp_server/utils/__init__.py b/mcp_server/utils/__init__.py new file mode 100644 index 0000000..a485fe3 --- /dev/null +++ b/mcp_server/utils/__init__.py @@ -0,0 +1,5 @@ +""" +工具类模块 + +提供参数验证、错误处理等辅助功能。 +""" diff --git a/mcp_server/utils/date_parser.py b/mcp_server/utils/date_parser.py new file mode 100644 index 0000000..382a82b --- /dev/null +++ b/mcp_server/utils/date_parser.py @@ -0,0 +1,278 @@ +""" +日期解析工具 + +支持多种自然语言日期格式解析,包括相对日期和绝对日期。 +""" + +import re +from datetime import datetime, timedelta + +from .errors import InvalidParameterError + + +class DateParser: + """日期解析器类""" + + # 中文日期映射 + CN_DATE_MAPPING = { + "今天": 0, + "昨天": 1, + "前天": 2, + "大前天": 3, + } + + # 英文日期映射 + EN_DATE_MAPPING = { + "today": 0, + "yesterday": 1, + } + + # 星期映射 + WEEKDAY_CN = { + "一": 0, "二": 1, "三": 2, "四": 3, + "五": 4, "六": 5, "日": 6, "天": 6 + } + + WEEKDAY_EN = { + "monday": 0, "tuesday": 1, "wednesday": 2, "thursday": 3, + "friday": 4, "saturday": 5, "sunday": 6 + } + + @staticmethod + def parse_date_query(date_query: str) -> datetime: + """ + 解析日期查询字符串 + + 支持的格式: + - 相对日期(中文):今天、昨天、前天、大前天、N天前 + - 相对日期(英文):today、yesterday、N days ago + - 星期(中文):上周一、上周二、本周三 + - 星期(英文):last monday、this friday + - 绝对日期:2025-10-10、10月10日、2025年10月10日 + + Args: + date_query: 日期查询字符串 + + Returns: + datetime对象 + + Raises: + InvalidParameterError: 日期格式无法识别 + + Examples: + >>> DateParser.parse_date_query("今天") + datetime(2025, 10, 11) + >>> DateParser.parse_date_query("昨天") + datetime(2025, 10, 10) + >>> DateParser.parse_date_query("3天前") + datetime(2025, 10, 8) + >>> DateParser.parse_date_query("2025-10-10") + datetime(2025, 10, 10) + """ + if not date_query or not isinstance(date_query, str): + raise InvalidParameterError( + "日期查询字符串不能为空", + suggestion="请提供有效的日期查询,如:今天、昨天、2025-10-10" + ) + + date_query = date_query.strip().lower() + + # 1. 尝试解析中文常用相对日期 + if date_query in DateParser.CN_DATE_MAPPING: + days_ago = DateParser.CN_DATE_MAPPING[date_query] + return datetime.now() - timedelta(days=days_ago) + + # 2. 尝试解析英文常用相对日期 + if date_query in DateParser.EN_DATE_MAPPING: + days_ago = DateParser.EN_DATE_MAPPING[date_query] + return datetime.now() - timedelta(days=days_ago) + + # 3. 尝试解析 "N天前" 或 "N days ago" + cn_days_ago_match = re.match(r'(\d+)\s*天前', date_query) + if cn_days_ago_match: + days = int(cn_days_ago_match.group(1)) + if days > 365: + raise InvalidParameterError( + f"天数过大: {days}天", + suggestion="请使用小于365天的相对日期或使用绝对日期" + ) + return datetime.now() - timedelta(days=days) + + en_days_ago_match = re.match(r'(\d+)\s*days?\s+ago', date_query) + if en_days_ago_match: + days = int(en_days_ago_match.group(1)) + if days > 365: + raise InvalidParameterError( + f"天数过大: {days}天", + suggestion="请使用小于365天的相对日期或使用绝对日期" + ) + return datetime.now() - timedelta(days=days) + + # 4. 尝试解析星期(中文):上周一、本周三 + cn_weekday_match = re.match(r'(上|本)周([一二三四五六日天])', date_query) + if cn_weekday_match: + week_type = cn_weekday_match.group(1) # 上 或 本 + weekday_str = cn_weekday_match.group(2) + target_weekday = DateParser.WEEKDAY_CN[weekday_str] + return DateParser._get_date_by_weekday(target_weekday, week_type == "上") + + # 5. 尝试解析星期(英文):last monday、this friday + en_weekday_match = re.match(r'(last|this)\s+(monday|tuesday|wednesday|thursday|friday|saturday|sunday)', date_query) + if en_weekday_match: + week_type = en_weekday_match.group(1) # last 或 this + weekday_str = en_weekday_match.group(2) + target_weekday = DateParser.WEEKDAY_EN[weekday_str] + return DateParser._get_date_by_weekday(target_weekday, week_type == "last") + + # 6. 尝试解析绝对日期:YYYY-MM-DD + iso_date_match = re.match(r'(\d{4})-(\d{1,2})-(\d{1,2})', date_query) + if iso_date_match: + year = int(iso_date_match.group(1)) + month = int(iso_date_match.group(2)) + day = int(iso_date_match.group(3)) + try: + return datetime(year, month, day) + except ValueError as e: + raise InvalidParameterError( + f"无效的日期: {date_query}", + suggestion=f"日期值错误: {str(e)}" + ) + + # 7. 尝试解析中文日期:MM月DD日 或 YYYY年MM月DD日 + cn_date_match = re.match(r'(?:(\d{4})年)?(\d{1,2})月(\d{1,2})日', date_query) + if cn_date_match: + year_str = cn_date_match.group(1) + month = int(cn_date_match.group(2)) + day = int(cn_date_match.group(3)) + + # 如果没有年份,使用当前年份 + if year_str: + year = int(year_str) + else: + year = datetime.now().year + # 如果月份大于当前月份,说明是去年 + current_month = datetime.now().month + if month > current_month: + year -= 1 + + try: + return datetime(year, month, day) + except ValueError as e: + raise InvalidParameterError( + f"无效的日期: {date_query}", + suggestion=f"日期值错误: {str(e)}" + ) + + # 8. 尝试解析斜杠格式:YYYY/MM/DD 或 MM/DD + slash_date_match = re.match(r'(?:(\d{4})/)?(\d{1,2})/(\d{1,2})', date_query) + if slash_date_match: + year_str = slash_date_match.group(1) + month = int(slash_date_match.group(2)) + day = int(slash_date_match.group(3)) + + if year_str: + year = int(year_str) + else: + year = datetime.now().year + current_month = datetime.now().month + if month > current_month: + year -= 1 + + try: + return datetime(year, month, day) + except ValueError as e: + raise InvalidParameterError( + f"无效的日期: {date_query}", + suggestion=f"日期值错误: {str(e)}" + ) + + # 如果所有格式都不匹配 + raise InvalidParameterError( + f"无法识别的日期格式: {date_query}", + suggestion=( + "支持的格式:\n" + "- 相对日期: 今天、昨天、前天、3天前、today、yesterday、3 days ago\n" + "- 星期: 上周一、本周三、last monday、this friday\n" + "- 绝对日期: 2025-10-10、10月10日、2025年10月10日" + ) + ) + + @staticmethod + def _get_date_by_weekday(target_weekday: int, is_last_week: bool) -> datetime: + """ + 根据星期几获取日期 + + Args: + target_weekday: 目标星期 (0=周一, 6=周日) + is_last_week: 是否是上周 + + Returns: + datetime对象 + """ + today = datetime.now() + current_weekday = today.weekday() + + # 计算天数差 + if is_last_week: + # 上周的某一天 + days_diff = current_weekday - target_weekday + 7 + else: + # 本周的某一天 + days_diff = current_weekday - target_weekday + if days_diff < 0: + days_diff += 7 + + return today - timedelta(days=days_diff) + + @staticmethod + def format_date_folder(date: datetime) -> str: + """ + 将日期格式化为文件夹名称 + + Args: + date: datetime对象 + + Returns: + 文件夹名称,格式: YYYY年MM月DD日 + + Examples: + >>> DateParser.format_date_folder(datetime(2025, 10, 11)) + '2025年10月11日' + """ + return date.strftime("%Y年%m月%d日") + + @staticmethod + def validate_date_not_future(date: datetime) -> None: + """ + 验证日期不在未来 + + Args: + date: 待验证的日期 + + Raises: + InvalidParameterError: 日期在未来 + """ + if date.date() > datetime.now().date(): + raise InvalidParameterError( + f"不能查询未来的日期: {date.strftime('%Y-%m-%d')}", + suggestion="请使用今天或过去的日期" + ) + + @staticmethod + def validate_date_not_too_old(date: datetime, max_days: int = 365) -> None: + """ + 验证日期不太久远 + + Args: + date: 待验证的日期 + max_days: 最大天数 + + Raises: + InvalidParameterError: 日期太久远 + """ + days_ago = (datetime.now().date() - date.date()).days + if days_ago > max_days: + raise InvalidParameterError( + f"日期太久远: {date.strftime('%Y-%m-%d')} ({days_ago}天前)", + suggestion=f"请查询{max_days}天内的数据" + ) diff --git a/mcp_server/utils/errors.py b/mcp_server/utils/errors.py new file mode 100644 index 0000000..fe80d7e --- /dev/null +++ b/mcp_server/utils/errors.py @@ -0,0 +1,93 @@ +""" +自定义错误类 + +定义MCP Server使用的所有自定义异常类型。 +""" + +from typing import Optional + + +class MCPError(Exception): + """MCP工具错误基类""" + + def __init__(self, message: str, code: str = "MCP_ERROR", suggestion: Optional[str] = None): + super().__init__(message) + self.code = code + self.message = message + self.suggestion = suggestion + + def to_dict(self) -> dict: + """转换为字典格式""" + error_dict = { + "code": self.code, + "message": self.message + } + if self.suggestion: + error_dict["suggestion"] = self.suggestion + return error_dict + + +class DataNotFoundError(MCPError): + """数据不存在错误""" + + def __init__(self, message: str, suggestion: Optional[str] = None): + super().__init__( + message=message, + code="DATA_NOT_FOUND", + suggestion=suggestion or "请检查日期范围或等待爬取任务完成" + ) + + +class InvalidParameterError(MCPError): + """参数无效错误""" + + def __init__(self, message: str, suggestion: Optional[str] = None): + super().__init__( + message=message, + code="INVALID_PARAMETER", + suggestion=suggestion or "请检查参数格式是否正确" + ) + + +class ConfigurationError(MCPError): + """配置错误""" + + def __init__(self, message: str, suggestion: Optional[str] = None): + super().__init__( + message=message, + code="CONFIGURATION_ERROR", + suggestion=suggestion or "请检查配置文件是否正确" + ) + + +class PlatformNotSupportedError(MCPError): + """平台不支持错误""" + + def __init__(self, platform: str): + super().__init__( + message=f"平台 '{platform}' 不受支持", + code="PLATFORM_NOT_SUPPORTED", + suggestion="支持的平台: zhihu, weibo, douyin, bilibili, baidu, toutiao, qq, 36kr, sspai, hellogithub, thepaper" + ) + + +class CrawlTaskError(MCPError): + """爬取任务错误""" + + def __init__(self, message: str, suggestion: Optional[str] = None): + super().__init__( + message=message, + code="CRAWL_TASK_ERROR", + suggestion=suggestion or "请稍后重试或查看日志" + ) + + +class FileParseError(MCPError): + """文件解析错误""" + + def __init__(self, file_path: str, reason: str): + super().__init__( + message=f"解析文件 {file_path} 失败: {reason}", + code="FILE_PARSE_ERROR", + suggestion="请检查文件格式是否正确" + ) diff --git a/mcp_server/utils/validators.py b/mcp_server/utils/validators.py new file mode 100644 index 0000000..c68ae32 --- /dev/null +++ b/mcp_server/utils/validators.py @@ -0,0 +1,324 @@ +""" +参数验证工具 + +提供统一的参数验证功能。 +""" + +from datetime import datetime +from typing import List, Optional +import os +import yaml + +from .errors import InvalidParameterError +from .date_parser import DateParser + + +def get_supported_platforms() -> List[str]: + """ + 从 config.yaml 动态获取支持的平台列表 + + Returns: + 平台ID列表 + + Note: + - 读取失败时返回空列表,允许所有平台通过(降级策略) + - 平台列表来自 config/config.yaml 中的 platforms 配置 + """ + try: + # 获取 config.yaml 路径(相对于当前文件) + current_dir = os.path.dirname(os.path.abspath(__file__)) + config_path = os.path.join(current_dir, "..", "..", "config", "config.yaml") + config_path = os.path.normpath(config_path) + + with open(config_path, 'r', encoding='utf-8') as f: + config = yaml.safe_load(f) + platforms = config.get('platforms', []) + return [p['id'] for p in platforms if 'id' in p] + except Exception as e: + # 降级方案:返回空列表,允许所有平台 + print(f"警告:无法加载平台配置 ({config_path}): {e}") + return [] + + +def validate_platforms(platforms: Optional[List[str]]) -> List[str]: + """ + 验证平台列表 + + Args: + platforms: 平台ID列表,None表示使用 config.yaml 中配置的所有平台 + + Returns: + 验证后的平台列表 + + Raises: + InvalidParameterError: 平台不支持 + + Note: + - platforms=None 时,返回 config.yaml 中配置的平台列表 + - 会验证平台ID是否在 config.yaml 的 platforms 配置中 + - 配置加载失败时,允许所有平台通过(降级策略) + """ + supported_platforms = get_supported_platforms() + + if platforms is None: + # 返回配置文件中的平台列表(用户的默认配置) + return supported_platforms if supported_platforms else [] + + if not isinstance(platforms, list): + raise InvalidParameterError("platforms 参数必须是列表类型") + + if not platforms: + # 空列表时,返回配置文件中的平台列表 + return supported_platforms if supported_platforms else [] + + # 如果配置加载失败(supported_platforms为空),允许所有平台通过 + if not supported_platforms: + print("警告:平台配置未加载,跳过平台验证") + return platforms + + # 验证每个平台是否在配置中 + invalid_platforms = [p for p in platforms if p not in supported_platforms] + if invalid_platforms: + raise InvalidParameterError( + f"不支持的平台: {', '.join(invalid_platforms)}", + suggestion=f"支持的平台(来自config.yaml): {', '.join(supported_platforms)}" + ) + + return platforms + + +def validate_limit(limit: Optional[int], default: int = 20, max_limit: int = 1000) -> int: + """ + 验证数量限制参数 + + Args: + limit: 限制数量 + default: 默认值 + max_limit: 最大限制 + + Returns: + 验证后的限制值 + + Raises: + InvalidParameterError: 参数无效 + """ + if limit is None: + return default + + if not isinstance(limit, int): + raise InvalidParameterError("limit 参数必须是整数类型") + + if limit <= 0: + raise InvalidParameterError("limit 必须大于0") + + if limit > max_limit: + raise InvalidParameterError( + f"limit 不能超过 {max_limit}", + suggestion=f"请使用分页或降低limit值" + ) + + return limit + + +def validate_date(date_str: str) -> datetime: + """ + 验证日期格式 + + Args: + date_str: 日期字符串 (YYYY-MM-DD) + + Returns: + datetime对象 + + Raises: + InvalidParameterError: 日期格式错误 + """ + try: + return datetime.strptime(date_str, "%Y-%m-%d") + except ValueError: + raise InvalidParameterError( + f"日期格式错误: {date_str}", + suggestion="请使用 YYYY-MM-DD 格式,例如: 2025-10-11" + ) + + +def validate_date_range(date_range: Optional[dict]) -> Optional[tuple]: + """ + 验证日期范围 + + Args: + date_range: 日期范围字典 {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} + + Returns: + (start_date, end_date) 元组,或 None + + Raises: + InvalidParameterError: 日期范围无效 + """ + if date_range is None: + return None + + if not isinstance(date_range, dict): + raise InvalidParameterError("date_range 必须是字典类型") + + start_str = date_range.get("start") + end_str = date_range.get("end") + + if not start_str or not end_str: + raise InvalidParameterError( + "date_range 必须包含 start 和 end 字段", + suggestion='例如: {"start": "2025-10-01", "end": "2025-10-11"}' + ) + + start_date = validate_date(start_str) + end_date = validate_date(end_str) + + if start_date > end_date: + raise InvalidParameterError( + "开始日期不能晚于结束日期", + suggestion=f"start: {start_str}, end: {end_str}" + ) + + return (start_date, end_date) + + +def validate_keyword(keyword: str) -> str: + """ + 验证关键词 + + Args: + keyword: 搜索关键词 + + Returns: + 处理后的关键词 + + Raises: + InvalidParameterError: 关键词无效 + """ + if not keyword: + raise InvalidParameterError("keyword 不能为空") + + if not isinstance(keyword, str): + raise InvalidParameterError("keyword 必须是字符串类型") + + keyword = keyword.strip() + + if not keyword: + raise InvalidParameterError("keyword 不能为空白字符") + + if len(keyword) > 100: + raise InvalidParameterError( + "keyword 长度不能超过100个字符", + suggestion="请使用更简洁的关键词" + ) + + return keyword + + +def validate_top_n(top_n: Optional[int], default: int = 10) -> int: + """ + 验证TOP N参数 + + Args: + top_n: TOP N数量 + default: 默认值 + + Returns: + 验证后的值 + + Raises: + InvalidParameterError: 参数无效 + """ + return validate_limit(top_n, default=default, max_limit=100) + + +def validate_mode(mode: Optional[str], valid_modes: List[str], default: str) -> str: + """ + 验证模式参数 + + Args: + mode: 模式字符串 + valid_modes: 有效模式列表 + default: 默认模式 + + Returns: + 验证后的模式 + + Raises: + InvalidParameterError: 模式无效 + """ + if mode is None: + return default + + if not isinstance(mode, str): + raise InvalidParameterError("mode 必须是字符串类型") + + if mode not in valid_modes: + raise InvalidParameterError( + f"无效的模式: {mode}", + suggestion=f"支持的模式: {', '.join(valid_modes)}" + ) + + return mode + + +def validate_config_section(section: Optional[str]) -> str: + """ + 验证配置节参数 + + Args: + section: 配置节名称 + + Returns: + 验证后的配置节 + + Raises: + InvalidParameterError: 配置节无效 + """ + valid_sections = ["all", "crawler", "push", "keywords", "weights"] + return validate_mode(section, valid_sections, "all") + + +def validate_date_query( + date_query: str, + allow_future: bool = False, + max_days_ago: int = 365 +) -> datetime: + """ + 验证并解析日期查询字符串 + + Args: + date_query: 日期查询字符串 + allow_future: 是否允许未来日期 + max_days_ago: 允许查询的最大天数 + + Returns: + 解析后的datetime对象 + + Raises: + InvalidParameterError: 日期查询无效 + + Examples: + >>> validate_date_query("昨天") + datetime(2025, 10, 10) + >>> validate_date_query("2025-10-10") + datetime(2025, 10, 10) + """ + if not date_query: + raise InvalidParameterError( + "日期查询字符串不能为空", + suggestion="请提供日期查询,如:今天、昨天、2025-10-10" + ) + + # 使用DateParser解析日期 + parsed_date = DateParser.parse_date_query(date_query) + + # 验证日期不在未来 + if not allow_future: + DateParser.validate_date_not_future(parsed_date) + + # 验证日期不太久远 + DateParser.validate_date_not_too_old(parsed_date, max_days=max_days_ago) + + return parsed_date + diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..c78ad9a --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,25 @@ +[project] +name = "trendradar-mcp" +version = "1.0.0" +description = "TrendRadar MCP Server - 新闻热点聚合工具" +requires-python = ">=3.10" +dependencies = [ + "requests>=2.32.5", + "pytz>=2025.2", + "PyYAML>=6.0.3", + "fastmcp>=2.12.0", + "websockets>=13.0,<14.0", +] + +[project.scripts] +trendradar = "mcp_server.server:run_server" + +[dependency-groups] +dev = [] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["mcp_server"] diff --git a/readme.md b/readme.md index e302d89..b34c811 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,3 @@ -> 预告:下一次更新是 v3.0.0 版本,主要是 **AI** 有关的各种分析新闻资讯的功能 -
@@ -13,7 +11,7 @@ [![GitHub Stars](https://img.shields.io/github/stars/sansan0/TrendRadar?style=flat-square&logo=github&color=yellow)](https://github.com/sansan0/TrendRadar/stargazers) [![GitHub Forks](https://img.shields.io/github/forks/sansan0/TrendRadar?style=flat-square&logo=github&color=blue)](https://github.com/sansan0/TrendRadar/network/members) [![License](https://img.shields.io/badge/license-GPL--3.0-blue.svg?style=flat-square)](LICENSE) -[![Version](https://img.shields.io/badge/version-v2.4.4-green.svg?style=flat-square)](https://github.com/sansan0/TrendRadar) +[![Version](https://img.shields.io/badge/version-v3.0.0-green.svg?style=flat-square)](https://github.com/sansan0/TrendRadar) [![企业微信通知](https://img.shields.io/badge/企业微信-通知-00D4AA?style=flat-square)](https://work.weixin.qq.com/) [![Telegram通知](https://img.shields.io/badge/Telegram-通知-00D4AA?style=flat-square)](https://telegram.org/) @@ -22,16 +20,16 @@ [![邮件通知](https://img.shields.io/badge/Email-通知-00D4AA?style=flat-square)](#) [![ntfy通知](https://img.shields.io/badge/ntfy-通知-00D4AA?style=flat-square)](https://github.com/binwiederhier/ntfy) + [![GitHub Actions](https://img.shields.io/badge/GitHub_Actions-自动化-2088FF?style=flat-square&logo=github-actions&logoColor=white)](https://github.com/sansan0/TrendRadar) [![GitHub Pages](https://img.shields.io/badge/GitHub_Pages-部署-4285F4?style=flat-square&logo=github&logoColor=white)](https://sansan0.github.io/TrendRadar) [![Docker](https://img.shields.io/badge/Docker-部署-2496ED?style=flat-square&logo=docker&logoColor=white)](https://hub.docker.com/) +[![MCP Support](https://img.shields.io/badge/MCP-AI分析支持-FF6B6B?style=flat-square&logo=ai&logoColor=white)](https://modelcontextprotocol.io/)
-> 本项目以轻量,易部署为目标 -> -> 开源路上,感谢有你~😉 +> 本项目以轻量,易部署为目标。开源路上,感谢有你~😉 - 感谢**耐心反馈 bug** 的贡献者,你们的每一条反馈让项目更加完善; - 感谢**为项目点 star** 的观众们,你们的每一个 star 都是对开源精神最好的支持; @@ -39,7 +37,7 @@ - 感谢**给予资金支持** 的朋友们,你们的慷慨已化身为键盘旁的零食饮料,陪伴着项目的每一次迭代。
-👉 点击查看致谢名单 (当前 🔥32🔥 位) +👉 点击查看致谢名单 (当前 🔥39🔥 位) ### 数据支持 @@ -59,6 +57,13 @@ | 点赞人 | 金额 | 日期 | 备注 | | :-------------------------: | :----: | :----: | :-----------------------: | +| P*n | 1 | 2025.10.20 | | +| *杰 | 1 | 2025.10.19 | | +| *徐 | 1 | 2025.10.18 | | +| *志 | 1 | 2025.10.17 | | +| *😀 | 10 | 2025.10.16 | 点赞 | +| **杰 | 10 | 2025.10.16 | | +| *啸 | 10 | 2025.10.16 | | | *纪 | 5 | 2025.10.14 | TrendRadar | | J*d | 1 | 2025.10.14 | 谢谢你的工具,很好玩... | | *H | 1 | 2025.10.14 | | @@ -336,7 +341,7 @@ OPPO - **持续性分析**:区分一次性热点话题和持续发酵的深度新闻 - **跨平台对比**:同一新闻在不同平台的排名表现,看出媒体关注度差异 -**实际效果**:不再错过重要新闻的完整发展过程,从话题萌芽到高峰热议,全程掌握 +> 不再错过重要新闻的完整发展过程,从话题萌芽到高峰热议,全程掌握
👉 推送格式说明 @@ -403,9 +408,7 @@ OPPO - **关注持续出现的话题**(占30%):反复出现的新闻更重要 - **考虑排名质量**(占10%):不仅多次出现,还经常排在前列 -**实际效果**:把分散在各个平台的热搜合并起来,按照你关心的热度重新排序 - -> 这三个比例可以选择适合自己的场景进行调整 +> 把分散在各个平台的热搜合并起来,按照你关心的热度重新排序,这三个比例可以选择适合自己的场景进行调整
👉 热点权重调整 @@ -451,6 +454,21 @@ weight: - **Docker部署**:支持多架构容器化运行 - **数据持久化**:HTML/TXT多格式历史记录保存 + +### **AI 智能分析(v3.0.0 新增)** + +基于 MCP (Model Context Protocol) 协议的 AI 对话分析系统,让你用自然语言深度挖掘新闻数据 + +- **对话式查询**:用自然语言提问,如"查询昨天知乎的热点"、"分析比特币最近的热度趋势" +- **13 种分析工具**:涵盖基础查询、智能检索、趋势分析、数据洞察、情感分析等 +- **多客户端支持**:Cherry Studio(GUI 配置)、Claude Desktop、Cursor、Cline 等 +- **深度分析能力**: + - 话题趋势追踪(热度变化、生命周期、爆火检测、趋势预测) + - 跨平台数据对比(活跃度统计、关键词共现) + - 智能摘要生成、相似新闻查找、历史关联检索 + +> 告别手动翻阅数据文件,AI 助手帮你秒懂新闻背后的故事 + ### **零技术门槛部署** GitHub 一键 Fork 即可使用,无需编程基础。 @@ -482,6 +500,35 @@ GitHub 一键 Fork 即可使用,无需编程基础。 - **小版本更新**:从 v2.x 升级到 v2.y, 用本项目的 `main.py` 代码替换你 fork 仓库中的对应文件 - **大版本升级**:从 v1.x 升级到 v2.y, 建议删除现有 fork 后重新 fork,这样更省力且避免配置冲突 +### 2025/10/20 - v3.0.0 + +**重大更新 - AI 分析功能上线** 🤖 + +- **核心功能**: + - 新增基于 MCP (Model Context Protocol) 的 AI 分析服务器 + - 支持13种智能分析工具:基础查询、智能检索、高级分析、系统管理 + - 自然语言交互:通过对话方式查询和分析新闻数据 + - 多客户端支持:Claude Desktop、Cherry Studio、Cursor、Cline 等 + +- **快速部署方案**: + - Cherry Studio 一键部署(推荐新手):GUI 配置,5分钟完成 + - Claude Desktop 配置(技术用户):JSON 配置文件 + - 完整的部署文档和使用指南 + +- **分析能力**: + - 话题趋势分析(热度追踪、生命周期、爆火检测、趋势预测) + - 数据洞察(平台对比、活跃度统计、关键词共现) + - 情感分析、相似新闻查找、智能摘要生成 + - 历史相关新闻检索、多模式搜索 + +- **更新提示**: + - 这是独立的 AI 分析功能,不影响现有的推送功能 + - 可选择性使用,无需升级现有部署 + + +
+👉 历史更新 + ### 2025/10/15 - v2.4.4 - **更新内容**: @@ -492,10 +539,6 @@ GitHub 一键 Fork 即可使用,无需编程基础。 - 建议【小版本升级】 -
-👉 历史更新 - - ### 2025/10/10 - v2.4.3 > 感谢 [nidaye996](https://github.com/sansan0/TrendRadar/issues/98) 发现的体验问题 @@ -1236,12 +1279,48 @@ docker exec -it trend-radar ls -la /app/config/
+## 🤖 AI 智能分析部署 + +TrendRadar v3.0.0 新增了基于 **MCP (Model Context Protocol)** 的 AI 分析功能,让你可以通过自然语言与新闻数据对话,进行深度分析。 + +### 快速部署 + +Cherry Studio 提供 GUI 配置界面,可快速部署。 + +**详细教程**:[README-Cherry-Studio.md](README-Cherry-Studio.md) + + +### 与 AI 对话的姿势 + +**基础查询**: +``` +"给我看看最新的新闻" +"查询昨天知乎的热点" +"我关注的词今天出现了多少次" +``` + +**趋势分析**: +``` +"分析'比特币'最近一周的热度趋势" +"看看'iPhone'话题是昙花一现还是持续热点" +``` + +**详细教程**:[README-MCP-FAQ.md](README-MCP-FAQ.md) + +>如果还有配置部署方面的问题,后续我会根据反馈出个**图文教程**,届时会更新到我的公众号上 + ## ☕问题答疑与1元点赞 > 心意到就行,收到的**点赞**用于提高开发者开源的积极性。**点赞**已收录于**致谢名单** - **GitHub Issues**:适合针对性强的解答。提问时请提供完整信息(截图、错误日志、系统环境等)。 -- **公众号交流**:适合快速咨询和使用疑问。可以在文章下留言或私信交流。 +- **公众号交流**:适合快速咨询。尽量别私信,建议优先在相关文章下的公共留言区交流,有个收敛度 + +> 对于极少数私信中表达的那种'摸索了好久都部署不了'的焦急心态,我能理解,但我认为这不足以成为我必须立刻抽空帮你解决的理由 +> +> 请舒缓情绪后再表达,别让我觉得'我分享了项目,你部署不了反而首先怪我',对于这种非商业化的个人开源小作品,多一点担待~好不?😉 +> +> 项目的 issues 和留言我还算卖力解决,除了有自己写的项目哪怕再烂也得含泪😢维护的念头,主要还是因为有上面感谢的那群人的支持😘 |公众号关注 |微信点赞 | 支付宝点赞 | |:---:|:---:|:---:| diff --git a/requirements.txt b/requirements.txt index bef336f..9d8d77c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ -requests==2.32.4 -pytz==2025.2 -PyYAML==6.0.2 \ No newline at end of file +requests>=2.32.5 +pytz>=2025.2 +PyYAML>=6.0.3 +fastmcp>=2.12.0 +websockets>=13.0,<14.0 \ No newline at end of file diff --git a/setup-mac.sh b/setup-mac.sh new file mode 100644 index 0000000..f6adec6 --- /dev/null +++ b/setup-mac.sh @@ -0,0 +1,118 @@ +#!/bin/bash + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +BOLD='\033[1m' +NC='\033[0m' # No Color + +echo -e "${BOLD}╔════════════════════════════════════════╗${NC}" +echo -e "${BOLD}║ TrendRadar MCP 一键部署 (Mac) ║${NC}" +echo -e "${BOLD}╚════════════════════════════════════════╝${NC}" +echo "" + +# 获取项目根目录 +PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)" + +echo -e "📍 项目目录: ${BLUE}${PROJECT_ROOT}${NC}" +echo "" + +# 检查 UV 是否已安装 +if ! command -v uv &> /dev/null; then + echo -e "${YELLOW}[1/3] 🔧 UV 未安装,正在自动安装...${NC}" + echo "提示: UV 是一个快速的 Python 包管理器,只需安装一次" + echo "" + curl -LsSf https://astral.sh/uv/install.sh | sh + + echo "" + echo "正在刷新 PATH 环境变量..." + echo "" + + # 添加 UV 到 PATH + export PATH="$HOME/.cargo/bin:$PATH" + + # 验证 UV 是否真正可用 + if ! command -v uv &> /dev/null; then + echo -e "${RED}❌ [错误] UV 安装失败${NC}" + echo "" + echo "可能的原因:" + echo " 1. 网络连接问题,无法下载安装脚本" + echo " 2. 安装路径权限不足" + echo " 3. 安装脚本执行异常" + echo "" + echo "解决方案:" + echo " 1. 检查网络连接是否正常" + echo " 2. 手动安装: https://docs.astral.sh/uv/getting-started/installation/" + echo " 3. 或运行: curl -LsSf https://astral.sh/uv/install.sh | sh" + exit 1 + fi + + echo -e "${GREEN}✅ [成功] UV 已安装${NC}" + echo -e "${YELLOW}⚠️ 请重新运行此脚本以继续${NC}" + exit 0 +else + echo -e "${GREEN}[1/3] ✅ UV 已安装${NC}" + uv --version +fi + +echo "" +echo "[2/3] 📦 安装项目依赖..." +echo "提示: 这可能需要 1-2 分钟,请耐心等待" +echo "" + +# 创建虚拟环境并安装依赖 +uv sync + +if [ $? -ne 0 ]; then + echo "" + echo -e "${RED}❌ [错误] 依赖安装失败${NC}" + echo "请检查网络连接后重试" + exit 1 +fi + +echo "" +echo -e "${GREEN}[3/3] ✅ 检查配置文件...${NC}" +echo "" + +# 检查配置文件 +if [ ! -f "config/config.yaml" ]; then + echo -e "${YELLOW}⚠️ [警告] 未找到配置文件: config/config.yaml${NC}" + echo "请确保配置文件存在" + echo "" +fi + +# 添加执行权限 +chmod +x start-http.sh 2>/dev/null || true + +# 获取 UV 路径 +UV_PATH=$(which uv) + +echo "" +echo -e "${BOLD}╔════════════════════════════════════════╗${NC}" +echo -e "${BOLD}║ 部署完成! ║${NC}" +echo -e "${BOLD}╚════════════════════════════════════════╝${NC}" +echo "" +echo "📋 下一步操作:" +echo "" +echo " 1️⃣ 打开 Cherry Studio" +echo " 2️⃣ 进入 设置 > MCP Servers > 添加服务器" +echo " 3️⃣ 填入以下配置:" +echo "" +echo " 名称: TrendRadar" +echo " 描述: 新闻热点聚合工具" +echo " 类型: STDIO" +echo -e " 命令: ${BLUE}${UV_PATH}${NC}" +echo " 参数(每个占一行):" +echo -e " ${BLUE}--directory${NC}" +echo -e " ${BLUE}${PROJECT_ROOT}${NC}" +echo -e " ${BLUE}run${NC}" +echo -e " ${BLUE}python${NC}" +echo -e " ${BLUE}-m${NC}" +echo -e " ${BLUE}mcp_server.server${NC}" +echo "" +echo " 4️⃣ 保存并启用 MCP 开关" +echo "" +echo "📖 详细教程请查看: README-Cherry-Studio.md,本窗口别关,待会儿用于填入参数" +echo "" diff --git a/setup-windows.bat b/setup-windows.bat new file mode 100644 index 0000000..1807d0c --- /dev/null +++ b/setup-windows.bat @@ -0,0 +1,114 @@ +@echo off +chcp 65001 >nul +setlocal enabledelayedexpansion + +echo ╔════════════════════════════════════════╗ +echo ║ TrendRadar MCP 一键部署 (Windows) ║ +echo ╚════════════════════════════════════════╝ +echo. + +REM 获取当前目录作为项目根目录 +set "PROJECT_ROOT=%CD%" + +echo 📍 项目目录: %PROJECT_ROOT% +echo. + +REM 检查 UV 是否已安装 +where uv >nul 2>&1 +if %errorlevel% neq 0 ( + echo [1/3] 🔧 UV 未安装,正在自动安装... + echo 提示: UV 是一个快速的 Python 包管理器,只需安装一次 + echo. + powershell -Command "irm https://astral.sh/uv/install.ps1 | iex" + + echo. + echo 🔄 刷新环境变量并检测 UV 安装状态... + echo. + + REM 刷新 PATH 环境变量 + for /f "tokens=2*" %%a in ('reg query "HKCU\Environment" /v PATH 2^>nul') do set "USER_PATH=%%b" + for /f "tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH 2^>nul') do set "SYSTEM_PATH=%%b" + set "PATH=%USER_PATH%;%SYSTEM_PATH%" + + REM 再次检查 UV 是否可用 + where uv >nul 2>&1 + if %errorlevel% neq 0 ( + echo ❌ [错误] UV 安装失败 - 无法找到 UV 命令 + echo 可能的原因: + echo - 网络连接问题,安装脚本未成功下载 + echo - 安装路径未正确添加到 PATH + echo. + echo 解决方案: + echo 1. 请关闭此窗口,重新打开命令提示符后再次运行本脚本 + echo 2. 或手动安装: https://docs.astral.sh/uv/getting-started/installation/ + pause + exit /b 1 + ) + + echo ✅ [成功] UV 已安装 + echo ⚠️ 请关闭此窗口,重新运行本脚本以继续安装依赖 + pause + exit /b 0 +) else ( + echo [1/3] ✅ UV 已安装 + uv --version +) + +echo. +echo [2/3] 📦 安装项目依赖... +echo 提示: 这可能需要 1-2 分钟,请耐心等待 +echo. + +REM 创建虚拟环境并安装依赖 +uv sync + +if %errorlevel% neq 0 ( + echo. + echo ❌ [错误] 依赖安装失败 + echo 请检查网络连接后重试 + pause + exit /b 1 +) + +echo. +echo [3/3] ✅ 检查配置文件... +echo. + +REM 检查配置文件 +if not exist "config\config.yaml" ( + echo ⚠️ [警告] 未找到配置文件: config\config.yaml + echo 请确保配置文件存在 + echo. +) + +REM 获取 UV 的完整路径 +for /f "tokens=*" %%i in ('where uv') do set "UV_PATH=%%i" + +echo. +echo ╔════════════════════════════════════════╗ +echo ║ 部署完成! ║ +echo ╚════════════════════════════════════════╝ +echo. +echo 📋 下一步操作: +echo. +echo 1️⃣ 打开 Cherry Studio +echo 2️⃣ 进入 设置 ^> MCP Servers ^> 添加服务器 +echo 3️⃣ 填入以下配置: +echo. +echo 名称: TrendRadar +echo 描述: 新闻热点聚合工具 +echo 类型: STDIO +echo 命令: %UV_PATH% +echo 参数(每个占一行): +echo --directory +echo %PROJECT_ROOT% +echo run +echo python +echo -m +echo mcp_server.server +echo. +echo 4️⃣ 保存并启用 MCP 开关 +echo. +echo 📖 详细教程请查看: README-Cherry-Studio.md,本窗口别关,待会儿用于填入参数 +echo. +pause diff --git a/start-http.bat b/start-http.bat new file mode 100644 index 0000000..e7fbd0c --- /dev/null +++ b/start-http.bat @@ -0,0 +1,25 @@ +@echo off +chcp 65001 >nul + +echo ╔════════════════════════════════════════╗ +echo ║ TrendRadar MCP Server (HTTP 模式) ║ +echo ╚════════════════════════════════════════╝ +echo. + +REM 检查虚拟环境 +if not exist ".venv\Scripts\python.exe" ( + echo ❌ [错误] 虚拟环境未找到 + echo 请先运行 setup-windows.bat 进行部署 + echo. + pause + exit /b 1 +) + +echo [模式] HTTP (适合远程访问) +echo [地址] http://localhost:3333/mcp +echo [提示] 按 Ctrl+C 停止服务 +echo. + +uv run python mcp_server/server.py --transport http --host 0.0.0.0 --port 3333 + +pause diff --git a/start-http.sh b/start-http.sh new file mode 100644 index 0000000..aae1613 --- /dev/null +++ b/start-http.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +echo "╔════════════════════════════════════════╗" +echo "║ TrendRadar MCP Server (HTTP 模式) ║" +echo "╚════════════════════════════════════════╝" +echo "" + +# 检查虚拟环境 +if [ ! -d ".venv" ]; then + echo "❌ [错误] 虚拟环境未找到" + echo "请先运行 ./setup-mac.sh 进行部署" + echo "" + exit 1 +fi + +echo "[模式] HTTP (适合远程访问)" +echo "[地址] http://localhost:3333/mcp" +echo "[提示] 按 Ctrl+C 停止服务" +echo "" + +uv run python mcp_server/server.py --transport http --host 0.0.0.0 --port 3333 diff --git a/version b/version index ab6d278..56fea8a 100644 --- a/version +++ b/version @@ -1 +1 @@ -2.4.4 \ No newline at end of file +3.0.0 \ No newline at end of file