Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

(注)プログラミングの勉強を始めたばかりの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(一気にデータ読み込む関係上少し重いです)
サイトとしてはおかしな点もあるかと思いますが…ごめんなさい
最後まで読んでいただきありがとうございます。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away