League of Legends API Introduction

Xinchen Pan · 2018/06/16

前言

最近在逛统计之都时看到一个很有意思的帖子,https://cosx.org/2017/05/rdota2-seattle-prediction/, 作者用了一个叫做RDota2 的 R package来抓取Dota2的比赛数据。我想既然Dota2有相关api,英雄联盟肯定也有吧,不然网上那么多查询召唤师信息的网站是用哪得数据,于是就搜索了一番。

https://developer.riotgames.com/ 这个网站有关于LOL API的全部信息。在读过它的documentation和在R里尝试抓一些数据后,两个想法出现在脑海里。第一个是想分析自己的排位赛数据,包括胜率,最常使用英雄,平均击杀数等。第二是想写一个LOL API client 的package。不确定是否都能完成,尤其是第二项。

这篇文章主要目的是想熟悉LOL API的使用,以及了解它具体能返回什么哪些数据,算是为后面的分析以及写package做准备。

注: League of Legends(下面简称为LOL), 中文翻译英雄联盟。LOL是美国Riot Games开发的一款MOBA游戏,上线以来十分受欢迎,2016年9月Riot估计全世界每个月有超过1亿名活跃玩家(维基百科)

注册API

要使用API必须先注册个英雄联盟账号,还是可以在这个链接https://developer.riotgames.com/ 注册。

注册了之后在Getting Started里我们可以看到这么一行代码,

curl --request GET 'https://na1.api.riotgames.com/lol/summoner/v3/summoners/by-name/RiotSchmick?api_key=' --include

<key>就是我们登录后自动生成的那串英文字母,每个key可以使用24小时。我们看看它会返回什么结果。

下面这串数据是上图的最后一行,也是真正有用的信息。

{"id":585897,
  "accountId":31649572,
  "name":"RiotSchmick",
  "profileIconId":746,
  "revisionDate":1529046826000,
  "summonerLevel":91}

它的解释可以在https://developer.riotgames.com/api-methods/#summoner-v3/GET_getBySummonerName 找到,如下图。

我们很容易能看出来这都是关于召唤师账户信息的数据。

LOL的API还提供了许多其它数据可以让我们抓取

我们来看几个。

1. CHAMPION-MASTERY-V3

1.1 Get all champion mastery entries sorted by number of champion points descending

/lol/champion-mastery/v3/champion-masteries/by-summoner/{summonerId}

Input: summonerId 就是上边的id,

返回的是你所有的英雄的熟练度,英雄等级等信息。

以下为我输入我的id之后返回的结果的一部分。这是我最熟练的一个英雄,英雄id是126,它并不是通过开箱子得到,英雄熟练度是187494分,还有一些其它信息。

 "championLevel": 7,
        "chestGranted": false,
        "championPoints": 187494,
        "championPointsSinceLastLevel": 165894,
        "playerId": 39938327,
        "championPointsUntilNextLevel": 0,
        "tokensEarned": 0,
        "championId": 126,
        "lastPlayTime": 1515867985000

1.2 Get a champion mastery by player ID and champion ID

/lol/champion-mastery/v3/champion-masteries/by-summoner/{summonerId}/by-champion/{championId}

Input: summonerId, championId

上边是返回你所有的英雄的熟练度信息,这个是返回某个特定英雄。

1.3 Get a player’s total champion mastery score, which is the sum of individual champion mastery levels.

/lol/champion-mastery/v3/scores/by-summoner/{summonerId}

这个请求返回的是你所有英雄熟练等级之和,如果你有120个英雄,每个英雄熟练度都是7级,那么返回的就是840。

2.CHAMPION-V3

2.1 Retrieve all champions

/lol/platform/v3/champions

这request不需要输入任何东西

rankedPlayEnabled: 该英雄是否已在排位模式上线
botEnabled: 该英雄是否在自定义模式作为AI上线
botMmEnabled: 该英雄是否在人机模式作为AI上线
active: 该英雄是否已被激活
freeToPlay: 是否为该周周免英雄

"rankedPlayEnabled": true,
            "botEnabled": false,
            "botMmEnabled": false,
            "active": true,
            "freeToPlay": false,
            "id": 266

2.2 Retrieve champion by ID

返回特定英雄

/lol/platform/v3/champions/{id}

3. LEAGUE-V3

3.1 Get the challenger league for given queue

返回最强王者段位所有召唤师信息

Input: RANKED_SOLO_5x5/RANKED_FLEX_SR/RANKED_FLEX_TT

