92 lines
2.5 KiB
Markdown
92 lines
2.5 KiB
Markdown
# 后端模块说明
|
||
|
||
## 一、现有模块结构
|
||
|
||
```
|
||
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
|
||
```
|