Java, ゲーム

Splatoon 2のAPIにアクセスするJavaライブラリ #Ika4J を公開しました

Ika4J

タイトルの通り、Splatoon 2のAPIにJavaからアクセスするためのライブラリです。商標的に問題になりそうなのでSplatoon4Jは避けました。

GitHubで公開中です。Maven Central Repositoryには現在のところありません。

https://github.com/yusuke/ika4j

機能

現在のところスケジュール取得のエンドポイント(https://app.splatoon2.nintendo.net/api/schedules)のみサポートしています。むこう24時間分のレギュラーマッチ、ガチマッチ、リーグマッチのステージ情報、ルール情報、各ルールの開始/終了日時を取得できます。

準備

最初のハードルが高いです。まずスプラトゥーン2で一回以上プレイした実績のあるニンテンドーアカウント、スマホ、PCが必要です。さらにmitmproxy等を使って、セッションクッキーであるイカスミセッション(iksm_session)を取得します。

参考:Splatoon2のAPIを叩いてみる

使い方

Scheduleクラスのコンストラクタにイカスミセッションを渡してnewします。
あとはgetterを呼び出すだけ。
現在のガチマッチ、リーグマッチのルールとステージ、今後24時間のガチマッチのルールをプリントするプログラムは以下の通り。

public class Main {
    public static void main(String[] args) {
        String iksm_session = "*************************";
        // https://app.splatoon2.nintendo.net/api/schedules の情報を取得
        ika4j.Schedules schedules = new ika4j.Ika4J(iksm_session).getSchedules();
        マッチ 現在のガチマッチ = schedules.get現在のガチマッチ();
        System.out.println(現在のガチマッチ.getルール名());
        System.out.println(現在のガチマッチ.getステージA());
        System.out.println(現在のガチマッチ.getステージB());
        マッチ 現在のリーグマッチ = schedules.get現在のリーグマッチ();
        System.out.println(現在のリーグマッチ.getルール名());
        System.out.println(現在のリーグマッチ.getステージA());
        System.out.println(現在のリーグマッチ.getステージB());

        for (マッチ マッチ : schedules.getガチマッチList()) {
            System.out.println(マッチ.getルール名());
            System.out.println(マッチ.get開始時間());
        }
    }
}

実行結果はこんな形になります。

ガチヤグラ
フジツボスポーツクラブ
ザトウマーケット
ガチアサリ
海女美術大学
チョウザメ造船
ガチヤグラ
2018-01-20T15:00
ガチホコバトル
2018-01-20T17:00
ガチヤグラ
2018-01-20T19:00
ガチエリア
2018-01-20T21:00
ガチホコバトル
2018-01-20T23:00
ガチアサリ
2018-01-21T01:00
ガチホコバトル
2018-01-21T03:00
ガチヤグラ
2018-01-21T05:00
ガチエリア
2018-01-21T07:00
ガチアサリ
2018-01-21T09:00
ガチホコバトル
2018-01-21T11:00
ガチヤグラ
2018-01-21T13:00

工夫した点

技術的にはなんらすごいことはしていません。練習がてらJava9のHttpClient APIを使ってみました。Splatoon2 APIのホストではSNI(Server Name Indication)という仕組みを使っているようで、HttpClient APIは素の状態ではアクセスできませんでしたのでStackoverflowで見つけた回避策を適用しています。Java 10では直っているようです。

今後の展望

スケジュール以外のエンドポイントサポートを追加せねばなりません。が、自分はスケジュールさえ取得できれば良いので満足しています。APIが荒削りなので改善したいですね。

注意事項

SplatoonのAPIは非公開のものです。無闇に負荷をかけたり、スプラトゥーンやSwitchの評判を落すりょうな使い方したりなど、任天堂に迷惑をかけるようなマネはやめましょう。