电竞比赛 API PUBLIC
给 AI 助手、Discord 机器人、数据看板用的只读接口:拉取 Polymarket 上真实对阵的实时比分与即将开赛列表。已自动过滤「趣味下注」类市场(Yes/No 长线盘等)。
GET/api/esports/live
正在进行的比赛:开赛时间、当前比分、第几局 · BO几、双方队名。
GET/api/esports/soon
尚未开赛的对阵,按开赛时间升序。适合「下一场什么时候打」类提醒。
缓存与限流(已内置)
服务端对 Polymarket 的请求做了内存缓存:
/live 30 秒、/soon 90 秒;同一时刻大量开发者调用也只会打一次上游。响应头带 Cache-Control: public, max-age=…,客户端/CDN 也可复用。响应里 cacheTtlSec 表示当前数据的建议刷新间隔。
快速上手
- 无需 API Key,直接 HTTP GET
- 建议轮询间隔 ≥ 30 秒(服务端有 30 秒缓存)
- 读
events[],每条就是一场比赛
# 全部项目 · 正在进行的比赛 curl -s 'https://YOUR_HOST/api/esports/live?game=all&limit=20' # 只看英雄联盟 · 即将开始 curl -s 'https://YOUR_HOST/api/esports/soon?game=league-of-legends&limit=30'
GET /api/esports/live
对齐 Polymarket 实时「比赛」Tab,不含趣味盘。
GET
/api/esports/live
返回当前正在进行的真实电竞对阵列表,按 24h 热度降序。
Query 参数
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
| game | string | all | 项目过滤。传 all 聚合 LoL / CS2 / Dota2 / Valorant 等;或传具体 tag,见下表。 |
| limit | int | 50 | 最多返回条数,1 ~ 200。 |
game 常用值
| 值 | 项目 |
|---|---|
| all | 全部电竞(推荐机器人使用) |
| league-of-legends | 英雄联盟 |
| counter-strike | CS2 |
| dota-2 | Dota 2 |
| valorant | Valorant |
| mobile-legends | MLBB |
| overwatch | 守望先锋 |
| call-of-duty | 使命召唤 |
| starcraft-2 | 星际2 |
GET /api/esports/soon
对齐 Polymarket 未开赛列表。
GET
/api/esports/soon
返回尚未开赛的对阵,按 gameStartTime 升序(越近越靠前)。参数与 /live 相同。
响应结构(两个接口相同)
{
"status": "live", // 或 "soon"
"game": "all",
"source": "polymarket",
"updatedAt": 1716800000000, // 毫秒时间戳
"cacheTtlSec": 30, // 建议客户端轮询间隔(秒)
"events": [
{
"id": "518353",
"slug": "lol-fox1-drx-2026-05-27",
"title": "LoL: BNK FEARX vs Kiwoom DRX (BO3) - LCK Rounds 1-2",
"icon": "https://...",
"gameStartTime": "2026-05-27T11:15:00Z", // 真实开赛时间(UTC)
"endDate": "2026-05-27T17:15:00Z",
"bestOf": 3,
"currentGame": 3, // 当前第几局(live 时有效)
"liveLabel": "比赛 3 · BO3",
"volume24hr": 3069190.03, // 24h 热度,可辅助排序
"polymarketUrl": "https://polymarket.com/event/lol-fox1-drx-2026-05-27",
"series": {
"bestOf": 3,
"currentGame": 3,
"liveLabel": "比赛 3 · BO3",
"gameStartTime": "2026-05-27T11:15:00Z",
"scoreA": 1,
"scoreB": 1,
"teamA": { "name": "BNK FEARX" },
"teamB": { "name": "Kiwoom DRX" }
}
}
]
}
events[] 字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| slug | string | 唯一标识,建议用作缓存 key |
| title | string | 完整标题,含项目、对阵、BO 赛制、联赛 |
| gameStartTime | ISO-8601 UTC | 真实开赛时间(来自 moneyline 的 gameStartTime,不是盘口创建时间) |
| bestOf | int | BO 赛制,如 3 / 5 |
| currentGame | int | 当前进行第几局(live);soon 时为 1 |
| liveLabel | string | 人类可读状态,如 比赛 3 · BO3 |
| series.scoreA / scoreB | int | 当前系列比分(已结束局数统计)。soon 时为 0:0 |
| series.teamA / teamB | object | 双方队名,字段 name |
| volume24hr | number | 24 小时成交量,可视为热度 |
| polymarketUrl | string | 外链到 Polymarket 原页 |
过滤规则
仅返回标题含
(BOx) 与 vs 的真实对阵;自动排除 Yes/No 趣味盘、地区预测等。若 events 为空数组表示当前没有符合条件的比赛,不是错误。
机器人轮询示例(Python)
# pip install requests
import requests, time
BASE = "https://YOUR_HOST/api/esports"
last_scores = {}
while True:
data = requests.get(f"{BASE}/live", params={"game": "all", "limit": 50}, timeout=15).json()
for ev in data.get("events", []):
s = ev.get("series") or {}
key = ev["slug"]
score = (s.get("scoreA", 0), s.get("scoreB", 0))
if key in last_scores and last_scores[key] != score:
print(f"比分变化! {ev['title']} → {score[0]}:{score[1]} ({ev.get('liveLabel')})")
last_scores[key] = score
time.sleep(45)
在线调试
/api/esports/live?game=all&limit=10
// 点击「发送」查看 JSON 响应
FAQ
需要鉴权吗?
不需要。公开只读接口。
多久轮询一次?
看响应里的 cacheTtlSec:/live 为 30 秒,/soon 为 90 秒。比这个更快请求不会拿到更新数据,只会增加服务器压力。机器人建议 30~60 秒拉一次 live 即可。
很多人同时调用会炸吗?
不会。同一 game 在缓存有效期内所有请求共用一份内存结果;缓存过期瞬间也只会有一个线程去拉 Polymarket(防击穿),其余等待复用。
时区怎么处理?
所有时间字段均为 UTC(ISO-8601)。展示给用户时请自行转本地时区(如北京时间 UTC+8)。
和旧接口 /api/esports/more 的关系?
/live 等价于 /more?status=live,/soon 等价于 /more?status=soon。新对接请直接用这两个路径,语义更清晰。
会返回下注赔率吗?
不会。本 API 只提供比赛信息(时间、比分、队名),不含盘口赔率。如需赔率请自行对接 Polymarket。