PythonでLeague of Legendsの戦績を保存する
League of Legendsにはゲームの情報を取得するためのRiot Games APIが用意されています。一年程前にもこのAPIについての記事を書きましたが、今回は初心者向けにより簡単な使い方を紹介します。
導入
手軽に書けるプログラミング言語としてPythonを採用しました。Python向けにはRiotWatcherというラッパーライブラリが開発されており、Riot Games APIを簡単に利用することができます。
Pythonのインストール
Pythonの公式サイトpython.orgからインストーラーをダウンロードして実行します。
RiotWatcherのインストール
Pythonにはpipというパッケージ管理システムがあります。このRiotWatcherもpipに対応しているのでコマンドひとつで簡単にインストールできます。
Windowsではコマンドプロンプト、Macではターミナルを開いて、次のコマンドを実行してください。
pip install riotwatcher
APIキーの取得
APIを利用するためにはAPIキーというパスワードのような文字列が必要です。
まず、公式デベロッパーサイトRiot Games APIにLoLのアカウントでサインインします。そしてトップページからxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
という形式のAPIキーをコピーしてどこかにメモしておきましょう。ただしキーを他人に知られないよう注意してください。
サモナー情報の取得
ここまでの作業でAPIを使う準備は完了しました。いよいよスクリプトを書いていきます。
スクリプト
次のスクリプトをmyscript.py
として保存します。<api-key>
をAPIキーに、<summoner-name>
を適当なサモナー名に書き換えてください。
from riotwatcher import RiotWatcher w = RiotWatcher('<api-key>', default_region='jp') summoner = w.get_summoner(name='<summoner-name>') print(summoner)
実行
コマンドラインで次のコマンドを使用するとスクリプトを実行できます。
python myscript.py
成功するとサモナー名と共にレベルなどの情報が表示されます。
{'id': 12345678, 'name': 'ほげ', 'profileIconId': 23, 'revisionDate': 1493766556000, 'summonerLevel': 30}
解説
スクリプトの最初ではRiotWatcherを読み込んでいます。
from riotwatcher import RiotWatcher
次にRiotWatcherを使い始めるための初期化をしています。
w = RiotWatcher('<api-key>', default_region='jp')
(本来ならdefault_region=JAPAN
と書くべきですが、記事投稿時にpipで取得したバージョンではJAPAN = 'jp'
が定義されていませんでした。)
サモナー名から基本情報を取得するにはget_summoner
関数を使用します。
summoner = w.get_summoner(name='<summoner-name>')
戻り値はdict型です。例えばサモナーレベルを次のようにして取得できます。
summoner_level = summoner['summonerLevel']
取得できる値を知るには、公式のリファレンスを参照してください。
対戦履歴の取得・保存
次に最近の戦績を取得してみます。先程のスクリプトに少し手を加えて、各試合のデータをファイルに保存するスクリプトを作成しました。
import json from riotwatcher import RiotWatcher w = RiotWatcher('<api-key>', default_region='jp') summoner = w.get_summoner(name='<summoner-name>') games = w.get_recent_games(summoner['id']) for game in games['games']: with open(str(game['gameId']) + '.json', 'w') as file: file.write(json.dumps(game))
解説
最近の戦績を取得する関数はget_recent_games
です。引数にはサモナーIDを取ります。
games = w.get_recent_games(summoner['id'])
各試合のデータはgames['games']
のlistに格納されているのでfor文で一試合ずつ取り出します。
for game in games['games']: # 試合データごとの処理
Riot Games APIから取得できるデータはすべてjson形式なので、戦績もjsonファイルとして保存することにしました。スクリプトの先頭にimport json
を加え、以下のようにしてjsonファイルを出力します。
with open(str(game['gameId']) + '.json', 'w') as file: file.write(json.dumps(game))
戦績のファイル名はstr(game['gameId']) + '.json'
、つまり(ゲームID).json
としました。dict型の戦績データをjson形式に変換するためにjson.dumps
という関数を使用しています。
まとめ
PythonでLoLのデータを取得する基本的な方法は以上です。ラッパーライブラリがあるおかげで、APIを直接利用するよりも簡単にデータをダウンロードできました。
ただ戦績を見るだけならばOP.GGなどのサービスを利用するだけで済んでしまいます。しかし自分でRiot Games APIを使うことができれば、戦績を保存したり分析して統計を取ったりすることが可能になります。
これを機にPythonプログラミングに挑戦してみてはいかがでしょうか。Pythonの入門については以下のサイトが参考になると思います。