created: 2020-04-16T11:41:10.000Z
WithingsAPIのトークンのを取得
トークンの取得
codeを取得
管理画面から CLIENT_ID
, CONSUMER_SECRET
を発行する
export CLIENT_ID=xxxx
export CONSUMER_SECRET=xxxxxxxx
export REDIRECT_URL=http://localhost:8000
export SCOPE=user.info,user.metrics,user.activity,user.sleepevents
export STATE=sakamoto # リクエストが重複しないようにするためのなんでもいい文字列
ブラウザで開いて アプリを許可する
open "https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=$CLIENT_ID&state=$STATE&scope=$SCOPE&redirect_uri=$REDIRECT_URL"
REDIRECT_URL
で定義したURLへリダイレクトされる
そのクエリパラメータに code
が入っている
http://localhost:8000/?code=xxxx&state=akira
トークンの取得
POSTしたらJSONが返ってくる
export CODE=xxxxxxxxxxxx
curl https://account.withings.com/oauth2/token \
-d 'grant_type=authorization_code' \
-d "client_id=$CLIENT_ID" \
-d "client_secret=$CONSUMER_SECRET" \
-d "code=$CODE" \
-d "redirect_uri=$REDIRECT_URL"
{
"access_token": "xxxxxxxxxx",
"expires_in": 10800,
"token_type": "Bearer",
"scope": "user.info,user.metrics,user.activity,user.sleepevents",
"refresh_token": "xxxxxxxxxxxxxxxxxxxx",
"userid": "xxxxxxxxxx"
}
トークンの更新
トークンは3時間で使えなくなる
refresh_tokenを使って新しいのをゲットする
curl https://account.withings.com/oauth2/token \
-d 'grant_type=refresh_token' \
-d "client_id=$CLIENT_ID" \
-d "client_secret=$CONSUMER_SECRET" \
-d "refresh_token=$REFRESH_TOKEN"
こんなスクリプトを書いてなんとかした
#!/usr/bin/env bash
# usage: $ direnv exec bin/refresh-token.sh
set -eux
cd $(dirname $0)/../
export REFRESH_TOKEN=$(cat token | jq -r .refresh_token)
curl -s https://account.withings.com/oauth2/token \
-d 'grant_type=refresh_token' \
-d "client_id=$CLIENT_ID" \
-d "client_secret=$CONSUMER_SECRET" \
-d "refresh_token=$REFRESH_TOKEN" | jq . | tee ./token