e9e1111df9
- 后端实现: - 实现 NBA 比赛数据服务,从 Polymarket API 获取数据 - 实现数据库存储和增量拉取逻辑(优先从 DB 获取,数据不足时增量拉取) - 使用 sports_market_types 参数直接筛选 moneyline 类型 - 实现分页拉取逻辑(基于 gameStartTime 和 createdAt) - 移除 nba_markets 相关的外键约束(V12 迁移) - 修复数据拉取逻辑:超过 3 天的数据不拉取 - 前端实现: - 实现策略创建/编辑/列表页面 - 实现交易信号展示页面和统计页面 - 修复重复请求问题(使用 useCallback 包装 fetchGames) - 支持选择单场比赛进行配置 - 使用西8区时间格式化显示 - 数据库: - 创建 NBA 量化交易相关表(V11 迁移) - 移除外键约束(V12 迁移) - 文档: - 添加产品需求文档、技术方案、算法文档等
4.0 KiB
4.0 KiB
NBA 比赛数据获取实现
一、概述
本系统从 NBA Stats API 实时获取 NBA 比赛数据:
- 数据源:NBA Stats API(官方数据源,实时、准确、完整)
- 不依赖数据库:所有数据从 API 实时获取
二、实现架构
2.1 数据流程
1. 从 NBA Stats API 获取比赛列表(实时)
↓
2. 解析 API 响应,转换为 DTO
↓
3. 返回比赛数据给前端
2.2 关于 Polymarket 市场匹配
当前实现:
- 不进行市场匹配(因为 Polymarket API 限制)
- 比赛数据中的
polymarketMarketId字段为null
未来扩展:
- 如果将来有办法获取 condition_ids,可以从 Polymarket API 实时获取市场信息
- 已保留
NbaMarketNameParser工具类,可用于市场名称解析
2.2 核心组件
1. NbaGameService
- 功能:从 NBA Stats API 实时获取比赛数据
- 数据源:NBA Stats API(官方数据源)
- 特点:
- 实时获取,不依赖数据库
- 支持日期范围查询
- 支持按状态过滤
2. NbaMarketNameParser(保留,供将来使用)
- 功能:解析 Polymarket 市场名称,提取球队和日期信息
- 支持格式:
- "Team1 vs Team2"
- "Team1 @ Team2"
- "Will Team1 beat Team2"
- "Team1 win"
- 日期格式:
- "Dec 15, 2024"
- "2024-12-15"
- "12/15/2024"
- 说明:当前未使用,保留以备将来扩展
三、实现细节
3.1 比赛数据获取
获取流程:
- 根据日期范围,每天调用一次 NBA Stats API
- 解析 Scoreboard 响应,提取比赛信息
- 组合 GameHeader 和 LineScore 数据
- 转换为 NbaGameDto 返回
数据字段:
- 比赛基本信息(球队、日期、时间)
- 实时比分和状态
- 比赛节次和剩余时间
- 球队统计信息
3.2 关于市场匹配(未来扩展)
当前状态:
- 不进行市场匹配
polymarketMarketId字段为null
未来扩展方案: 如果将来需要匹配市场,可以考虑:
- 从其他来源获取 condition_ids(如爬取、手动维护等)
- 使用 Polymarket API 实时查询这些市场
- 使用
NbaMarketNameParser解析市场名称并匹配
3.3 数据返回
NbaGameDto 包含:
- 比赛基本信息(从 NBA Stats API)
polymarketMarketId:当前为null(未来可扩展)
四、使用方式
4.1 API 调用
// 获取比赛列表(自动匹配市场)
val request = NbaGameListRequest(
startDate = "2024-12-15",
endDate = "2024-12-22"
)
val result = nbaGameService.getNbaGames(request)
4.2 返回数据
data class NbaGameDto(
val nbaGameId: String?,
val homeTeam: String,
val awayTeam: String,
val gameDate: LocalDate,
val gameStatus: String,
val homeScore: Int,
val awayScore: Int,
val polymarketMarketId: String? // 匹配的市场 ID
)
五、优势
- 数据完整:从 NBA Stats API 获取完整的比赛数据
- 实时更新:比赛数据实时获取,不依赖数据库
- 简单高效:直接调用 API,无需维护数据库
- 官方数据源:数据准确可靠
六、注意事项
-
API 限制:
- NBA Stats API 需要设置正确的请求头
- 建议控制请求频率(< 10 请求/秒)
-
市场匹配:
- 当前不进行市场匹配
- 如果需要匹配,需要解决 Polymarket API 的限制(需要知道 condition_ids)
-
性能考虑:
- 日期范围查询会多次调用 API(每天一次)
- 建议合理设置日期范围,避免查询过长的时间段
七、后续优化
-
缓存机制:
- 缓存 API 响应,减少重复请求
- 设置合理的缓存时间(如 30 秒)
-
错误处理:
- 实现重试机制(指数退避)
- 处理 API 临时不可用的情况
-
市场匹配(可选):
- 如果将来有办法获取 condition_ids,可以实现市场匹配
- 使用
NbaMarketNameParser进行市场名称解析