nikolaitolmachev/flashscore-lineups
GitHub: nikolaitolmachev/flashscore-lineups
通过逆向 Flashscore 内部 GraphQL API 直接获取并可视化足球与冰球比赛阵容、球员数据及赔率信息的跨平台桌面应用。
Stars: 0 | Forks: 0
Flashscore Lineups
用于直接从 Flashscore 内部 GraphQL API 获取并可视化足球和冰球阵容的
桌面应用程序,无需浏览器自动化。
演示 •
功能 •
工程亮点 •
架构 •
安装
## 演示
### 应用程序工作流程
 |
 |
| Football |
Ice Hockey |
应用程序直接从 Flashscore 的内部 GraphQL API 和球队 HTML 页面获取数据,然后将其聚合到统一的桌面视图中:球队阵容、球员出场历史以及可用的 1X2 投注赔率。
不涉及 Selenium、浏览器自动化或 Web 渲染——所有数据均通过直接的 HTTP 请求收集。
## 功能
* 直接从 Flashscore 获取足球和冰球阵容
* 显示首发阵容、替补球员和球员位置
* 使用颜色编码的点直观显示球员过去 4 场比赛的出场情况
* 获取球员详细信息,包括国籍、年龄、出场次数和进球数
* 显示冰球特有的守门员统计数据(SV%、GAA、零封)
* 显示可用的 1X2 投注赔率及变化方向指示器
* 直接从 Flashscore CDN 加载球队队徽和国旗
* 单击即可打开球员的 Flashscore 个人资料
* 使用 PyQt5 构建的跨平台桌面界面
## 工程亮点
* 逆向工程 Flashscore 的内部 GraphQL endpoint
* 结合持久化 GraphQL 查询与 HTML 解析的多源数据 pipeline
* 使用 Python dataclasses 实现的领域驱动数据模型
* 使用 pytest 进行自动化单元和集成测试
* 结构划分为领域、服务、UI 和测试层
* 使用轻量级 HTTP 请求代替浏览器自动化来优化请求流程
## 架构
```
Match URL
│
▼
Match ID Parser
│
▼
Flashscore GraphQL API
│
┌──────────┼──────────┐
│ │
▼ ▼
dsof dlie2
(match info, (current
team IDs, lineups,
last events) status map)
│ │
└──────────┬──────────┘
│
▼
Previous Matches
(dlie2 × N)
│
▼
Squad HTML Pages
(×2 teams)
│
▼
Odds Pipeline
┌──────────┴──────────┐
▼ ▼
pobtm → ope2 × N
(bookmaker (1X2 odds
list) per bookmaker)
│
▼
Data Aggregation Layer
│
▼
Domain Data Models
(Match, Team, Player, Odds, LineupResult)
│
▼
PyQt5 GUI
```
应用程序将持久化的 GraphQL 查询与辅助的 HTML 解析相结合,并在渲染最终桌面界面之前,将检索到的数据转换为强类型的领域模型。
## 状态颜色
| 颜色 | 状态 | 含义 |
| ----- |------------| ------------------------------------ |
| 🟢 | 首发 | 球员首发上场 |
| 🟡 | 替补 | 球员在替补席上 |
| 🔴 | 缺席 | 球员未入选大名单 |
| ⚪ | 未知 | 无历史数据 |
## 安装
克隆代码库:
```
git clone https://github.com/nikolaitolmachev/flashscore-lineups.git
cd flashscore-lineups
```
创建并激活虚拟环境:
```
python -m venv .venv
```
**Linux / macOS**
```
source .venv/bin/activate
```
**Windows**
```
.venv\Scripts\activate
```
安装依赖项:
```
python -m pip install --upgrade pip
pip install -r requirements.txt
```
## 用法
启动应用程序:
```
python main.py
```
将 Flashscore 比赛网址粘贴到输入框中,然后单击 **Check lineups**。
## 下载
Releases 部分提供了预构建的 Windows 可执行文件。
无需安装 Python。
## 构建可执行文件
使用 PyInstaller 构建独立可执行文件:
```
pip install pyinstaller
pyinstaller -F -w --icon=assets/icon.ico --name Flashscore-Lineups main.py
```
生成的可执行文件将位于 `dist/` 目录中。
## 免责声明
本项目仅供教育目的使用。
它使用了 Flashscore 公开可访问的 Web 资源以及通过客户端分析发现的内部 GraphQL endpoint。所有商标、徽标和数据均归其各自所有者所有。
本项目未隶属于 Flashscore,也未获得其认可或与其有任何关联。
## 许可证
本项目基于 MIT 许可证授权。详情请参阅 [LICENSE](LICENSE) 文件。
标签:API逆向, GraphQL, PyQt5, Python, 体育数据, 安全规则引擎, 无后门, 桌面应用, 漏洞挖掘, 逆向工具