まいにち右往左往

日記です。興味の範囲がバラバラで統一性がない日記です。だんだん備忘録っぽくなってきました。

iksm_sessionを自動更新したい その2

任天堂オンラインが有料化しましたね。
それに伴いスマホアプリが更新されました。

 

そして前の記事に書いたiksm_sessionを更新するためのトークンfの生成方法が変わったみたいです。

 halwind.hatenablog.com

 


少し残念ですが、仕組みを紐解いていくのも楽しくない訳ではないので、もう一回挑戦しなおしましょう。

 

なんて前向きな姿勢を取ろうとしたところで、一つ問題が発生しました。

今までmitmproxyを通して通信の確認をしていたのですが、アップデートしてからログが取れなくなりました。
通常のブラウザの通信は、proxyをとおってくれるのですが、アプリの通信はうまくいきません。

Android側でパケットキャプチャすると、SSL通信を復号しない状態ではキャプチャできます。
……できていると思います。
暗号化されてるので通信先もわからないですが。

これを復号化した状態でキャプチャしようとすると、通信が失敗します。

この状況からみると、mitmproxyの証明書が信頼されてないのかもしれません。
調べてみるとこのあたりかなーという情報がありました。

 

developers-jp.googleblog.com

 

もとからOSに組み込まれていた認証局にない証明書は信頼されない、という感じでしょうか。
であれば、OS側に追加してしまえばいいのかもしれません。
また遠回りになってしまいそうだなー。

Fitbit Versaを買いました

f:id:halnwind:20180926113958j:plain

 

だいぶ前に。
一か月ほど前に。

 

Charge HRを3つ使いつぶし、しばらくの間はトラッカーなしで生活をしていました。
トラッカーなしでの生活、それは数年前と同じ生活。
ですがいちど自分の活動の見える化を体験してしまうと、生活の基準が曖昧でどうにも居心地が悪いのです。

 

充分寝てるはずなのに眠い。
それは自分が思っているより寝ていないのではないか。

運動しているはずなのに体重が増える。
それは自分が思っているよりカロリーを消費していないのではないか。

 

可視化に慣れるとそういった些細なことがストレスになります。
そんな時に、Fitbitから新しいアクティビティトラッカーが出るというニュースがありました。
今まででしたら、そのまま予約をするところでしたが、最近金銭感覚がまともになってきたので、発売されてから一か月ほど悩んだのです。
それでも結局は買ってしまったわけですが。

 

その様に悩んで買ったVersaですが、Charge HRに比べてとても良いです。
大きな画面でランニング中もペースの確認や心拍数の確認ができます。
防水で、水泳の記録機能もついています。
睡眠のステージ、浅い眠りや深い眠りなど、をより詳細に記録できます。
まだ機能がONにされていませんが、溶存酸素濃度センサーもついています。
なにより、本体の画面上で電池残量が細かくわかります。

 

電池が4日しかもたないのがあれですが、まあ許容範囲内です。
むしろスマートウォッチとしてみるのであれば、4日も持つこと自体素晴らしいことなのです。

 

 

halwind.hatenablog.com

 

前にこんなブログを書いていましたが、もはやVersa一本でランニング中のペース、経過時間、距離、平均ペース、更には心拍数などすべて測定表示できるので、 スマートウォッチの存在意味がなくなってきたかもしれません。
GPSはついてないから、スマホはかならず持ち歩かないといけないですけどね。

 

このように十分満足していたのですが、ちょっと前にFitbit Charge 3が発表されましたね。


ショックでした。

 

機能的にはほぼ変わらないのですが、すでにスマートウォッチを使っているので、大きな画面は実は必要ありませんでした。
むしろ、電池が長くもった方が嬉しいのです。

 

買うのをもう三か月長く悩めばよかったなー、というところでしたが仕方ありません。
まだスマートウォッチをつけていない方には、最高におすすめなアクティビティトラッカーでした。

iksm_sessionを自動更新したい

 スプラトゥーン2の戦績を分析してウデマエを上げたい!ということで、イカリング2の情報をPython使って引き抜いていきます。
データを分析する前に、分析するデータが手元に欲しいですものね。

 

halwind.hatenablog.com

上の記事では 、iksm_sessionというキーを使って戦績を抜き出すところまでたどり着きました。
ほとんど先に手を付けておられた方のおかげです。
ですがこのiksm_ssession、一定時間で更新されてしまうようです。
せっかく情報を自動で集められるのに、数日ごとにキーを抜き出すのは面倒くさい。
どうせならキーの更新まで自動でやりたいなぁ、というのが今回の試みです。


