ポケモンユナイトのマッチングとかを検証したかったけど諦めた

きっかけ的な
ぼくの周りでは相も変わらずポケモンユナイトで日々キレ散らかしているお友達がたくさんいる。
そんななか、公式からマッチングシステム変更のお知らせが発表され、


内部レートを基にしたマッチングシステム(カス)をやめて、シンプルにランクレートを基にしたマッチングになるらしいとのこと。
従来のマッチングシステムだと勝てば勝つほどカスと組まされる神システムだったおかげでレートが上がるほどつまらなくなるから1600いったらそのシーズンは引退してたけど、これなら頑張るほどにまともなやつと組めるっぽくてやっと面白くなりそう!!ってみんな思ってた。
実際のところ
俺はまだ全然やってないんだけど、身内Discordの意見では全然変わってないとのことで、変わらずみんなキレてる




でもこいつら脳味噌ちいかわおじさんたちだから、直近負けたときの印象だけで語ってそうなんだよなぁとか思い、
「やれやれ、俺がちゃんとデータを集計して実際のところがどうなのか検証してあげますか」と首をコキコキ鳴らしながらデータ集計するためのスクリプトを組もうと試みた。
試みた、ということは、できなかったということである。
おじさんたちのこと不当にバカにしてごめんなさい、と先に謝罪しておきます。
案① ユナイトAPIからスクレイピングする
ユナイトAPIという、プレイヤーの勝率やら直近の試合データが見れるサイトがある(APIという名前だけどウェブサイト)
一般的なサイトだったらページ表示時に一通りのデータを取ってきてるので、そっからタグとか指定していけば欲しいデータが取れる、
はずなんだけど、nuxt.jsを使ってるからなのか?ソースを表示してもそれっぽい値は見つからない。
※参考画像はランク1位の人のページ


バトル記録の詳細を開いたときにも通信が発生してるっぽくて、
ネットワークタブから落としたHARファイルでgrepしてみたんだけど、
それっぽいjsonとかも見当たらず、データをどこで取ってきてるのかがわからんかった。
恐らくユナイトAPI側でbotとかで集計されないように対策してるっぽいということで、別のアプローチを考えることに。
案② ゲームが呼んでるAPIとかを見つけてそっからデータ取得する
そもそもゲーム内でもユナイトAPIと同じ表を見ることができているので、
ユナイトAPIもゲーム側が普段呼んでいるAPI等を使ってデータを集計しているのだと思われる。
Fiddlerというツールを使えばゲーム内で行われた通信も見ることができ、
以前にもこれを使って、スト5でプレイヤー情報を見にいったときのapiを見つけて、それをもとにbotを作ったこともある。
ポケモンユナイトはSwitchとスマホアプリでも展開しているので、
アンドロイドエミュレータを使えばAPI見つけられそう!とは以前から思いつつ、このためにわざわざアンドロイドエミュレータインストールして、ユナイトインストールして、チュートリアル終わらせるのもめんどいなぁって思って後回しにしてた。
結果的にはアンドロイドでもSwitchと同じニンテンドーアカウントでログインできたからチュートリアルとかは不要だったんだけど、Bluestacks(アンドロイドエミュレータ)の通信をFiddlerで見る場合はプロキシを挟まないといけないっぽくて、ちょっとめんどくさそうでまたも別の方法を考えることに。
案③ LambdaをつかってユナイトAPIから動的にスクレイピングするAPIを作る
最終的にやりたいことが、
・各試合の勝敗結果
・そのときの自分のランクレート
・味方全員のランクレートと平均
・敵全員のランクレートと平均
をスプレッドシートに纏めたくて、
自分のPCから動かすスクリプトを作るより、自動実行できるかたちのほうが良いと思い、またGASだとSeleniumとか動的なスクレイピングツールは使えないみたいなのでLambdaでAPIを作ることに。
回りくどいけど確実に上手く行く方法でやるかー、と渋々手を動かし始めたものの案外上手くいかず、
linux環境でインストールしたものをアップロードする必要があるみたいで、dockerとか使わないとダメそうということがわかった。
結論:めんどい
ここまでにスゲー時間かけちゃって、こっから先上手くやれるか目処が立ってないのに、「はい!お前らは印象で語る雑魚でーす」っておじさんたちを煽れるデータが取得できるかもしくは「はい!お前は一生懸命時間を書けて無駄なデータを集めたバカ~~^^」って言われるかの2択にしかならなくて、勝ってもリターンが少ないからここらでやめておくことにした。
年末年始ヒマなお友達いたら、俺の夢を継いでくれ
余談
バトル記録から飛んだ際のURLだとランクレートがわからないんだけど、
名前で指定するとランクレートも見える。


仮に上手くデータ取れても、プレイヤー名で検索したページに飛ばなきゃいけないっぽい