いらん前書き
オッサンになるって怖いです。いきなり家の中から4年も前にサービス終了したデバイスが見つかったりします。4年なんて言ったら、大学1年生にしてみたら高校どころか中学まで遡ってしまう、過去も過去、もはや黒歴史の時代ですよね。
オッサンになるって怖いです。学生のころはあれだけ運動していたのに、仕事や家庭にかまけていたら、そういえば半年くらい運動していない・・・ということがすぐに起こります。そして、その生活を変えようとすると凄い努力が必要になってしまう。。
本編
家の中からスマート体組成計(301SI)が発掘されました。一年に一度しか体重計に乗らない(健康診断)生活を改める良い契機なんじゃないかと思い、とりあえずハックしました。
処理の流れ
- https://healthcare.mb.softbank.jp/v3/web_login にSIMの電話番号とユーザーIDとパスワードをpostして、cookieにセッションIDをいただき、
- 1でもらったセッションIDをcookieにセットして https://healthcare.mb.softbank.jp/v3/web_api_get_home_summary に日付をつけてgetすると色々な身体のデータが取れる。
実装(Python)
requestを使ってpostとgetする。requestがセッションを張ってcookie等をよしなにしてくれるので、とても楽。一部を抜粋するとこんなかんじ。
session = requests.session()
login_url = 'https://healthcare.mb.softbank.jp/v3/web_login'
inputs = {"telno": "08012345678", "user_id": "1", "passwd": "0401",}
r = session.post(login_url, data=inputs)
if r.status_code == requests.codes.ok:
print(r.text)
実際のコードはこちら。
実装(Javascript)
Google Spreadsheetにスクリプトを仕込んで自動更新させるのに、一番相性が良いのはやっぱりjsでしょう。
UrlFetchApp.fetchを使うんだけど、Pythonのrequestみたいによしなにやってくれないので、けっこう気を遣うことになる。セッションをつなげるために、cookieを手動でセットする。getAllHeaders()['Set-Cookie']で取得した値には、Expired dateが入っているせいで、そのまま次のセッションのCookieに転用することができないので、丁寧に削ってあげる必要があった。あと、UrlFetchApp.fetchのオプションにヘッダを載せるときのハッシュラベルが"header"じゃなくて"headers"なことになかなか気づけなくて、しばらく時間を無駄にした。
なにはともあれ、できたスクリプトを↓みたいに一行目に項目名を記述したspreadsheetに張り付けて、深夜に回すように時間指定トリガーをかけたら完成。
健康になれますように。