野龟哥的信息

   "tier": "CHALLENGER",
    "queue": "RANKED_SOLO_5x5",
    "leagueId": "930faadc-f191-3fc0-b715-79804ef73cfc",
    "name": "Taric's Shadehunters",
    "entries": [
        {
            "hotStreak": true,
            "wins": 172,
            "veteran": false,
            "losses": 129,
            "rank": "I",
            "playerOrTeamName": "sks Tmfprl",
            "inactive": false,
            "playerOrTeamId": "83339118",
            "freshBlood": false,
            "leaguePoints": 568
        },

3.2 Get league with given ID, including inactive entries

每个英雄联盟玩家都会被分到一个分区里,每个分区都会有个独特的id,比如上面的930faadc-f191-3fc0-b715-79804ef73cfc>, 通过这个id可以找到每个分区里所有的玩家信息。这个id需要通过特殊方法来找到,并没有可以直接返回的request命令。

3.3 Get the master league for given queue

返回超凡大师段位所有玩家信息

/lol/league/v3/masterleagues/by-queue/{queue}

3.4 Get league positions in all queues for a given summoner ID

寻找某个特定玩家的信息, 我是青铜王者3 0点。

Input: summonerId

[
    {
        "queueType": "RANKED_SOLO_5x5",
        "hotStreak": false,
        "wins": 12,
        "veteran": false,
        "losses": 19,
        "playerOrTeamId": "39938327",
        "leagueName": "Kennen's Outriders",
        "playerOrTeamName": "spsufawi",
        "inactive": false,
        "rank": "III",
        "freshBlood": false,
        "leagueId": "dd4d6980-fc0a-11e7-b72a-c81f66dbb56c",
        "tier": "BRONZE",
        "leaguePoints": 0
    }
]

4. LOL-STATIC-DATA-V3

这一项返回的是游戏里的各种数据,比如符文,天赋,物品,英雄,具体的可以在

https://developer.riotgames.com/api-methods/#lol-static-data-v3 查询,在这里我列出前几项

4.1 Retrieves champion list

返回所有英雄信息,包括英雄名字,后边我们肯定会需要用id来找英雄名字。

62号是猴子。

"MonkeyKing": {
        "title": "the Monkey King",
        "id": 62,
        "key": "MonkeyKing",
        "name": "Wukong"
    },

4.2 Retrieves champion by ID

/lol/static-data/v3/champions/{id}

返回特定英雄信息

4.3 Retrieves item list

/lol/static-data/v3/items

返回所有物品信息

"1001": {
            "plaintext": "Slightly increases Movement Speed",
            "description": "<groupLimit>Limited to 1 pair of boots.</groupLimit><br><br><unique>UNIQUE Passive - Enhanced Movement:</unique> +25 Movement Speed",
            "id": 1001,
            "name": "Boots of Speed"
        },

5. LOL-STATUS-V3

5.1 Get League of Legends status for the given shard.

查询各个服务器的状态

/lol/status/v3/shard-data

这里我们需要修改的是前面的地址,如果想查询俄罗斯服务器,那么就把NA1换成ru.

6. MATCH-V3

这是最重要的一部分,比赛信息

6.1 Get match by match ID

/lol/match/v3/matches/{matchId}

每一场游戏都有一个独特的比赛id,通过这个id可以查询那场比赛的信息

5.2 Get matchlist for games played on given account ID and platform ID

/lol/match/v3/matchlists/by-account/{accountId}

我们通过上边的命令来获得所有的比赛id

每次最多可以返回100场比赛的id, 这是其中一场排位赛

{
    "lane": "MID",
    "gameId": 2689018141,
    "champion": 4,
    "platformId": "NA1",
    "timestamp": 1515364930588,
    "queue": 420,
    "role": "SOLO",
    "season": 10
},

6.3 Get match timeline by match ID

返回比赛信息

/lol/match/v3/timelines/by-match/{matchId}

我用R抓取了其中一部分如下所示, 具体参见https://developer.riotgames.com/api-methods/#match-v3/GET_getMatchTimeline

> games$participants
   participantId teamId championId spell1Id spell2Id
1              1    100        245        4       12
2              2    100         32       11        4
3              3    100        126        4       14
4              4    100        117       14        3
5              5    100         21        7        4
6              6    200         12        4        3
7              7    200         86        4       14
8              8    200         77       11        4
   highestAchievedSeasonTier stats.participantId
1                     BRONZE                   1
2                     SILVER                   2
3                     SILVER                   3
4                     BRONZE                   4
5                   UNRANKED                   5
6                     SILVER                   6
7                     BRONZE                   7
8                     SILVER                   8
   stats.win stats.item0 stats.item1 stats.item2
1       TRUE        3152        1056        3020
2       TRUE        1401        2031        3047
3       TRUE        3142        3077        3147
4       TRUE        3117        3504        3069
5       TRUE        1055        3142        2003
6      FALSE        3401        2049        3009
7      FALSE        1054        2031        3142
8      FALSE        1416        2031        3057

7.SUMMONER-V3

如例子所示,返回账号信息,这个应该放在最前边。可以分别通过召唤师名字,accountId和summonerId查询

7.1 Get a summoner by summoner name

{
    "profileIconId": 603,
    "name": "spsufawi",
    "summonerLevel": 63,
    "accountId": 203047173,
    "id": 39938327,
    "revisionDate": 1527548543000
}