Apex Legendというバトルロイヤルゲームがあるのですが
(FPS系だと日本の中ではまあまあ流行ってる)
プレイヤーの戦績が見れるAPIが合ったので紹介します。
この記事で出来ること
https://apex.tracker.gg/
このサイトで見れるプレイヤーの戦績をjsonで取得できる
↓こんな感じでキル数、累計ダメージなどのサイトにあるデータが取得できます。
damage 17,385,579
season7Wins 11
season7Kills 350
︙
はじめに
今回使うのはTracker Networkという所のAPIです。
こちらは様々なゲームでプレイヤーの統計情報を見れる
有名なサービスです。(Apex以外にもFortnite, Valorant, Cod‥etc )
その有名サービスが、APIまで提供しているので使ってみました。
Tracker NetworkでAPIキーを発行
キーの発行にはログインが必要なので
会員登録していない人はまず登録してください。
https://tracker.gg
アプリケーションの作成
ログイン出来たらこちらにアクセスして、左上の「Create application」をクリック
https://tracker.gg/developers/apps
各種事項を入力して「CreateApp」をクリック
正しく作成できると画面にAPIキーが出てくるので、メモしておきます
APIの仕様
https://tracker.gg/developers/docs/titles/apex
こちらを見ると簡単なドキュメントがあります
取得できるデータの種類には
キャリア統計、マッチ履歴などいくつかあるようですが
とりあえずキャリア統計が取れれば良いと思うので、こちらの手順をを紹介します。
https://public-api.tracker.gg/v2/apex
/standard/profile/{platform}/{platformUserIdentifier}
{platform}:「origin」、「xbl」、「psn」のいずれか
{platformUserIdentifier}:Origin ID, Xbox Live gamertag, PSN ID
Pythonからリクエストを送る
Pythonでリクエストを送ったことが無かったのですが
調べてみた所getリクエストを送るならrequestsライブラリを使うのが良さそうでした
とりあえず仕様どおりにリクエストを送ってみます。
import requests response = requests.get('https://public-api.tracker.gg/v2/apex/standard/profile/psn/Daltoosh') print(response.status_code) # HTTPのステータスコード取得 print(response.text)
結果:
{“message”:”No API key found in request”}
APIキーがないと怒られてますね…
401エラーなのでリクエスト自体は問題なく送れているようですε-(´∀`*)
APIキーをgetパラメーターに付けて送ってみます。
import requests # my_api_keyには自分のAPIキーを入力 response = requests.get('https://public-api.tracker.gg/v2/apex/standard/profile/psn/Daltoosh' + '?TRN-Api-Key=my_api_key') print(response.status_code) # HTTPのステータスコード取得 print(response.text)
結果:
{“data”:{“platformInfo”:{“platformSlug”:”psn”,”platformUserId”:”dALTOOSH”,”platformUserHandle”:”dALTOOSH”,”platformUserIdentifier”:”dALTOOSH”
︙
200が返ってきたのでOKです!
戦績もjsonで返って来ていますね

しかし戦績データが見にくい (;゚Д゚)
jsonを整形
from pprint import pprint import json
をしてから
json.loads()したものをpprint()で表示すると見やすいです。
from pprint import pprint import json import requests # my_api_keyには自分のAPIキーを入力 response = requests.get('https://public-api.tracker.gg/v2/apex/standard/profile/psn/Daltoosh' + '?TRN-Api-Key=my_api_key') print(response.status_code) # HTTPのステータスコード取得 #print(response.text) # そのままだと見にくいのでjsonを整形 json = json.loads(response.text) pprint(json) # statsに主な戦績データが入ってるぽい pprint(json['data']['segments'][0]['stats'])
json[キー名][キー名][キー名] で目当ての情報まで辿れます!
また後述するコードで出てきますが、jsonのデータはfor文が使えるので
[‘stats’]で取得したデータをループさせて主要なデータを取り出せます。
良しなに関数化
処理をまとめて関数化してみます
そして、せっかくなのでRASさんの戦績を取得してみますw
from pprint import pprint import requests import json import sys TRN_URL = 'https://public-api.tracker.gg/v2/apex/standard' API_KEY = 'my_api_key' #自分のAPIキーを入力 # ユーザープロフィールを取得 def GetProfile(platform, playerId): sendUrl = TRN_URL + '/profile' sendUrl += '/' + platform sendUrl += '/' + playerId sendUrl += '?TRN-Api-Key=' + API_KEY print('sendUrl :', sendUrl) # http getリクエスト送信 response = requests.get(sendUrl) return response # レスポンスをチェック def CheckResponseStats(response): print("Response status code:", response.status_code) # HTTPのステータスコード取得 #200以外の場合は失敗 if response.status_code != 200: print(response.status_code, 'error') sys.exit() # jsonの戦績を表示 def DispStats(json): # statsに主な戦績データが入ってるぽい stats = json['data']['segments'][0]['stats'] #pprint(stats) for key, value in stats.items(): print(key, value['displayValue']) if __name__ == '__main__': response = GetProfile('origin', 'CR_Ras_LOG') CheckResponseStats(response) # そのままだと見にくいのでjsonを整形 json = json.loads(response.text) #pprint(json) DispStats(json)
結果:
Response status code: 200
level 1,688
kills 78,389
damage 17,385,579
pistolKills 67
shotgunKills 117
arKills 93
rankScore 15,707
season7Wins 11
season7Kills 350
最後に
いかがだったでしょうか。
今回はTRNが提供しているapex APIを解説しました。
最近の世の中は、探してみると意外なものがAPIで提供されていたりします。
WEBサービスを作る上でも、APIは欠かせないものになっているので
積極的に使っていきましょう!
コメント
質問失礼します。29行と45行に用いられている、DispStatsという関数はどのような役割を持っているのでしょうか。
すみません。先程質問させていただいたものです。先程の質問なのですが、自己解決しました。先程送らせていただいたコメントは無視してくださって結構です。お手数おかけしました。
承知しました!
今後とも、何かご不明点ありましたら、気軽に質問してください!!