157 lines
3.6 KiB
Markdown
157 lines
3.6 KiB
Markdown
# Earth News Source Configuration And Collector Plan
|
||
|
||
## Why
|
||
|
||
当前 Earth 的“态势新闻”由 [earth_news.py](/home/ray/dev/linkong/planet/backend/app/services/earth_news.py) 直接在请求时抓取 RSS / Google News feed,再按当前地球视角中心区域聚合返回。
|
||
|
||
这条链已经可用,但存在两个明显限制:
|
||
|
||
- 新闻源写死在代码里,不能像 TV 直播源一样从后台维护
|
||
- 新闻并未进入统一采集体系,没有采集状态、失败监控、历史数据和后续 AI 复用能力
|
||
|
||
因此这块更合理的路线不是一步到位重写,而是分阶段推进:
|
||
|
||
1. 先做“新闻源配置化”
|
||
2. 再做“新闻采集器化”
|
||
|
||
## Current State
|
||
|
||
当前实现分布在:
|
||
|
||
- 新闻接口
|
||
- [news.py](/home/ray/dev/linkong/planet/backend/app/api/v1/news.py)
|
||
- 实时聚合逻辑
|
||
- [earth_news.py](/home/ray/dev/linkong/planet/backend/app/services/earth_news.py)
|
||
- 前端消费
|
||
- [news.js](/home/ray/dev/linkong/planet/frontend/public/earth/js/news.js)
|
||
|
||
当前新闻源包含:
|
||
|
||
- `BBC World` RSS
|
||
- `DW Top Stories` RSS
|
||
- 按区域关键词拼出来的 `Google News RSS`
|
||
- `Global`
|
||
- `Americas`
|
||
- `Europe`
|
||
- `Middle East / Africa`
|
||
- `Asia Pacific`
|
||
|
||
当前不是采集器,也不落库,只做内存缓存。
|
||
|
||
## Phase 1: Source Configuration
|
||
|
||
### Goal
|
||
|
||
把 `NEWS_FEED_SOURCES` 从硬编码列表升级成可配置新闻源目录,但继续保留当前“实时聚合”的工作方式。
|
||
|
||
### Scope
|
||
|
||
- 为 Earth news 建立独立配置结构
|
||
- 支持后台维护 feed 源
|
||
- 支持启用/禁用、优先级、区域、源类型
|
||
- 保持现有 `/api/v1/news/earth-feed` 输出协议不变
|
||
|
||
### Proposed Shape
|
||
|
||
建议配置字段至少包括:
|
||
|
||
- `id`
|
||
- `name`
|
||
- `region`
|
||
- `feed_url`
|
||
- `homepage_url`
|
||
- `source_type`
|
||
- `priority`
|
||
- `is_enabled`
|
||
- 可选 `query_profile`
|
||
- 可选 `language`
|
||
- 可选 `notes`
|
||
|
||
### Suggested Storage
|
||
|
||
优先走系统设置或单独的 news source settings payload,而不是先建复杂新表。
|
||
|
||
推荐原因:
|
||
|
||
- 改动小
|
||
- 易上线
|
||
- 和当前 TV settings 维护体验更接近
|
||
- 先解决“写死在代码里”的问题
|
||
|
||
### Non-goals
|
||
|
||
这一阶段不做:
|
||
|
||
- 新闻入库
|
||
- 新闻历史回看
|
||
- 新闻采集任务监控
|
||
- 新闻去重流水线
|
||
|
||
## Phase 2: News Collectorization
|
||
|
||
### Goal
|
||
|
||
把“态势新闻”升级为真正的采集器链路,使其进入采集系统和数据层。
|
||
|
||
### Scope
|
||
|
||
- 新增专用 news collector
|
||
- 按配置源定时采集 RSS / feed
|
||
- 做标题/链接级去重
|
||
- 建立统一新闻记录模型
|
||
- 为 Earth、控制台、AI 研判复用同一份新闻数据
|
||
|
||
### Benefits
|
||
|
||
- 有采集状态
|
||
- 有失败监控
|
||
- 有历史缓存
|
||
- 可以做时间轴 / 区域新闻基线
|
||
- 可以作为 AI 引用证据
|
||
|
||
### Required Design Work
|
||
|
||
需要提前明确:
|
||
|
||
- 新闻数据模型
|
||
- 去重策略
|
||
- 过期清理策略
|
||
- 区域映射策略
|
||
- 聚合排序策略
|
||
- 新闻与 Earth 当前视角/区域的关联方式
|
||
|
||
### Candidate Output Model
|
||
|
||
至少应包含:
|
||
|
||
- `source_id`
|
||
- `headline`
|
||
- `summary`
|
||
- `url`
|
||
- `publisher`
|
||
- `region`
|
||
- `published_at`
|
||
- `language`
|
||
- `tags`
|
||
- `raw_feed_source`
|
||
- `reference_date`
|
||
|
||
## Recommended Order
|
||
|
||
推荐执行顺序:
|
||
|
||
1. 先完成 Phase 1 配置化
|
||
2. 保持 Earth 继续实时聚合,但改为读取配置源
|
||
3. 等新闻源稳定后,再设计 Phase 2 的 collector / storage / dedupe
|
||
|
||
## Decision
|
||
|
||
当前结论:
|
||
|
||
- TV 直播源:优先采集器化
|
||
- 态势新闻:优先配置化,再采集器化
|
||
|
||
## Source Note
|
||
|
||
This plan is newly created for the Planet repo to separate the short-term "configurable source directory" work from the longer-term "collectorized news pipeline" work.
|