もふふのはてな

メインのブログに書くほどではない雑多な記事を置く場所

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 APILoLのアカウントでサインインします。そしてトップページからxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxという形式のAPIキーをコピーしてどこかにメモしておきましょう。ただしキーを他人に知られないよう注意してください。

f:id:remin:20171104193547p:plain

モナー情報の取得

ここまでの作業で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という関数を使用しています。

まとめ

PythonLoLのデータを取得する基本的な方法は以上です。ラッパーライブラリがあるおかげで、APIを直接利用するよりも簡単にデータをダウンロードできました。

ただ戦績を見るだけならばOP.GGなどのサービスを利用するだけで済んでしまいます。しかし自分でRiot Games APIを使うことができれば、戦績を保存したり分析して統計を取ったりすることが可能になります。

これを機にPythonプログラミングに挑戦してみてはいかがでしょうか。Pythonの入門については以下のサイトが参考になると思います。