【Python】Apexの戦績をjsonで取得できるAPIの紹介!

Apex Legendというバトルロイヤルゲームがあるのですが
(FPS系だと日本の中ではまあまあ流行ってる)

プレイヤーの戦績が見れるAPIが合ったので紹介します。

この記事で出来ること

https://apex.tracker.gg/
このサイトで見れるプレイヤーの戦績をjsonで取得できる

 

↓こんな感じでキル数、累計ダメージなどのサイトにあるデータが取得できます。

kills  78,389
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) 

 

結果:

401
{“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) 

 

結果:

200
{“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)

 

結果:

sendUrl : https://public-api.tracker.gg/v2/apex/standard/profile/origin/CR_Ras_LOG?TRN-Api-Key=my_api_key
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は欠かせないものになっているので
積極的に使っていきましょう!



コメント

  1. 初心者 より:

    質問失礼します。29行と45行に用いられている、DispStatsという関数はどのような役割を持っているのでしょうか。

  2. 初心者 より:

    すみません。先程質問させていただいたものです。先程の質問なのですが、自己解決しました。先程送らせていただいたコメントは無視してくださって結構です。お手数おかけしました。

タイトルとURLをコピーしました