on
Withings Bodyの計測結果を取得した
今年から筋トレを開始し、知人に勧められたWithings Body
を購入した。
Withings Body
https://www.withings.com/jp/ja/scales
- WiFi/Bluetoothに接続できるスマート体重計。
- 専用アプリをインストールすることで体重や体脂肪等のダッシュボードを見ることができる。
- 面白い点としてOAuth認証でWebAPIが公開されていて計測結果の情報に自由にアクセスできる。
APIでできること
計測した結果は殆どアクセスできる。 睡眠パッドやウォッチのAPIも含まれているため色々なエントリポイントがある。 api-reference
体重計の情報の取得に必要なAPIは以下。
API KeyとSecretの取得
API利用のためには以下からアプリを作成してAPI KeyとSecretの取得する必要がある。 https://oauth.withings.com/
Authentication Codeの取得
以下URLにGetでアクセスすることでauthentication code
を取得できる。
https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=`your_client_id`&redirect_uri=https%3A%2F%2Flocalhost&scope=user.info%2Cuser.metrics&state=demo
今回はCLIから利用を想定しているのでredirect_uri
にlocalhostに指定してリダイレクトされたURLパラメータからcode
を取得した。
code
の有効期限は30秒しかないので注意。
Access Tokenの取得
以下URLにPOSTでアクセスすることでAccess Token
を取得できる。
curl --data "action=requesttoken&grant_type=authorization_code&client_id=`your_client_id`&client_secret=`your_client_secret`&code=`上記で取得したauthentication_code`&redirect_uri=http://localhost/" 'https://wbsapi.withings.net/v2/oauth2'
action
とauthorization_code
は固定の文字列が入る。
Measure情報の取得
以下URLにPOSTでアクセスすることでMeasure情報
を取得できる。
curl --header "Authorization: Bearer `上記で取得したAccess Token`" --data "action=getmeas&meastype=1&category=1" 'https://wbsapi.withings.net/measure'
パラメータで指定できる項目が沢山あるが、体重取得時に使うパラメータは以下で良さそう。
meastype: 1 // Weight (kg)
category: 1 // for real measures
startdate: `unix time` // Measures' start date.
enddate: `unix time` // Measures' end date
体脂肪など他の情報も同時に取得したい場合はmeastype
の代わりにmeastypes
を使用使用する。
meastypes=1,6
RustでAPIのクライアントライブラリを作った
結構な頻度でトークンの再取得/リフレッシュを行う必要があり大変だったのでRustでAPIクライアントを作った。 https://github.com/yassun/withings-api
こちらを使って定期的にGetmeas
を呼ぶことでSlackやLineに最新の測定結果を通知することが可能になった。