【備忘録】Fitbit APIを使って自分の睡眠データを取得する
こんにちは。最近いつも眠いなーと感じてるいる sisii です。
でですね。私は Fitbit を愛用しているのですが、10 月から自分の睡眠時間の平均が通常より 30 分以上落ちているということがわかりました。
あぁー、これ改善しないとまずいなーと思いまして、ついでにそういえば Fitbit のデータって API とかで取得できるのかしら?ということで調べてみました。
という話の備忘録になります。(今回の記事は調べながらとりとめもなく書いてますのでまとまってなくてごめんなさい)
何がしたいの?
Fitbit のデータを API 的なもので取得したい。
前提
私は何もわかっていない。Fitbit のアカウントを持っているくらい。
やったこと。
色々飛ばしまして、ググると「Fitbit Web API」というものがでてきます。
これは Fitbit の公式の API のようです。私個人の希望だと「Fitbit が各個人のアクセストークン的なものをくれて、それを使うとサクッとデータを取得できる」そんな手軽なものを求めていたのですが、これ OAtuh2.0 を使ってどうのこうのということで、気軽に使うにはだいぶハードル高いなーという感想です。
目標として、疎通確認してデータを取得したいーという気持ちがあるので、とりあえず進みます。
Fitbit の Developer ページにログインします。
そしてアプリ登録画面でアプリを登録します。
後で編集できるっぽいので一旦アプリケーション type だけをPersonal
にしてあとはダミーの値で仮登録します。
続いて認証を頑張ります。
公式によるとこのへん使うと楽だよ!!とのことなので使わせて頂こうと思います。
選択肢が渋いなー、、、という感想。
ts で書くことになるかもー、とか覚悟していたのですが ts ないですし、普通に python があるので python で行きましょうかーという気持ち。
とうことでPython-fitbit →→→ 最終更新 4 年前、星 611 個。
んーー、、、もしプロダクトを作るぜ!とかの場合はちょっと別の選択肢を考える必要あるよねーと思いつつ動作確認だけだからいいかなという気持ちで進めることに。
適当なディレクトリにクローンしてきます。インストールしてみます。
$ git clone https://github.com/orcasgit/python-fitbit.git
$ cd python-fitbit
$ python -m venv .venv
$ source .venv/bin/activate
$ pip install -r requirements/base.txt
続いてQuickstart。
を見てみたのですが、↓ とのことで使うには CustomerKey と CustomerSecret が必要とのことですが、そんなものはない。。。
import fitbit
unauth_client = fitbit.Fitbit('<consumer_key>', '<consumer_secret>')
なんとなくこのライブラリー古くて現状に対応してなさそうだなーという肌感を感じだのでそっと閉じてOAuth 2.0 Tutorial
というのがあったのでそっちをやる。
$ cd python-fitbit.git
$ rm -rf python-fitbit # さらば!!
ということでこちら
Client ID
はアプリを作ったときに生成されたので、それを追加。
Application Type
はClient
PKCE Code Verifier
はGenerate
を押して生成。
State
もGenerate
を押して生成。
Scopes
は絞ってもいいですが一旦すべて選択。
Authorization URL
に URL がせっていされるので、そこにアクセスして認証します。
すると ↓ のような画面がでました。めっちゃお手軽でしたね!
ここでチェックをいれて許可
!!!
そしてここで問題発生。リダイレクト URL に適当な値をいれていたので認可フローが停止しました。
とおもったら fitbit さんそれを見越した神対応してました。
Step 3: Handle the Redirect
のテキストボックスにリダイレクトされた URL を貼り付ければよしなに cURL コマンドを生成してくれるとのこと。
そしてSUBMIT REQUEST
!! リクエストまでブラウザでやってくれるの楽だなーって思ってたら、↓ のようなエラーがでました。
{"errors":[{"errorType":"invalid_client","message":"Invalid authorization header format. The header was not recognized to be a valid header for any of known implementations or a client_id was not specified in case of a public client Received header = null. Visit https://dev.fitbit.com/docs/oauth2 for more information on the Fitbit Web API authorization process."}],"success":false}
header がイケてないとのこと。
https://dev.fitbit.com/docs/oauth2
を読めとのことなので読んで見る。
header にAuthorization
がないのが原因っぽいです。
そして値は<client_id>:<client_secret>
の文字列を Base64 にして入れてねとのこと。
ふむふむclient_secret
使うのね。
とここで振り返ってみると、一番上のApplication Type
をClient
に設定しちゃったけどこれServer
にしてClient Secret
をアプリ登録したときに生成されたやつ入れればよしなにうごくのでは?とやりなおしてみる。
🎉🎉 !! SUCCES !! 🎉🎉
わーいわーい、無事にアクセストークンとリフレッシュトークンが取得されました!!
Access User Data
でも、アプリ登録したときの内容が取得されました!
ということで睡眠情報をとってみる
curl -i -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
https://api.fitbit.com/1.2/user/-/sleep/date/2023-12-01.json
>{"sleep":....} # たくさんデータでたので割愛
わーいわーい。データ取れたー!!
まとめ
Fitbit の API をつかって個人のデータをとって見ました。
アプリさえ登録すればほぼ画面ポチポチでアクセストークンが取得できて、それを使えばよしなに Fitbit のデータが取得できそうでした。
色々使えそうでワクワクしますねー。
以上です。ありがとうございましたー。
感謝!
表紙の写真は UnsplashのKate Stone Mathesonが撮影した写真です。 ありがとうございます!