この記事は、kstmアドベントカレンダーの記事として書かれました
#Riot Games APIについて
オンラインゲーム「リーグ・オブ・レジェンド」(通称LoL)の運営会社であるRiot Gamesが提供するAPI
このAPIを使うと,個々人やチームの戦績やらなんやらがJSON形式で引っ張ってこれるので今回はこれを叩いて遊んでみようと思います.
#目標
ランク戦の戦績データを使って"なんかカッコイイ"プロフィール画像(Twitterのヘッダー画像みたいな)が作れたら良いなぁ.
- 実行環境
- Windows 10
- Python 3.5 (Anaconda)
#APIの呼び出し方
条件:Riot Gamesが運営しているサーバのLoLアカウントを持っている
https://developer.riotgames.com/
API DOCUMENTATION -> FULL API REFERENCE に飛ぶと色んなAPIがあって任意の引数を与えてやるとJSONを返してくれます.
叩く場合には個々のアカウントに割り振られているAPIキーが必要なのでダッシュボードで確認しましょう.
#実際に叩いてみる
##使用したライブラリ
import urllib.request as urllib2
import json
urllib2
をそのままimport
したらハマったので調べてみるとpython3
ではurllib.request
を使えば同様の機能が得られるらしいのでこれをurllib2
としてimport
します
##まずはサモナーID取得から
SUM_NAME = "sumname" #サモナーネーム 好きなのに変えてね
SUMMONER_V14 = "https://jp.api.pvp.net/api/lol/jp/v1.4/summoner/by-name/"
API_KEY = "api_key=XXXXXXXXXXXXXXXX" #自分のAPIキーに変えてね
try:
s = urllib2.urlopen(SUMMONER_V14 + SUM_NAME + '?' + API_KEY)
summ = json.loads(s.read().decode('utf-8'))
SUM_ID = summ[SUM_NAME.lower()]["id"]
print(SUM_ID)
finally:
s.close()
ここで使うAPIはsummoner-v1.4
実際に取得してみると,小文字サモナーネーム型のオブジェクトを返してきます.このオブジェクトにはサモナーIDやプロフィールアイコンIDなどが格納されています.戦績データを取得するためにはサモナーIDが必要なのでroot[SUM_NAME.lower()]["id"]
のようにしてidにアクセスして取得してみます.
私のサモナーネームを使用した場合は6300501
が表示できたら成功です.
このサモナーIDというのが非常に大切で,戦績などプレイヤーに結び付けられているデータを取得するにはこのIDを使うことになります.
##ランク戦の戦績を取得してみよう
ここで使うAPIはstats-v1.3
このAPIはマッチ1つ1つのデータが取得できるわけではなく,チャンピオンごとのデータを取得することが出来ます.ではチャンピオンごとの戦績を一覧にして表示してみましょう.
try:
r = urllib2.urlopen(RANKED_STATS_V13 + '?' + SEASON + '&' +API_KEY)
ranked = json.loads(r.read().decode('utf-8'))
champions = ranked['champions']
for champion in champions:
stats = champion["stats"]
print("チャンピオンid:" + str(champion["id"]) + "の戦績は" + str(stats["totalSessionsWon"]) + "勝" + str(stats["totalSessionsLost"]) + "敗です")
finally:
r.close()
取得してみると,summonerID
とmodifyData
とchampionsリスト
を取得することが出来ます.前述の通り,このAPIはチャンピオンごとの戦績を取得することが出来,そのデータはchampionsリスト
内のstatsオブジェクト
に格納されています.なので,for文使って個々の勝敗回数を取得して表示してみると以下のようになります.
チャンピオンid:42の戦績は1勝1敗です チャンピオンid:3の戦績は0勝1敗です チャンピオンid:4の戦績は1勝6敗です ... チャンピオンid:0の戦績は22勝28敗です
このチャンピオンidはそれぞれのチャンピオンに割り振られているidで,次回説明するstatic-dataと紐付けさせることによってチャンピオン名も取得することが出来ます.
ちなみにこのチャンピオンid:0は,全てのチャンピオンの戦績の合計データです.
長くなりそうなので今回はここまで 後半に続く(続きたい)