1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

体重や体脂肪率が毎日Google Spreadsheetに更新されるようになった

Last updated at Posted at 2020-09-02

いらん前書き

 オッサンになるって怖いです。いきなり家の中から4年も前にサービス終了したデバイスが見つかったりします。4年なんて言ったら、大学1年生にしてみたら高校どころか中学まで遡ってしまう、過去も過去、もはや黒歴史の時代ですよね。
 オッサンになるって怖いです。学生のころはあれだけ運動していたのに、仕事や家庭にかまけていたら、そういえば半年くらい運動していない・・・ということがすぐに起こります。そして、その生活を変えようとすると凄い努力が必要になってしまう。。

本編

 家の中からスマート体組成計(301SI)が発掘されました。一年に一度しか体重計に乗らない(健康診断)生活を改める良い契機なんじゃないかと思い、とりあえずハックしました。

処理の流れ

  1. https://healthcare.mb.softbank.jp/v3/web_login にSIMの電話番号とユーザーIDとパスワードをpostして、cookieにセッションIDをいただき、
  2. 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に張り付けて、深夜に回すように時間指定トリガーをかけたら完成
health.PNG

 健康になれますように。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?