Files
zjpb.net/NEWS_FEATURE_v2.2.md
Jowe d7d21e19c9 release: v2.2.0 - 博查新闻搜索功能
新增功能:
- 集成博查Web Search API,自动获取网站相关新闻
- News模型添加source_name和source_icon字段
- 新闻管理后台界面优化
- 网站详情页新闻展示(标题、摘要、来源、链接)
- 定期任务脚本支持批量获取新闻
- 完整的API路由和测试脚本

技术实现:
- NewsSearcher工具类封装博查API
- 智能新闻搜索和去重机制
- 数据库迁移脚本migrate_news_fields.py
- API路由:/api/fetch-site-news 和 /api/fetch-all-news
- Cron任务脚本:fetch_news_cron.py

修改文件:
- config.py: 添加博查API配置
- models.py: News模型扩展
- app.py: 新闻获取路由和NewsAdmin优化
- templates/detail_new.html: 新闻展示UI

新增文件:
- utils/news_searcher.py (271行)
- migrate_news_fields.py (99行)
- fetch_news_cron.py (167行)
- test_news_feature.py (142行)
- NEWS_FEATURE_v2.2.md (408行)

统计:9个文件,1348行新增

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 22:04:35 +08:00

409 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 迁移脚本文档
---
**祝您使用愉快!** 🎉