5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

信州大学 kstmAdvent Calendar 2016

Day 9

PythonでRiotGamesAPIを叩いて遊ぶ 前半

Last updated at Posted at 2016-12-08

この記事は、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キーが必要なのでダッシュボードで確認しましょう.

#実際に叩いてみる
##使用したライブラリ

lib.py
import urllib.request as urllib2
import json

urllib2をそのままimportしたらハマったので調べてみるとpython3ではurllib.requestを使えば同様の機能が得られるらしいのでこれをurllib2としてimportします

##まずはサモナーID取得から

getSummID.py
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つのデータが取得できるわけではなく,チャンピオンごとのデータを取得することが出来ます.ではチャンピオンごとの戦績を一覧にして表示してみましょう.

getRankedStats.py
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()

取得してみると,summonerIDmodifyDatachampionsリストを取得することが出来ます.前述の通り,この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は,全てのチャンピオンの戦績の合計データです.

長くなりそうなので今回はここまで 後半に続く(続きたい)

5
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?