电竞比赛 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 表示当前数据的建议刷新间隔。

快速上手

  1. 无需 API Key,直接 HTTP GET
  2. 建议轮询间隔 ≥ 30 秒(服务端有 30 秒缓存)
  3. 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 参数

参数类型默认说明
gamestringall 项目过滤。传 all 聚合 LoL / CS2 / Dota2 / Valorant 等;或传具体 tag,见下表。
limitint50 最多返回条数,1 ~ 200。

game 常用值

项目
all全部电竞(推荐机器人使用)
league-of-legends英雄联盟
counter-strikeCS2
dota-2Dota 2
valorantValorant
mobile-legendsMLBB
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[] 字段说明

字段类型说明
slugstring唯一标识,建议用作缓存 key
titlestring完整标题,含项目、对阵、BO 赛制、联赛
gameStartTimeISO-8601 UTC真实开赛时间(来自 moneyline 的 gameStartTime,不是盘口创建时间)
bestOfintBO 赛制,如 3 / 5
currentGameint当前进行第几局(live);soon 时为 1
liveLabelstring人类可读状态,如 比赛 3 · BO3
series.scoreA / scoreBint当前系列比分(已结束局数统计)。soon 时为 0:0
series.teamA / teamBobject双方队名,字段 name
volume24hrnumber24 小时成交量,可视为热度
polymarketUrlstring外链到 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。

已复制