# ZJPB v2.2.0 - 新闻搜索功能 **版本**: v2.2.0 **发布日期**: 2025-01-30 **主要功能**: 集成博查Web Search API,自动获取网站相关新闻 --- ## 📋 功能概述 v2.2.0版本引入了全新的新闻搜索和展示功能,通过博查AI搜索引擎API,自动为每个网站获取最新的相关新闻,并在网站详情页进行展示。 ### ✨ 核心特性 1. **智能新闻搜索** 🔍 - 基于网站名称自动搜索相关新闻 - 支持自定义搜索时间范围(一天、一周、一月、一年) - 自动排除网站自身的内容,确保新闻来源多样性 2. **新闻管理系统** 📰 - 后台新闻列表管理 - 支持手动编辑和删除新闻 - 新闻来源信息展示(网站名称、图标) 3. **前台新闻展示** 🎨 - 网站详情页展示最多5条相关新闻 - 显示新闻标题、摘要、来源、发布时间 - 点击新闻直接跳转到原文链接 4. **定期任务支持** ⏰ - 提供cron任务脚本,支持定期批量获取新闻 - 可配置获取数量、时间范围等参数 --- ## 🚀 快速开始 ### 1. 配置博查API 在`.env`文件中添加博查API配置: ```env # 博查 Web Search API配置 BOCHA_API_KEY=sk-your-api-key-here BOCHA_BASE_URL=https://api.bocha.cn ``` 获取API Key:访问 [博查AI开放平台](https://open.bocha.cn) 注册并获取API密钥。 ### 2. 数据库迁移 运行迁移脚本,为News表添加新字段: ```bash python migrate_news_fields.py ``` 迁移会添加以下字段: - `source_name`: 新闻来源网站名称 - `source_icon`: 新闻来源网站图标URL ### 3. 测试新闻获取 #### 方法1:使用Python测试脚本 ```bash # 测试NewsSearcher类 python utils/news_searcher.py ``` #### 方法2:使用后台API 登录后台后,使用API接口: **单个网站获取新闻**: ```bash curl -X POST http://localhost:5000/api/fetch-site-news \ -H "Content-Type: application/json" \ -d '{ "site_id": 1, "count": 10, "freshness": "oneMonth" }' ``` **批量获取新闻**: ```bash curl -X POST http://localhost:5000/api/fetch-all-news \ -H "Content-Type: application/json" \ -d '{ "count": 5, "freshness": "oneMonth", "limit": 10 }' ``` ### 4. 查看新闻 1. 访问任意网站详情页(例如:`http://localhost:5000/site/12345678`) 2. 滚动到页面下方,查看"相关新闻"部分 3. 点击新闻标题或"阅读全文"链接跳转到原文 --- ## 📖 使用指南 ### 后台管理 #### 新闻管理界面 1. 登录后台:`http://localhost:5000/admin` 2. 点击左侧菜单"新闻管理" 3. 可以查看、编辑、删除已获取的新闻 **新闻列表字段**: - ID - 关联网站 - 新闻标题 - 来源网站 - 新闻类型 - 发布时间 - 是否启用 #### 手动获取新闻 虽然提供了API接口,但目前没有直接的后台UI按钮。可以通过以下方式触发: 1. 使用API接口(参见快速开始) 2. 使用定期任务脚本(参见下文) ### 定期任务设置 使用`fetch_news_cron.py`脚本定期自动获取新闻。 #### 手动执行 ```bash # 默认参数:处理10个网站,每个网站获取5条新闻,时间范围一个月 python fetch_news_cron.py # 自定义参数 python fetch_news_cron.py --limit 20 --count 10 --freshness oneWeek ``` **参数说明**: - `--limit`: 处理的网站数量限制(默认:10) - `--count`: 每个网站获取的新闻数量(默认:5) - `--freshness`: 新闻时间范围(可选:noLimit, oneDay, oneWeek, oneMonth, oneYear) #### 配置Crontab 在Linux服务器上配置定期任务: ```bash # 编辑crontab crontab -e # 添加以下行(每天早上8点执行) 0 8 * * * cd /opt/1panel/apps/zjpb && /opt/1panel/apps/zjpb/venv/bin/python fetch_news_cron.py --limit 10 >> logs/news_fetch.log 2>&1 # 或每6小时执行一次 0 */6 * * * cd /opt/1panel/apps/zjpb && /opt/1panel/apps/zjpb/venv/bin/python fetch_news_cron.py --limit 20 >> logs/news_fetch.log 2>&1 ``` **注意**: - 确保创建`logs`目录:`mkdir -p logs` - 修改路径为实际的项目路径 - 根据API配额合理设置执行频率 --- ## 🗂️ 文件结构 ### 新增文件 ``` zjpb/ ├── utils/ │ └── news_searcher.py # 博查API封装类 ├── migrate_news_fields.py # 数据库迁移脚本 ├── fetch_news_cron.py # 定期任务脚本 └── NEWS_FEATURE_v2.2.md # 本文档 ``` ### 修改文件 ``` zjpb/ ├── config.py # 添加博查API配置 ├── models.py # News模型添加source_name/source_icon字段 ├── app.py # 添加新闻获取API路由,更新NewsAdmin └── templates/ └── detail_new.html # 优化新闻展示UI ``` --- ## 🔧 技术实现 ### API集成 使用博查Web Search API进行新闻搜索: - **接口地址**: `https://api.bocha.cn/v1/web-search` - **认证方式**: Bearer Token - **请求方法**: POST - **返回格式**: JSON ### 数据模型 News模型字段: | 字段 | 类型 | 说明 | |------|------|------| | id | Integer | 主键 | | site_id | Integer | 关联网站ID(外键) | | title | String(200) | 新闻标题 | | content | Text | 新闻内容/摘要 | | news_type | String(50) | 新闻类型 | | url | String(500) | 新闻链接 | | source_name | String(100) | ⭐ 来源网站名称(新增) | | source_icon | String(500) | ⭐ 来源网站图标(新增) | | published_at | DateTime | 发布时间 | | is_active | Boolean | 是否启用 | | created_at | DateTime | 创建时间 | | updated_at | DateTime | 更新时间 | ### API路由 **1. 单个网站获取新闻** - **路径**: `/api/fetch-site-news` - **方法**: POST - **权限**: 需要登录 - **参数**: ```json { "site_id": 1, "count": 10, "freshness": "oneMonth" } ``` **2. 批量获取新闻** - **路径**: `/api/fetch-all-news` - **方法**: POST - **权限**: 需要登录 - **参数**: ```json { "count": 5, "freshness": "oneMonth", "limit": 10 } ``` --- ## 📊 配置选项 在`config.py`中的新闻相关配置: ```python # 博查 Web Search API配置 BOCHA_API_KEY = os.environ.get('BOCHA_API_KEY') BOCHA_BASE_URL = os.environ.get('BOCHA_BASE_URL') or 'https://api.bocha.cn' BOCHA_SEARCH_ENDPOINT = '/v1/web-search' # 新闻搜索配置 NEWS_SEARCH_COUNT = 10 # 每次搜索返回的新闻数量 NEWS_SEARCH_FRESHNESS = 'oneMonth' # 默认搜索一个月内的新闻 NEWS_SEARCH_SUMMARY = True # 是否显示摘要 ``` --- ## ⚠️ 注意事项 ### API配额限制 - 博查API根据充值金额有请求频率限制 - 建议合理设置定期任务频率,避免过度消耗配额 - 详情参见:[博查API定价](https://open.bocha.cn) ### 去重机制 系统会根据新闻URL自动去重,同一条新闻不会重复保存。 ### 搜索策略 - 搜索关键词:`{网站名称} 最新 新闻` - 自动排除:网站自身域名的内容 - 时间优先:优先显示最新发布的新闻 ### 性能优化 - 批量获取时建议限制数量(`--limit 10-20`) - 避免短时间内频繁调用API - 数据库查询已优化,使用索引和去重 --- ## 🐛 故障排查 ### 1. 新闻获取失败 **可能原因**: - 博查API Key未配置或无效 - API配额不足 - 网络连接问题 **解决方法**: ```bash # 检查环境变量 python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('BOCHA_API_KEY'))" # 测试API连接 python utils/news_searcher.py ``` ### 2. 数据库字段不存在 **错误信息**:`Unknown column 'source_name' in 'field list'` **解决方法**: ```bash # 运行数据库迁移 python migrate_news_fields.py ``` ### 3. 详情页不显示新闻 **可能原因**: - 数据库中没有该网站的新闻记录 - 新闻被设置为不启用(is_active=False) **解决方法**: ```bash # 为该网站获取新闻 curl -X POST http://localhost:5000/api/fetch-site-news \ -H "Content-Type: application/json" \ -d '{"site_id": YOUR_SITE_ID}' ``` ### 4. 定期任务不执行 **检查清单**: - [ ] Crontab配置是否正确 - [ ] Python路径是否正确 - [ ] 日志文件是否有写入权限 - [ ] 查看cron日志:`grep CRON /var/log/syslog` --- ## 📈 未来改进 ### 计划功能 - [ ] 后台UI按钮直接触发新闻获取 - [ ] 新闻分类和标签支持 - [ ] 新闻摘要AI优化 - [ ] 新闻热度排序 - [ ] 用户收藏新闻功能 - [ ] 新闻RSS订阅 ### 性能优化 - [ ] 使用异步任务队列(Celery) - [ ] 新闻缓存机制 - [ ] 图片CDN加速 --- ## 📞 技术支持 - **项目名称**: ZJPB - 焦提示词 | AI工具导航 - **版本**: v2.2.0 - **发布日期**: 2025-01-30 - **博查API文档**: https://bocha-ai.feishu.cn/wiki/RXEOw02rFiwzGSkd9mUcqoeAnNK --- ## 📝 更新日志 ### v2.2.0 (2025-01-30) **新增**: - ✨ 集成博查Web Search API - ✨ 新闻自动搜索和存储功能 - ✨ News模型添加source_name和source_icon字段 - ✨ 网站详情页新闻展示优化 - ✨ 后台新闻管理界面增强 - ✨ 定期任务脚本(fetch_news_cron.py) - ✨ API路由:/api/fetch-site-news 和 /api/fetch-all-news **修改**: - 🔧 config.py添加博查API配置 - 🔧 NewsAdmin添加source_name字段显示 - 🔧 detail_new.html优化新闻展示UI **文档**: - 📖 NEWS_FEATURE_v2.2.md 功能文档 - 📖 migrate_news_fields.py 迁移脚本文档 --- **祝您使用愉快!** 🎉