2.5 KiB
2.5 KiB
后端模块说明
一、现有模块结构
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_eventshigh_impact_events(impact ≥ 7)estimated_casualtiesestimated_strike_count
三、数据流
GDELT API → Python 服务(60s) → gdelt_events, conflict_stats
↓
POST /api/crawler/notify → situation.updated_at
↓
WebSocket 广播 getSituation() → 前端
四、运行方式
# 1. 启动 Node API
npm run api
# 2. 启动 GDELT 服务
npm run gdelt
# 或: cd crawler && uvicorn realtime_conflict_service:app --port 8000