iksm_sessionを抜き出したときと同様に、公式アプリの通信を一つ一つ確認し、Pythonで再現していきました。
数回アプリの通信を何回か確認してみると、最初の通信は固定のトークンを利用しているようなので、そこからスタートします。
こんな感じです。

 

通信先のURLやトークンの値は通信の中身から抜き出します。

url_idtoken = 'https://accounts.nintendo.com/connect/1.0.0/api/token'
data_idtoken = {
    'client_id': 'クライアントID',
    'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer-session-token',
    'session_token': 'セッショントークン'
}

 

データをセットしたらrequestsモジュール使ってデータを送り、返ってきた値から必要な値を取得します。

response=requests.post(url_idtoken, json=data_idtoken)
response.json()['id_token']

 

上記のコードで、多分固定されてるクライアントIDとセッションコードから、id_tokenを取得することができました。
次はこのid_tokenを使って別のトークンを取得し……と繰り返していけば、iksm_sessionにたどりつけそうです。

 

こんな感じで意外に順調に進んでいたのですが、途中でfというトークンが取得も再現もできない、という壁にあたりました。
64文字のトークンで、16進数ぽいので、何かをハッシュ化したものみたいです。
ただ関係しそうなトークンをいくつか適当な方法で計算しても同じ値がとれません。

 

これは大きな壁に突き当たったなーと思いながら、なにか情報はないかと探したら、このfトークンを計算して返すAPIを公開している方がいました。 

github.com

 

 やはりトークンfの値はアプリ内で計算しているようですね。
こちらのAPIを使って、iksm_sessionの値を更新するところまではできました。
が、テストしてからきちんと上のサイト読み返すと、API使うなら連絡しないといけないようです。

ちょっと時間を使ってトークンfの値を自力で計算できないか試してみて、ダメならこちらのAPIを使わせていただくようにしましょう。

 

トークンfについて調べていく中でしったのですが、これは途中で導入されたようでした。
多くの人が任天堂の非公開APIを叩きすぎたのでしょうかね。
どちらにしろ、無駄な負荷は与えないように注意しなければ。

 

2018年10月2日追記

任天堂オンラインの有料化に伴ってアプリも更新され、どうやらfの作成方法が変わったようです。やり直しだー。

Windows10とWSUS

そろそろWindows7のサポート期限が切れますね。
いまだにWindows7を使っているところも多いとは思いますが、サポートが切れる前にWindows10に移行しなければなりません。
そんな作業も、お仕事としてやっていたりするのです。

 

実際に入れ替える前のテストとして、Windows10の端末を1台、某所に設置していたのですが、最近どうもWindowsアップデートが当たっていないようです。
電源自体は入っていますし、アップデートの設定もドメインGPOから流しているので、間違ってはいない……はず。

 

 

それでまあ、いろいろと調べていたのですが、まず一番大きな原因はこれでした。

WSUS サーバーからの Windows 10 のアップグレードの配信 – Japan WSUS Support Team Blog

 

こちらの条件4ですね。
IISの設定の中で、".esd"形式のファイル配信が設定されていませんでした。
Windows Server2016からはデフォルトで設定されているようなのですが、残念ながら使用していたサーバーは2012R2。
追加の設定が必要でした。

で、うろ覚えになるのですが、こちらの設定が必要なのはWindows10のアップグレードのみ、だった気がします。
なのでWindows7や8.1からWindows10にするときのみに影響が出るかと思っていたのですが、どうやら大型アップデートも影響されるみたいです。

 

ついでに、こちらの設定も変えました。

WSUS クライアントのグループ ポリシー : その 3 – Windows 10 基本編 – Japan WSUS Support Team Blog

 

Windows10、アップデート元をWSUSに設定してもインターネット上からアップデートファイル持ってくるんですと。
防ぐためには、インターネット上のWindows Updateに接続しない、という設定が必要
なんかもうわかりにくいな、これ。

 

一応これでアップデートもかかるので、しばらく様子見です。
その他のポリシーもきっといろいろ見直さなければいけないんだろうなぁ。

GoProが欲しくなっている

GoPro Hero、安いですね。Hero 6の半額です。

 

登山に行く予定ができ、来月には初の船釣りの予定もあり、ロードバイクでのロングライドも計画している今、アクションカメラの買い時ではないでしょうか。

 

そんな言い訳を自分にしながら、アクセサリやその他必要なものをAmazonの欲しいものリストに突っ込む毎日を送っています。

 

