今回はPUBG APIを用いてプレイヤーのスタッツを計算する方法について解説していきます.大会やスクリムの得点計算が簡単になるかと思いますのでみなさんも是非活用してみてください.今回使用するのはpubg-pythonというライブラリになります.このライブラリを使用してプレイヤーのスクリムでのキル数などを計算してみましょう.
また,今回の記事ではPUBG APIにてアカウントを作成して自身のAPI Keyを取得していることを前提としているのでまだアカウントを作成していない方はこの記事からアカウントを作成してみてください.
【簡単】PUBGでスクリムのスタッツ計算をするためのPUBG API登録方法
まず,以下のコードが特定のプレイヤーネームの方のカスタムマッチでの戦績を取得するコードとなります.今回は現在Crest Gaming Xanaduに所属しているRuytvさんのカスタムマッチでの戦績について取得してみましょう.
そしてこの
この
そして
そして最後にスタッツの取得ですね。スタッツはこの
また、詳細な説明は下記にてそれぞれ記しています。
はじめに
それは2018年のPWIでのことでした.それまでPUBGはVtuberの叶くんの放送くらいしかみてなかったのですが,その叶くんとよくPUBGをプレイしていたZoo gamingの皆さんの出てる試合を見てみようとyoutubeを開きました.そしてZoo gamingの皆さんがあの大舞台でドン勝をとった瞬間に競技PUBGにどっぷりハマってしまいました.というわけで最近の趣味はスクリムを見たり配信を見たりすることになっています.そんな中自分でもPUBGのスタッツ計算とかやってみたいなーと思ってPythonでPUBG APIを使用する方法について調べてみました.そして今回は簡単にPUBG APIを使用したデータの取得方法について解説していきたいと思います.pubg-pythonを用いたデータの取得
これは有志の方が開発してくださったPUBG APIのPythonでのラッパーとなります.平たくいうとこれを使用することで簡単にPUBG APIの操作が可能となります.また,今回の記事ではPUBG APIにてアカウントを作成して自身のAPI Keyを取得していることを前提としているのでまだアカウントを作成していない方はこの記事からアカウントを作成してみてください.
【簡単】PUBGでスクリムのスタッツ計算をするためのPUBG API登録方法
まず,以下のコードが特定のプレイヤーネームの方のカスタムマッチでの戦績を取得するコードとなります.今回は現在Crest Gaming Xanaduに所属しているRuytvさんのカスタムマッチでの戦績について取得してみましょう.
from pubg_python import PUBG, Shard, Filter
api = PUBG('self_api_key', Shard.PC_KRJP)
players = api.players().filter(player_names=['Ruytv'])
for player in players:
for match in player.matches:
match_data = api.matches().get(match.id)
if match_data.game_mode == "esports-squad-fpp" and match_data.is_custom_match:
print("---------------------------------------")
print("Match Date : ", match_data.created_at)
print("Map Name : ", match_data.map_name)
for roster in match_data.rosters:
for participant in roster.participants:
if participant.name == "Ruytv":
print("Player Name : ", participant.name) # player name
print("Damage : ", participant.damage_dealt) # damage
print("Assist : ", participant.assists) # assist
print("Knock : ", participant.dbnos) # Down But Not Out = knocks
print("Kill : ", participant.kills) # kill
print("Survive : ", participant.time_survived) # survive
これを実行した結果が以下になります.(3月28日時点)---------------------------------------
Match Date : 2020-03-26T14:28:46Z
Map Name : Baltic_Main
Player Name : Ruytv
Damage : 18.449999
Assist : 0
Knock : 0
Kill : 0
Survive : 932.996
---------------------------------------
Match Date : 2020-03-26T13:52:23Z
Map Name : Baltic_Main
Player Name : Ruytv
Damage : 791.8879
Assist : 2
Knock : 2
Kill : 3
Survive : 1711.337
---------------------------------------
Match Date : 2020-03-26T13:20:26Z
Map Name : Savage_Main
Player Name : Ruytv
Damage : 0
Assist : 0
Knock : 0
Kill : 0
Survive : 890.719
---------------------------------------
Match Date : 2020-03-26T11:50:53Z
Map Name : Desert_Main
Player Name : Ruytv
Damage : 69.60826
Assist : 0
Knock : 0
Kill : 0
Survive : 593.008
---------------------------------------
Match Date : 2020-03-24T14:11:43Z
Map Name : Baltic_Main
Player Name : Ruytv
Damage : 0
Assist : 0
Knock : 0
Kill : 0
Survive : 705.594
---------------------------------------
Match Date : 2020-03-24T13:34:40Z
Map Name : Baltic_Main
Player Name : Ruytv
Damage : 57.550495
Assist : 0
Knock : 0
Kill : 0
Survive : 635.221
---------------------------------------
Match Date : 2020-03-24T13:04:39Z
Map Name : Savage_Main
Player Name : Ruytv
Damage : 171
Assist : 0
Knock : 2
Kill : 1
Survive : 715.332
---------------------------------------
Match Date : 2020-03-24T12:27:02Z
Map Name : Desert_Main
Player Name : Ruytv
Damage : 18.449999
Assist : 0
Knock : 0
Kill : 0
Survive : 262.942
---------------------------------------
Match Date : 2020-03-24T11:47:45Z
Map Name : Desert_Main
Player Name : Ruytv
Damage : 184.53076
Assist : 0
Knock : 1
Kill : 1
Survive : 1099.666
このような感じでプレイヤーの戦績を取得することができました.今回はスタッツ計算においてよく使用するであろうダメージ,アシスト数,ノック数,キル数,生存時間(sec )を取得してみました.それではコードの解説をしていきましょう.APIの宣言
まずはapiを使用する際の宣言部分についてみていきましょう.from pubg_python import PUBG, Shard, Filter
api = PUBG('self_api_key', Shard.PC_KRJP)
まずはライブラリのimportを最初の文にて行っています.次に使用するapiの設定ですがこの self_api_key
の部分を自身のAPI Keyに設定してください.また,このShardの部分はよくわかりませんが一応KRJPにしておきました.一応取得できているので大丈夫なんじゃないかなという.データ取得について
それでは一気にコードの中核となる部分を説明していきましょう.players = api.players().filter(player_names=['Ruytv'])
for player in players:
for match in player.matches:
match_data = api.matches().get(match.id)
if match_data.game_mode == "esports-squad-fpp" and match_data.is_custom_match:
print("---------------------------------------")
print("Match Date : ", match_data.created_at)
print("Map Name : ", match_data.map_name)
for roster in match_data.rosters:
for participant in roster.participants:
if participant.name == "Ruytv":
print("Player Name : ", participant.name) # player name
print("Damage : ", participant.damage_dealt) # damage
print("Assist : ", participant.assists) # assist
print("Knock : ", participant.dbnos) # Down But Not Out = knocks
print("Kill : ", participant.kills) # kill
print("Survive : ", participant.time_survived) # survive
まず players
という変数には player_names
でフィルターをかけたプレイヤー名に対応するオブジェクトが入るようになっています.このplayer_names
の部分に他のプレイヤーを入れることで検索するプレイヤーを増やすことができます.ただし,私の書いたプログラムでは例えばRuytvさんが出た試合に参加していた他のプレイヤー全員に対してもやろうとすれば操作することが可能ですのでスクリムでのスタッツ計算の時などはそのスクリムに参加していた一人だけを入れればいいのではないかと思います.そしてこの
players
という変数で最初のforループを作成しています.さらにこの players
から matches
という値を取得できます.この matches
には文字通りプレイヤーが参加してきた試合が入っているわけですが全ての試合を取得できるわけではなく私の場合は直近70試合ほどが取得できました.この
matches
から実際に試合情報を抜き出して match_data
変数を作成します.この match_data
に rosters
という値があるためスクリムの場合はスクリムに参加していた一人を指定すればそのマッチに参加していた全員に対してスタッツの取得が行えます. rosters
というのがマッチに参加していたプレイヤー全員を格納しているわけですね.そして
roster
の中の participants
という値から実際にプレイヤーのスタッツなどにアクセスすることができます.そして最後にスタッツの取得ですね。スタッツはこの
participants
の中の値にアクセスすることで取得できます。基本的に一般的なスタッツ計算のときに使用する値は上記のコードに示しています。また、詳細な説明は下記にてそれぞれ記しています。
プレイヤーネームの取得
participants
の中をfor文で順番に呼び出していく際のとある値を participant
としたときに participant.name
でプレイヤーネームを取り出すことができます。ダメージの取得
participants
の中をfor文で順番に呼び出していく際のとある値を participant
としたときに participant.damage_dealt
でプレイヤーが与えたダメージを取り出すことができます。dealtという単語がついているのはおそらくプレイヤーが受けたダメージなどと区別するためかと思われます。アシストの取得
participants
の中をfor文で順番に呼び出していく際のとある値を participant
としたときに participant.assists
でアシスト数を取り出すことができます。ノックの取得
participants
の中をfor文で順番に呼び出していく際のとある値を participant
としたときに participant.dbnos
でノック数を取り出すことができます。このdbnosという値についてですがこれはDown But Not Outsという単語の略となります。意味はダウンしたけどなくなっていないという意味です。これがいわゆるノックという概念になっていますね。なぜこんな名前なのかはちょっと疑問ですがこれでノック数がが取得できます。キルの取得
participants
の中をfor文で順番に呼び出していく際のとある値を participant
としたときに participant.kills
でキル数を取り出すことができます。生存時間の取得
participants
の中をfor文で順番に呼び出していく際のとある値を participant
としたときに participant.time_survived
で生存時間(sec)を取り出すことができます。
0 件のコメント :
コメントを投稿