backstage

合唱音源の新着情報の舞台裏

【スプラトゥーン2】イカリング2の戦績データをPCブラウザで無理矢理閲覧する

スプラトゥーン2での戦績を閲覧できるイカリング2ですが、 Nintendo Switch Onlineというスマホアプリ内でしか見ることができません。

www.nintendo.co.jp

前作では普通のブラウザ上で閲覧できたので、戦績データをスクレイピングしてクラウドに保存していたのですが、アプリとなると専門外です。

そこで、プロキシを経由して無理矢理に中身を拝見しました。

アプリの通信内容を解析する

今回はプロキシサーバにmitmproxyを使って、イカリングを串焼きにしようと思います。

適当なCentOSホスト上にプロキシサーバを立てました。ファイアウォールの設定で8081番ポート(自由)を自分のIPアドレスに対して公開しておきます。

mitmproxyはpipでインストールできますが、mitmproxy公式のDockerイメージがあったので、それを使って立ち上げました。 良い時代になりました。

$ docker run --rm -it -p 8081:8080 mitmproxy/mitmproxy

プロキシサーバが立ち上がったら、Android/iOSでプロキシの設定をしておいて、 http://mitm.it にアクセスして証明書をインストールし、NintendoSwitchOnlineアプリを開きます。

mitmproxyの画面に https://app.splatoon2.nintendo.net/ というURLへのGETリクエストが出るので、中身を開きます。 iksm_session(イカスミ?)というキーのcookieがあるので、これを控えておきます。 この値を使えば、アプリ上のhttpリクエストが他の環境でも再現できます。いわゆるセッションハイジャックを自身のスマホに対して行います。

ここでPCに戻り、GoogleChromeEditThisCookieを使って、iksm_sessionに先程と同じ値を書き込んで、 https://app.splatoon2.nintendo.net/home にアクセスすればOKです。

f:id:s2terminal:20170723201214p:plain

無事にPCでイカリング2を閲覧できました。

開発者ツールのNetworkタブを覗いてみると、「records」「stages」「active」「timeline」という4つのJSONデータを取得しており、ここさえ叩くことができれば戦績のログデータが手に入ることが分かります。

認証処理を解析してiksm_sessionを手動生成することができれば、スクレイピングでデータを取得することができそうです。 (誰かやって下さい)

参考文献