実際のところ、廉価版ということで機能としてはGoPro Hero 6 や5にかなり劣っています。YouTubeで手振れ補正の差を見たときには、倍額突っ込んでもいいので6を買おうかかなり迷いました。
でもですね、GoProを欲しいと思った理由に、手振れの少ない動画が撮りたい!ってのがなかったのでHeroで十分かなと思いなおしました。

 

広角で動画や写真が撮れる。

ハウジングとか考えなくてもそのままで防水。

タイムラプスもまあとれる(0.5秒間隔のみ、らしいけど)。

小さくて軽い。

レンズカバーの替えも売ってるので、万が一傷がついても大丈夫。

1080pで60FPSの動画が撮れる。

 

これだけカバーしてて2万6千円はお得としか言いようがないでしょう。
ソニー信者の私でもうっかり心がなびいてしまいました。

 

 

なんて書いてたらですね、どうやらGoPro Hero 7が九月末に出るようですね。
たぶん7を買うお金はないのですが、6が安くなるのであれば話は別です。
Heroを買ってしまった後、6がまさかの4万円を切るようなことでもあれば、悔しくて夜も眠れなくなるに違いないです。

 

GoProの購入、本当は保留したい。
しかし、今月予定している登山は、槍ヶ岳というなかなか行けない山。
今週中に結論を出さねば!

イカリング2の情報収集準備

スプラトゥーン2で勝つために、まずは情報を収集することにしました。
スマホアプリのイカリング2ではゲーム画面以上に細かい情報がとれます。
これでも悪くないのですが、解析するにはパソコン上にデータが欲しいです.。

 

まあ考えることはみんな同じ、というわけで先人の方の知恵がネットにころがっていましたので、ひたすら参考にさせていただきます。

 

まずはこちらから。

 

qiita.com

 

一点、WindowsPythonを使っている場合には保存用のパスの指定でSyntax errorが起きてしまいましたが、パス上にある"\"がエスケープシーケンスとして使われているのが原因ですね。
Linuxで処理してれば問題ないところだったのですが、手元にちょうどいい端末がないので仕方ないです。
なのでパスをraw文字列として扱うためにr"パス"としました。

 

あとはimport codecsが抜けてましたので、追加します。

 

これで定期的にタスクスケジューラで実行すれば手で作業をしなくても戦績がどんどん溜まっていくのです。
50戦までは保存されることを考えると、2時間に一回の実行で十分でしょう。
それと、今のままだと一戦ごとに別ファイルになるので、これはデータベースにでも突っ込んでおくようにしてもいいかもしれません。

 

と、考えていたのですが記事を最後まで読むと、どうやらapiにつなげるためのキーは定期的に更新されるようですね。
まずはここをなんとかしないと。

WindowsにPythonを

まずはPythonの実行環境をパソコン上に作らねばなりません。
Raspberrypiでもいいかとは思ったのですが、画像認識にはマシンパワーをだいぶ使うのではないかという気がしたので、あえてWindowsを選択しました。

 

検索しながらまずはPython3をインストール。
そして使うモジュールによってはCコンパイラが必要だというのでVisual Studioインストーラ起動して、「C++によるデスクトップ開発」を選択し、インストール……って7GB近く使うのですか。

更によく見たらVisual Studioの機能選択の中にPythonも含まれているのですね。
これ、最初のPythonのインストールは不要で、VisualStudioで完結させたほうがスムーズなのではないでしょうか。一瞬そんな考えが頭をよぎりましたが、すでに公式サイトからPython3をインストールしてしまっているし、パスもとおしてしまってます。
Visual StudioからPythonを追加することで思わぬ不具合に出くわすかもしれません。
ここはおとなしくCコンパイラ関係のみをインストールするとしましょう。

 

……いや、調べなおしてたら公式からPythonインストールするよりAnacondaをインストールしたほうが環境も整うし便利っぽいですね。

 

さてどうしようか。
そもそもすでに先が見えないのに、環境構築に詰まって手がつかないというのは避けたい。一度公式から入れたPythonをアンインストールして、Anacondaをいれることにしましょう。

 

 

さてこれからの方針ですが、まず最初のゴールは撮影した動画からスプラトゥーン2のマップに移動経路を表示することでした。

ただ考えてみたのですが、これは結構難しそうです。

 

まずは勝敗の結果をひたすらデータとして集めるところから始めたいと思います。
いきなりの方向転換。

 

……これならRaspberrypiで十分だったな。