接入英雄联盟(LoL)电竞数据API:从注册到获取数据

电竞数据是驱动粉丝互动、内容创作和深度分析的核心。无论是想做一个赛事数据可视化网站、一个查询选手表现的 Discord 机器人,还是进行比赛预测的模型,第一步都是接入可靠的数据源。Riot Games 通过其官方 Riot API 提供了丰富的数据,但接入过程略有门槛。本教程将以获取《英雄联盟》电竞赛事数据为例,详细讲解每一步。

第一步:准备工作与环境选择

  1. 注册 Riot Developer Account 并获取 API Key
    访问 Riot Games Developer Portal

用你的 League of Legends 账号登录。

进入 Dashboard,点击 "Register App"。

填写注册信息:

App Name: 你的应用名称(如 MyLoLEsportsStats)

Description: 简单描述你的应用用途。

App Type: 选择 Personal(个人开发)。

Privacy Policy URL 和 Terms of Service URL: 如果是个人项目,可以暂时填写 https://example.com

Callback URL: 同样可填 https://example.com

提交后,你将获得一个 API Key(形如 RGAPI-xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。这个 Key 是访问所有 API 的凭证,务必保密!

重要提示:

Riot 的 API Key 不是永久的,默认 24 小时后会失效。你需要在 Dashboard 中 regenerate(重新生成)它。对于生产环境,你需要编写逻辑自动处理密钥更新。

所有请求都必须附带这个 Key,并且有严格的速率限制(Rate Limits),请仔细阅读文档。

  1. 选择你的开发语言和工具
    本教程使用 Python 和 requests 库进行演示,因其简单易懂。你可以使用任何你熟悉的语言(Node.js, Java, Go等)。

安装必要的库:

bash
pip install requests
第二步:理解 API 结构(关键!)
Riot 的电竞(Esports)API 端点与普通游戏数据端点不同。它主要提供职业联赛的数据。

核心端点通常遵循以下模式:
https://esports-api.lolesports.com/persisted/gw/<端点名称>?hl=en-US

参数说明:

hl (locale): 语言代码,例如 en-US(英语),zh-CN(简体中文)。决定返回数据的语言。

必需请求头 (Headers):

x-api-key: 你刚才申请的 API Key。

第三步:实战代码演示
让我们编写一个 Python 脚本来获取最新赛事和比赛数据。

  1. 获取正在进行的所有联赛(Leagues)
    首先,我们需要知道有哪些联赛,并获取我们感兴趣的联赛的 id(例如:LPL, LCK, Worlds)。

python
import requests

你的 API Key

API_KEY = "YOUR_API_KEY_HERE" # 替换成你的真实 Key!

通用请求头

headers = {
"x-api-key": API_KEY
}

def get_leagues():
url = "https://esports-api.lolesports.com/persisted/gw/getLeagues?hl=en-US"
response = requests.get(url, headers=headers)

if response.status_code == 200:
    data = response.json()
    # 提取联赛信息
    leagues = data['data']['leagues']
    for league in leagues:
        print(f"League ID: {league['id']}, Name: {league['name']}, Slug: {league['slug']}")
    return leagues
else:
    print(f"Request failed with status code: {response.status_code}")
    print(response.text)
    return None

leagues_list = get_leagues()
运行结果:你会看到一列联赛信息,如 ("League ID: 98767991310872058, Name: LCK, Slug: lck")。记下你想要的联赛 ID。

  1. 获取特定联赛的赛程(Schedule)
    有了联赛 ID,我们就可以获取该联赛的日程安排,包括未开始、正在进行和已结束的比赛。

python
def get_schedule(league_id):
url = f"https://esports-api.lolesports.com/persisted/gw/getSchedule?hl=en-US"
# 注意:参数放在请求体中,而不是URL里
params = {
"leagueId": league_id # 例如 "98767991310872058"
}
response = requests.get(url, headers=headers, params=params)

if response.status_code == 200:
    data = response.json()
    events = data['data']['schedule']['events']
    print(f"\n--- Schedule for League {league_id} ---")
    for event in events:
        match = event['match']
        # 提取比赛信息
        print(f"Match ID: {match['id']}")
        print(f"Teams: {[team['name'] for team in match['teams']]}")
        print(f"Time: {event['startTime']}")
        print(f"Status: {event['state']}") # 状态:completed, inProgress, unstarted
        print("------")
    return events
else:
    print(f"Request failed: {response.status_code}")
    return None

假设我们想获取 LCK 的赛程

lck_id = "98767991310872058"
schedule = get_schedule(lck_id)
从输出中,选择一个 "id" 和 "state": "completed" 的比赛,用于下一步。

  1. 获取已结束比赛的详细数据(Event + Game Details)
    这是最核心的一步,获取具体的比赛数据。通常需要两个步骤:

A. 获取赛事下的所有游戏场次(Games)

python
def get_event_details(match_id):
url = f"https://esports-api.lolesports.com/persisted/gw/getEventDetails?hl=en-US"
params = {
"id": match_id # 替换成你上一步获取的 match id
}
response = requests.get(url, headers=headers, params=params)

if response.status_code == 200:
    data = response.json()
    event_data = data['data']['event']
    match_games = event_data['match']['games']
    
    print(f"\n--- Details for Match {match_id} ---")
    print(f"Best of: {event_data['match']['strategy']['count']}")
    for game in match_games:
        game_id = game['id']
        game_number = game['number']
        vods = game['vods']
        print(f"Game {game_number}: ID = {game_id}")
        # 这里可以进一步解析 game 对象内的队伍信息、比分等
    return event_data
else:
    print(f"Request failed: {response.status_code}")
    return None

填入一个具体的 match_id

match_id = "110657021797470492"
event_details = get_event_details(match_id)
B. (可选) 获取更详细的游戏数据
上述 getEventDetails 返回的数据已经非常丰富,包含了每局比赛的选手KDA、金钱、装备等详细信息。这些数据通常藏在 game['teams'] 和 game['players'] 结构中,需要你仔细解析 JSON。

第四步:最佳实践与注意事项
错误处理:务必做好错误处理(try...except),处理 429 (Rate Limit Exceeded)、403 (Forbidden / Key Invalid) 等错误码。

速率限制:严格遵守 Riot 的速率限制。在代码中加入延时(例如 time.sleep(1) between requests)以避免过快请求。

缓存数据:对于不经常变化的数据(如联赛列表、已结束的比赛),将其存入数据库或本地文件,避免重复请求。

API Key 管理:永远不要将 API Key 硬编码在代码中并上传到 GitHub 等公共平台!使用环境变量或配置文件来管理它。

python

使用环境变量示例

import os
API_KEY = os.environ.get("RIOT_API_KEY")
阅读官方文档:本文只是一个入门指南。深入开发时,必须常备 官方 API 文档。

结语
通过以上四个步骤,你已经成功打通了从 Riot 官方获取《英雄联盟》电竞赛事数据的通道。你可以在此基础上:

构建一个自动发布赛果的 Twitter/Discord 机器人。

创建一个网站,展示你喜欢的战队的详细数据统计。

分析选手的英雄偏好和胜率。

开发的过程就是不断探索和解析 API 返回的 JSON 数据结构的过程。祝你开发顺利!

posted on 2025-08-26 17:13  火星数据商务曼曼  阅读(443)  评论(1)    收藏  举报

导航