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

9.4 KiB
Raw Blame History

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配置

# 博查 Web Search API配置
BOCHA_API_KEY=sk-your-api-key-here
BOCHA_BASE_URL=https://api.bocha.cn

获取API Key访问 博查AI开放平台 注册并获取API密钥。

2. 数据库迁移

运行迁移脚本为News表添加新字段

python migrate_news_fields.py

迁移会添加以下字段:

  • source_name: 新闻来源网站名称
  • source_icon: 新闻来源网站图标URL

3. 测试新闻获取

方法1使用Python测试脚本

# 测试NewsSearcher类
python utils/news_searcher.py

方法2使用后台API

登录后台后使用API接口

单个网站获取新闻

curl -X POST http://localhost:5000/api/fetch-site-news \
  -H "Content-Type: application/json" \
  -d '{
    "site_id": 1,
    "count": 10,
    "freshness": "oneMonth"
  }'

批量获取新闻

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脚本定期自动获取新闻。

手动执行

# 默认参数处理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服务器上配置定期任务

# 编辑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
  • 权限: 需要登录
  • 参数:
    {
      "site_id": 1,
      "count": 10,
      "freshness": "oneMonth"
    }
    

2. 批量获取新闻

  • 路径: /api/fetch-all-news
  • 方法: POST
  • 权限: 需要登录
  • 参数:
    {
      "count": 5,
      "freshness": "oneMonth",
      "limit": 10
    }
    

📊 配置选项

config.py中的新闻相关配置:

# 博查 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定价

去重机制

系统会根据新闻URL自动去重同一条新闻不会重复保存。

搜索策略

  • 搜索关键词:{网站名称} 最新 新闻
  • 自动排除:网站自身域名的内容
  • 时间优先:优先显示最新发布的新闻

性能优化

  • 批量获取时建议限制数量(--limit 10-20
  • 避免短时间内频繁调用API
  • 数据库查询已优化,使用索引和去重

🐛 故障排查

1. 新闻获取失败

可能原因

  • 博查API Key未配置或无效
  • API配额不足
  • 网络连接问题

解决方法

# 检查环境变量
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'

解决方法

# 运行数据库迁移
python migrate_news_fields.py

3. 详情页不显示新闻

可能原因

  • 数据库中没有该网站的新闻记录
  • 新闻被设置为不启用is_active=False

解决方法

# 为该网站获取新闻
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加速

📞 技术支持


📝 更新日志

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 迁移脚本文档

祝您使用愉快! 🎉