PythonでRiotAPIをつかってサモナーネームから試合の詳細データを見てみた (riotwatcher)

(注)プログラミングの勉強を始めたばかりのlol中毒者の文系社会人なのでなにかおかしな点があるかもしれませんがご容赦ください。

はじめに RiotAPIとは

RiotAPIとはRiotgames開発の世界で一番遊ばれているであろうオンラインゲーム「league of Legend」の試合の情報やデータを取得することができるものです。
pythonにはriotwatcherというとっても便利なパッケージがありそちらを使うだけで自分のようなプログラミング初心者でもRiotAPIを叩くことができます。

APIキーの発行

https://developer.riotgames.com/
ここからlolのアカウントをもっている人なら誰でもAPIキーを発行できます。

SnapCrab_NoName_2018-3-16_21-16-57_No-00_LI.jpg

Development API Keyとある部分にある文字列がAPIキーです。 ただここにあるキーには有効期限があるので注意。期限のたびに発行しなおせばok
(自分でRiotAPIを使ったサイトをつくりRiotに審査を通せば使用期限のないAPIキーがもらえます。最後に載せますが自分も本当に本当に簡素なアプリをつくって審査に出したら三週間ほどで使用期限のないAPIキーをもらえたので多分登録さえすればもらえます)

実際にriotwatcherを使ってみる

さっそくriotwatcherをインストール

pip install riotwatcher

実際に使ってみましょう
(ちなみに公式Documentはこちら

from riotwatcher import RiotWatcher
watcher = RiotWatcher('APIキー')
my_region = 'jp1'#サーバーによってかわります 日本鯖はjp1
me = watcher.summoner.by_name(my_region, サモナーネーム)
print(me)

実行結果

 {'id': 6167963, 'accountId': 200420601, 'name': 'サモナーネーム', 'profileIconId': 661, 'revisionDate': 1521038800000, 'summonerLevel': 61}

こんな形で辞書でデータがでてきます。もちろん基本的なデータだけでなく詳細なデータも見れますよ

my_ranked_stats = watcher.league.positions_by_summoner(my_region, me['id'])
#サモナーの基本的なランクのデータです
recentmatchlists = watcher.match.matchlist_by_account_recent(my_region,me[ 'accountId'])
#直近20試合のデータが見れます
matches = recentmatchlists['matches']
x = 0
match_detail = []
for x in range(20):
  match_detail.append(watcher.match.by_id(my_region, matches[x]['gameId']))
  x += 1
#gameIdごとに試合の詳細が見れます。 今回は20試合分まとめて一つの配列として扱いました。

実行結果

#print(my_ranked_stats)の結果
[{'leagueId': '1685f020-fac4-11e7-83fb-90b11c3eac0c', 'leagueName': "Corki's Sentinels", 'tier': 'GOLD', 'queueType': 'RANKED_SOLO_5x5', 'rank': 'III', 'playerOrTeamId': '6167963', 'playerOrTeamName': 'QWYNG', 'leaguePoints': 13, 'wins': 96, 'losses': 104, 'veteran': True, 'inactive': False, 'freshBlood': False, 'hotStreak': False}]
#print(recentmatchlists)の結果 とっても長い
{'matches': [{'platformId': 'JP1', 'gameId': 168391993, 'champion': 498, 'queue': 420, 'season': 11, 'timestamp': 1521037344937, 'role': 'DUO_CARRY', 'lane': 'BOTTOM'}, {'platformId': 'JP1', 'gameId': 168401004, 'champion': 81, 'queue': 420, 'season': 11, 'timestamp': 1521034939616, 'role': 'DUO_CARRY', 'lane': 'BOTTOM'}, {'platformId': 'JP1', 'gameId': 168359941, 'champion': 110, 'queue': 420, 'season': 11, 'timestamp': 1521031926183, 'role': 'DUO_CARRY', 'lane': 'BOTTOM'}, {'platformId': 'JP1', 'gameId': 168379132, 'champion': 51, 'queue': 420, 'season': 11, 'timestamp': 1521030186057, 'role': 'DUO_CARRY', 'lane': 'BOTTOM'}, {'platformId': 'JP1', 'gameId': 168368761, 'champion': 4, 'queue': 420, 'season': 11, 'timestamp': 1521028462564, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168358261, 'champion': 4, 'queue': 420, 'season': 11, 'timestamp': 1521026037633, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168377531, 'champion': 163, 'queue': 420, 'season': 11, 'timestamp': 1521023974637, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168377205, 'champion': 245, 'queue': 420, 'season': 11, 'timestamp': 1521022113320, 'role': 'DUO', 'lane': 'TOP'}, {'platformId': 'JP1', 'gameId': 168366421, 'champion': 53, 'queue': 420, 'season': 11, 'timestamp': 1521016653949, 'role': 'DUO_SUPPORT', 'lane': 'BOTTOM'}, {'platformId': 'JP1', 'gameId': 168366013, 'champion': 163, 'queue': 420, 'season': 11, 'timestamp': 1521014197150, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168375079, 'champion': 103, 'queue': 420, 'season': 11, 'timestamp': 1521009078996, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168344284, 'champion': 163, 'queue': 420, 'season': 11, 'timestamp': 1520937128699, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168343957, 'champion': 24, 'queue': 420, 'season': 11, 'timestamp': 1520935394146, 'role': 'NONE', 'lane': 'JUNGLE'}, {'platformId': 'JP1', 'gameId': 168323714, 'champion': 103, 'queue': 420, 'season': 11, 'timestamp': 1520933206246, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168343176, 'champion': 103, 'queue': 420, 'season': 11, 'timestamp': 1520930687464, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168294543, 'champion': 61, 'queue': 420, 'season': 11, 'timestamp': 1520863112271, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168293684, 'champion': 163, 'queue': 420, 'season': 11, 'timestamp': 1520860865954, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168302960, 'champion': 245, 'queue': 420, 'season': 11, 'timestamp': 1520858766242, 'role': 'SOLO', 'lane': 'MID'}, {'platformId': 'JP1', 'gameId': 168302111, 'champion': 163, 'queue': 420, 'season': 11, 'timestamp': 1520856286023, 'role': 'DUO_SUPPORT', 'lane': 'NONE'}, {'platformId': 'JP1', 'gameId': 168301336, 'champion': 103, 'queue': 420, 'season': 11, 'timestamp': 1520853408098, 'role': 'SOLO', 'lane': 'MID'}], 'startIndex': 0, 'endIndex': 20, 'totalGames': 177}

print(match_detail)の結果 情報量多すぎて記事作成ページが動かないくらいなので画像で少し
SnapCrab_NoName_2018-3-17_0-19-13_No-00.png
※一試合分すら載せきれてません lolプレイヤーなら情報の意味はわかるはず。本当にその試合のなんでもわかります。
こちらのすべての情報をみれる簡単なアプリをつくったので最後に載せます。

まとめ

riotwacherを使うとpythonで簡単にRiotAPIから情報を得ることができます
RiotAPIからは思った以上に様々な情報を得ることできるのでlol好きな人はぜひ試してください。
最後にプログラミングズブの素人のただのlol廃人の自分ですがmatch_detailをサモナーネームからそのまま文字列で帰すアプリをつくったので載せておきます。
soloqnote(一気にデータ読み込む関係上少し重いです)
サイトとしてはおかしな点もあるかと思いますが…ごめんなさい
最後まで読んでいただきありがとうございます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.