本日、『アークナイツ:エンドフィールド』が正式にサービス開始となった。少し時間を取ってプレイしてみた後、自分のガチャ分析アプリにガチャデータを取り込もうと考えた。
しかし、サービス開始直後ということもあり、ガチャデータをエクスポートできるツールが見当たらず、最終的には自分でこの機能を実装することにした。
以下では、その実装に至るまでの基本的な考え方をまとめている。同様の機能を実装したい方の参考になれば幸いだ。
URLに含まれる情報
まず、他のゲームと同様に、パケットキャプチャツールを用いることで、以下のようなガチャ履歴のAPIリンクを取得できる:
https://ef-webview.hypergryph.com/api/record/char?lang=zh-cn&seq_id={seqId}&pool_type={poolType}&token={token}&server_id={serverId}

ガチャ履歴リンク
キャラクタープール
キャラクタープールでは、主に pool_type と seq_id の2つのパラメータに注目する。
pool_type はガチャプールの列挙値であり、現時点では以下のいずれかを取る:
- 出発スカウト(初心者プール):
E_CharacterGachaPoolType_Beginner - 通常スカウト(恒常プール):
E_CharacterGachaPoolType_Standard - 限定スカウト(期間限定プール):
E_CharacterGachaPoolType_Special
また、『原神』や『鳴潮』などとは異なり、エンドフィールドのガチャ履歴リンクには通常 seq_id パラメータが付与されている。
これら2つの異なるプールのデータを観察すると、seq_id パラメータには以下のような特徴があることが分かる:
seq_id (seqId)はアカウント単位で管理される増加シーケンスであり、サブプールをまたいで共有される。ただし、キャラクタープールと武器プールではそれぞれ独立したシーケンスを持つ。同一タイプ内(すべてのキャラクタープール、またはすべての武器プール)では、サブプールを切り替えてもカウントはリセットされない。- 数値が大きいほど、より新しい記録である。
- リクエストに
seq_idを含めない場合、そのプールにおける最新5件の記録(最大のseqId)が返される。
これらの特性から、ゲーム内のガチャ履歴画面で「新しい順から古い順へページ送りする操作」は、seq_id を徐々に減少させていく処理に対応していることが分かる。
また、レスポンスには hasMore フラグが含まれており、これは現在取得している最小 seqId よりも古いデータが存在するか、すなわち次ページが存在するかを示している。
武器プール
武器プールのAPIはキャラクタープールとは異なり、2段階でデータを取得する必要がある。
武器プール一覧の取得
まず、以下のAPIでユーザーがガチャ履歴を持つ武器プール一覧を取得する:
武器プールは大きく以下の2種類に分類される:
- 限定武器プール:
poolIdがweponbox_* - 恒常武器プール:
poolIdがweaponbox_constant_*
余談だが、限定武器プールの
poolIdに含まれるweponはスペルミスと思われる。
武器ガチャ履歴の取得
各武器プールの履歴は、以下のAPIで取得する:
武器データのフィールドはキャラクターと若干異なり、以下が追加されている:
weaponId:武器IDweaponName:武器名weaponType:武器種別(例:E_WeaponType_Swordなど)
なお、武器プールにおける seq_id の仕様はキャラクタープールと同様であり、すべての武器サブプールで同一のシーケンスを共有する。
以上で、『アークナイツ:エンドフィールド』におけるガチャ履歴APIの仕様は概ね整理できた。
実装の基本方針
これらを踏まえると、有効なガチャ履歴URLを利用して、全プールのデータを取得する方法は以下のように整理できる。
キャラクタープール
- 任意の
pool_typeを指定し、seq_idを付与せずにリクエストを送信し、最新データを取得する。 - 取得結果の最小
seqIdをカーソルとして使用し、古い順にページングしていく。 hasMore === falseになる、またはデータが取得できなくなるまで繰り返す。- 別の
pool_typeに切り替えて同様の処理を行う。
武器プール
- 武器プール一覧APIを呼び出す。
- 各プールごとに履歴APIを巡回取得する。
poolIdにconstantを含むかどうかでプール種別を判定する。
コード実装
これで『アークナイツ:エンドフィールド』のすべてのプールの記録を取得する機能が実装できた。