EVE Online 多角色数据管理与交易分析工具。通过 ESI API 同步角色数据到本地 SQLite,提供 Streamlit Dashboard 可视化展示、压单提醒和竞争分析。
- 多角色数据同步 — 钱包、挂单、技能、资产、合同,支持分层频率调度
- 区域订单簿 — 拉取 Jita 等区域市场数据,与角色挂单交叉比对
- 被压价检测 — 自动检测被压单的挂单,计算改价优先级
- 实时提醒 — Discord Webhook 推送压单通知,支持去重和优先级排序
- 竞争分析 — 按物品维度统计被压频率、幅度,识别高竞争商品
- 选品评分 — 基于利润率、日均成交额、竞争度的综合评分排行
- 联盟/军团分析 — 合同管理、主权地图、zKillboard 战斗数据
- 技能管理 — 训练队列监控、MCT 状态按账号分组展示
- 后台调度 — APScheduler 守护进程,支持 macOS launchd / Linux systemd 部署
External APIs ──→ ODS (ods_*) ──→ DWD (dwd_*) ──→ DWS (dws_*) ──→ Dashboard
原始同步数据 清洗/关联 聚合/指标 展示
数据源包括 ESI API、zKillboard、Dotlan RSS 和 SDE 静态数据。所有外部数据先同步到 SQLite ODS 层,分析和展示只读 DB,不直接调用外部 API。
src/evelearning/
├── fetch/ # 外部数据获取
│ ├── esi/ # ESI API (client, character, universe, market, alliance, contracts, auth/)
│ ├── zkb/ # zKillboard API
│ └── dotlan/ # Dotlan RSS
├── analysis/ # 中间层分析逻辑
├── dash/ # Streamlit Dashboard
│ ├── app.py # 入口(多页导航)
│ ├── queries.py # 集中 SQL 查询(只读 DB)
│ └── views/ # 页面: overview, orders, assets, skills, contracts, alliance, battles, ...
├── scheduler/ # 后台调度服务 (APScheduler)
│ ├── server.py # 主进程 (daemon / --status / --run)
│ ├── config.py # 调度频率配置
│ ├── history.py # 任务执行历史
│ └── rate_limiter.py # ESI 请求限流
├── decision/ # 决策逻辑 / workflow
├── actor/ # 执行层(待扩展)
└── utils/ # 辅助工具
├── config.py # 环境变量 + 配置
├── notify.py # Discord 通知
└── db/ # SQLite 连接/schema/sync
scripts/
├── sync.py # 统一同步入口 (--only / --weekly / --all / --list)
├── sync/ # 同步模块 (characters, market_orders, contracts, alliance, killmails, ...)
├── report/ # 报告脚本
└── import_fittings.py # 导入 EFT 配装
deploy/
└── install.sh # 部署脚本 (macOS launchd + Linux systemd)
uv sync复制 .env.example 为 .env 并填写:
cp .env.example .env必填项:
ESI_CLIENT_ID/ESI_CLIENT_SECRET— EVE developer app 凭证DEFAULT_CHARACTER_ID— 默认角色 ID(用于获取建筑等数据)
可选项:
DEFAULT_ALLIANCE_NAME— 联盟名称(用于联盟数据同步)EVE_ACCOUNTS— 账号分组(用于 MCT 追踪)DISCORD_WEBHOOK_URL— Discord 通知 webhook 地址
详见 .env.example 中的完整说明。
uv run python -m evelearning.fetch.esi.auth浏览器会打开 EVE SSO 页面,逐个授权你的角色。Token 存入 SQLite auth_tokens 表并自动刷新。
# 默认同步(高频任务)
uv run python scripts/sync.py
# 查看所有可用任务
uv run python scripts/sync.py --list
# 同步全部(包括 weekly/monthly 任务)
uv run python scripts/sync.py --all
# 只运行指定任务
uv run python scripts/sync.py --only characters_fast market_ordersuv run streamlit run src/evelearning/dash/app.py# 前台运行
uv run python -m evelearning.scheduler.server
# 查看调度状态
uv run python -m evelearning.scheduler.server --status
# 手动触发某个任务
uv run python -m evelearning.scheduler.server --run undercut_alert
# 部署为系统服务
deploy/install.sh install
deploy/install.sh statusSQLite 数据库位于 data/neweden.db(gitignored)。
表命名遵循数仓分层:
| 前缀 | 来源 | 示例 |
|---|---|---|
ods_esi_* |
ESI API | ods_esi_wallet_balance, ods_esi_market_order |
ods_zkb_* |
zKillboard | ods_zkb_killmail |
ods_sde_* |
SDE 静态数据 | ods_sde_type, ods_sde_group |
ods_user_* |
用户录入 | ods_user_fitting |
ods_internal_* |
内部计算 | ods_internal_undercut_event |
系统表:auth_tokens、scheduler_task_history
- ESI API — 角色数据、市场、宇宙信息
- ESI OpenAPI Spec
- SDE Static Data — 游戏静态数据(类型、技能、蓝图等)
- zKillboard — 击杀数据
- Dotlan — 主权地图 RSS
# 包管理
uv sync # 安装依赖
uv add <package> # 添加依赖
# 代码结构
# src layout: src/evelearning/
# 构建工具: hatchlingConventions:
- Commit message 使用中文 + conventional commit prefix (
feat:/fix:/refactor:) - Dashboard 查询集中在
dash/queries.py,views 只负责 UI 展示 - 敏感信息(角色 ID、联盟 ID、API key、webhook URL)一律通过
.env配置,禁止硬编码
archive/ 目录保留早期实验代码和旧版 PostgreSQL pipeline,仅供参考。当前活跃代码在 src/ + scripts/。
See LICENSE.