fix:优化数据来源
This commit is contained in:
91
docs/BACKEND_MODULES.md
Normal file
91
docs/BACKEND_MODULES.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# 后端模块说明
|
||||
|
||||
## 一、现有模块结构
|
||||
|
||||
```
|
||||
server/
|
||||
├── index.js # HTTP + WebSocket 入口
|
||||
├── routes.js # REST API 路由
|
||||
├── db.js # SQLite schema 与连接
|
||||
├── situationData.js # 态势数据聚合 (从 DB 读取)
|
||||
├── seed.js # 初始数据填充
|
||||
├── data.db # SQLite 数据库
|
||||
└── package.json
|
||||
|
||||
crawler/
|
||||
├── realtime_conflict_service.py # GDELT 实时冲突服务 (核心)
|
||||
├── requirements.txt
|
||||
├── config.py, db_writer.py # 旧 RSS 爬虫(可保留)
|
||||
├── main.py
|
||||
└── README.md
|
||||
```
|
||||
|
||||
### 1. server/index.js
|
||||
- Express + CORS
|
||||
- WebSocket (`/ws`),每 5 秒广播 `situation`
|
||||
- `POST /api/crawler/notify`:爬虫写入后触发立即广播
|
||||
|
||||
### 2. server/routes.js
|
||||
- `GET /api/situation`:完整态势
|
||||
- `GET /api/events`:GDELT 事件 + 冲突统计
|
||||
- `GET /api/health`:健康检查
|
||||
|
||||
### 3. server/db.js
|
||||
- 表:`situation`、`force_summary`、`power_index`、`force_asset`、
|
||||
`key_location`、`combat_losses`、`wall_street_trend`、
|
||||
`retaliation_current`、`retaliation_history`、`situation_update`、
|
||||
**`gdelt_events`**、**`conflict_stats`**
|
||||
|
||||
---
|
||||
|
||||
## 二、GDELT 核心数据源
|
||||
|
||||
**GDELT Project**:全球冲突数据库,约 15 分钟级更新,含经纬度、事件编码、参与方、事件强度。
|
||||
|
||||
### realtime_conflict_service.py
|
||||
|
||||
- 定时(默认 60 秒)从 GDELT API 抓取
|
||||
- 冲突强度评分:missile +3, strike +2, killed +4 等
|
||||
- 无经纬度时默认攻击源:`IRAN_COORD = [51.3890, 35.6892]`
|
||||
- 写入 `gdelt_events`、`conflict_stats`
|
||||
- 调用 `POST /api/crawler/notify` 触发 Node 广播
|
||||
|
||||
### 冲突强度 → 地图效果
|
||||
|
||||
| impact_score | 效果 |
|
||||
|--------------|------------|
|
||||
| 1–3 | 绿色点 |
|
||||
| 4–6 | 橙色闪烁 |
|
||||
| 7–10 | 红色脉冲扩散 |
|
||||
|
||||
### 战损统计模型(展示用)
|
||||
|
||||
- `total_events`
|
||||
- `high_impact_events` (impact ≥ 7)
|
||||
- `estimated_casualties`
|
||||
- `estimated_strike_count`
|
||||
|
||||
---
|
||||
|
||||
## 三、数据流
|
||||
|
||||
```
|
||||
GDELT API → Python 服务(60s) → gdelt_events, conflict_stats
|
||||
↓
|
||||
POST /api/crawler/notify → situation.updated_at
|
||||
↓
|
||||
WebSocket 广播 getSituation() → 前端
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、运行方式
|
||||
|
||||
```bash
|
||||
# 1. 启动 Node API
|
||||
npm run api
|
||||
|
||||
# 2. 启动 GDELT 服务
|
||||
npm run gdelt
|
||||
# 或: cd crawler && uvicorn realtime_conflict_service:app --port 8000
|
||||
```
|
||||
Reference in New Issue
Block a user