はすれこ!レポートブログ

ハースストーン手動対戦記録ツール「はすれこ!」http://hearthreco.com/ の情報やレポートを公開します(予定)

Track-o-bot APIの使い方

あらまし

 「はすれこ!」は、ハースストーン戦歴管理ツール「Track-o-bot」のAPI(Applicatoin Programming Interface)を利用して、Track-o-botに記録された戦歴を取り込んだり、逆に「はすれこ!」で登録した戦歴をTrack-o-botに送信する機能を実装しています。

 Track-o-botAPIを通じて提供される戦歴データは、例えば Vicious Syndicatevs Data Reaper Report のデータの情報源として使われているなど、現在のハースストーンコミュニティにおいて非常に重要なものとなっています。Track-o-botAPIを使うことで、自分自身の戦歴データを取得して加工したり、戦歴データを提供してハースストーンコミュニティに貢献する、といったことができるようになります。

 Track-o-botAPIの使い方については日本語の説明があまりないようなので、自分がわかっている範囲でまとめたものを公開します。

Track-o-bot APIを使うための準備

  • Track-o-botをインストールして起動する。
  • Track-o-botがタスクトレイに常駐するので、アイコンを右クリックして「Open Profile…」を選ぶ。
  • ブラウザが立ち上がり、Track-o-botのProfileページが表示されるので、右上の歯車アイコンをタップして「API」を選択する。

    f:id:fukaz55:20170928131707p:plain

  • 以下のような画面が表示されるので、tokenの下にある「Reveal」をクリックすると、tokenにランダムな文字列が表示される(Regenerateをクリックすると、新しいtokenが生成される)。

    f:id:fukaz55:20170928132151p:plain

    画面に表示されているAPIのURLの「YOUR_API_TOKEN」を、tokenに表示された文字列に置き換えたものが、あなたの戦歴を取得するためのURLとなる(token=YOUR_API_TOKENのままでは取れないので注意)。

Track-o-botから自分の戦歴を取得する(GET)

 上記の手順で生成されたURLに(GETメソッドで)アクセスすると、登録された対戦履歴がJSON形式で取得できる。

https://trackobot.com/profile/history.json?username=(Track-o-botが生成したユーザー名)&token=(APIのページで生成されたトークン)

 ※URLの後ろに「?page=ページ番号」を指定すると、更に前の履歴を取得できる。

 取得できるデータのサンプル:

  • 実際にはこのように整形されず、改行がないベタなJSONが返される。
  • カードIDのデータソースとして使われている「Hearhstone API」は、ハースストーンのカードやセットの情報を取得することができるAPI。カードの画像や能力やフレーバーテキストなどの情報を得ることができたり、カード検索等の機能が自分で実装可能になるなど、便利なサービスを提供している。

track-o-botに自分の戦歴を登録する(POST)

 track-o-botAPI経由で戦歴を登録したい場合、以下のURLにPOSTメソッドでアクセスする。その際、BASIC認証用のヘッダを送る必要がある。

https://trackobot.com/profile/results.json

 戦歴を登録するプログラムのサンプル:

  • 対戦時にプレイしたカードがわかっている場合は、渡すデータに "card_history" を追加することで、履歴およびプレイしたカードから推測されるデッキタイプがTrack-o-botに記録されるものと思われる(未確認)。
  • 登録に成功した場合、Track-o-botから「HTTP/1.1 201 Created」のリターンコードが返ってくるので、それでチェックを行う。
  • 登録に成功した時には、以下の様なJSONが返ってくる。
    失敗した場合、status(HTTPステータスコード)とerror(エラーメッセージ)が入ったJSONが返される。

 謝辞

 Track-o-botは、PCに常駐する戦歴管理ツールの中でも特に動作が軽量な素敵アプリですが、APIの形でデータを自由に提供しているところが何よりも素晴らしいと思います。
 感謝します(アンドゥインっぽく)。