gametools.networkを利用する API JSON Excelとの連携
オンラインゲームのplayer stats(統計情報)を得るサイトは色々ありますが、一つの例として

を利用しています。
最終的には必要な情報だけを得て、Excelのファイルに追記することを試みます。どんなAPIかは上のサイトを開いてみましょう。タイトルにあるようにBattlefieldシリーズの情報を得ますが、”過去”のシリーズはともかく、現行シリーズは公式データを引っ張ってきます。今回はBattlefield 1の筆者のプレイヤーデータを得てみましょうかね。まずプレイヤー名を晒しますが、”docnao”です。少し下へ行って、

ここから上から7番目をクリックすると、

こうなるので、”Try it out”してみましょうか。時々用意されているSwagger I/Fですね。
こんな感じでパラメータを入れて、“Execute”です。

Code=200なので成功です。自分でCurlしたいときは、Curlのコマンドラインを使います。Copy & Pasteしましょうか?
curl -X 'GET' \
'https://api.gametools.network/bf1/stats/?format_values=true&name=docnao&platform=pc&skip_battlelog=false&lang=en-us' \
-H 'accept: application/json'
Windowsのコマンドプロンプトから実行するならば、継続行が上手く機能しないので、1行で書いた方が吉です。Bashから実行しますけど、後余分な指定(curlのdefaultはGETなので、-X ‘GET’は不要)を省いて、
$ curl -s https://api.gametools.network/bf1/stats/?name=docnao
jqにパイプしてから表示すると、
$ curl -s https://api.gametools.network/bf1/stats/?name=docnao | jq .
{
"userId": 2250249294,
"avatar": "https://eaassets-a.akamaihd.net/battlelog/defaultavatars/default-avatar-36.png",
"userName": "docnao",
"id": 233859035,
"rank": 150,
"rankImg": "https://eaassets-a.akamaihd.net/battlelog/battlebinary/gamedata/Tunguska/103/47/Rank16-99d1708e.png",
"rankName": "Rank 150",
"skill": 113.97,
"scorePerMinute": 690.62,
"killsPerMinute": 0.26,
"winPercent": "31.82%",
"bestClass": "Medic",
"accuracy": "8.85%",
"headshots": "8.58%",
"timePlayed": "71 days, 20:55:39",
"secondsPlayed": 6209739,
"killDeath": 2.77,
"infantryKillDeath": 2.28,
"infantryKillsPerMinute": 0.22,
"kills": 27140,
"deaths": 9815,
"wins": 1387,
"loses": 2972,
"longestHeadShot": 323.19,
"revives": 8031.0,
"dogtagsTaken": 54,
"highestKillStreak": 28,
"roundsPlayed": 4359,
"awardScore": 23661500.0,
"bonusScore": 3773410.0,
"squadScore": 7678000.0,
"currentRankProgress": 50000000.0,
"totalRankProgress": 50000000.0,
"avengerKills": 3098,
"saviorKills": 3362,
"headShots": 2328,
"heals": 97087.0,
"repairs": 2535.0,
"killAssists": 2220.0
}
基本的な統計情報は得られていますよね。ここから必要な情報のみを抜き出せばよいわけです。他方各武器でのKill数とかの情報は、一個下のところです。

ここでExecuteします。
curl -X 'GET' \
'https://api.gametools.network/bf1/weapons/?format_values=true&name=docnao&platform=pc&skip_battlelog=false&lang=en-us' \
-H 'accept: application/json'
いわゆるエンドポイントが若干違うだけですね。結果はあまりにも長いので、途中を省略して、
{
"userId": 2250249294,
"avatar": "https://eaassets-a.akamaihd.net/battlelog/defaultavatars/default-avatar-36.png",
"userName": "docnao",
"id": 233859035,
"weapons": [
{
"weaponName": "Wex",
"type": "Field kit",
"image": "https://eaassets-a.akamaihd.net/battlelog/battlebinary/gamedata/tunguska/19/14/WEXFlammenwerfer-13f2b3af.png",
"timeEquipped": 782,
"kills": 5,
"killsPerMinute": 0.38,
"headshotKills": 0,
"headshots": "0.0%",
"shotsFired": 543,
"shotsHit": 45,
"accuracy": "8.3%",
"hitVKills": 9
},
{
"weaponName": "MG 08/15",
"type": "Field kit",
"image": "https://eaassets-a.akamaihd.net/battlelog/battlebinary/gamedata/tunguska/8/121/Maxim0815-0879ffaa.png",
"timeEquipped": 6895,
"kills": 33,
"killsPerMinute": 0.29,
"headshotKills": 8,
"headshots": "24.24%",
"shotsFired": 6062,
"shotsHit": 233,
"accuracy": "3.8%",
"hitVKills": 7.06
},
以下略
}
必要なweaponNameと対応するkillsだけ拾えばいいですかね。ちなみにWexというのは恐ろしい火炎放射器です。(凄く怖い、笑)あー、短縮版は、
$ curl -s https://api.gametools.network/bf1/stats/?name=docnao | jq .
C++ Builder CEのアプリではこの二つのAPIを使いますが、それは以降の記事で。
コメント