[fitbit] 1. PythonでFitbit APIを使ってデータ取得 その1 アプリの登録とtokenの取得

はじめに

fitbitとは、心拍数、歩数や睡眠をトラッキングするために腕に着用するタイプのスマートウォッチです。日々の健康状態を把握するのにとても役立っています。ここでは、Fitbit APIを使ってデータを取得するために、アプリの登録からtokenの取得まで解説します。

手順

fitbit devにアクセス

Fitbit Development: Fitbit SDK
You'll fit in here. Using JavaScript, CSS, and SVG, developers now have a fast, easy way to build apps and clock faces f...

Manage(右上)からRegister An Appを選択します。

引用元, Fitbit SDK, https://dev.fitbit.com/

アプリの登録

空白部分を適当に埋めていきます。

・Application Name (アプリの名前) (なんでもいい)
・Description(アプリの説明) (なんでもいい)
・Application Website URL(アプリのsite) (なんでもいい)
・Organization(組織) (なんでもいい)
・Organization Website URL(組織のURL) (なんでもいい)
・Terms of Service URL(サービスのURL) (なんでもいい)
・Privacy Policy URL(プライバシーポリシーのURL) (なんでもいい)
・OAuth 2.0 Application Type(アプリのタイプ)  Personal
・Redirect URL (リダイレクトURL) http://127.0.0.1:8080/
・Default Access Type (データアクセスの種類) Read Only

OAuth 2.0 Application TypeはPersonalとすることで、個人データにアクセスできるようになります。
リダイレクトURLはOAuth 2.0認証時にhttp://127.0.0.1:8080/にリダイレクトさせるために、こうしておきます。

Default Access Typeはデータ読み込みしかしないのでRead Onlyとしました。

なおURLの欄は、有効ではないURLを入れるとエラーとなるので、http://localhostなどが良いと思われます。

入力後、I have read and agree to the terms of service のチェックボックスをチェックするとRegister ボタンが有効になるのでクリックします。

Client IDとClient Secretの取得

OAuth 2.0 Client IDとClient Secretが表示されるのでメモしておきます。

次にOAuth 2.0 tutorial pageをクリックして開きます。

OAuth 2.0 tutorial pageでtoken発行の準備

以下の画面が表示されると思います。

最初に1: AuthorizeのFlow typeをAuthorization Code Flowにします。

その下の5つの欄にはIDなどがすでに入っているのでそのまま利用します。

Select Scopesの9つのチェックボックス、Expires In(ms)もそのままでいきます。

次に、We’ve generated the authorization URL for you, all you need to do is just click on link below:と書かれた下のURL部分をクリックします。すると以下のページが出現するので、全て許可するにチェックを入れ、右下の許可ボタンをクリックします。

そうすると、下記ページになります。

この時のアドレスバーを見ると以下のようにcodeが出てきます。このコードの#の手前までをコピーします。

コピーしたコードを、1A Get Codeのcode:の欄に入力します。

そうすると下にcurlコマンドが出てくるので、これをコピーします。

トークンの発行

コピーしたcurlコマンドをターミナルまたはコマンドプロンプトで実行します。そうすると以下のような形式のtokenが発行されます。

{"access_token":"################",
"expires_in":"################",
"refresh_token":"################",
"scope":"heartrate weight sleep location profile nutrition social activity settings",
"token_type":"Bearer",
"user_id":"################"}

これをコピーし、token.txtとして保存しておきます。

curlコマンドがうまく動かない場合は、本ページ下部のコメント欄をご覧ください。

以下のその2に続きます。

[fitbit] 2. PythonでFitbit APIを使ってデータ取得 その2 fitbit-pythonによる睡眠データの取得とmatplotlibによる表示
fitbitとは、心拍数、歩数や睡眠をトラッキングするために腕に着用するタイプのスマートウォッチです。日々の健康状態を把握するのにとても役立っています。ここでは、アプリの登録からtokenの取得までを解説したその1の続きとして、Fitbit APIを使って睡眠データを取得してmatplotlibで表示するところまで解説します。

参考

Fitbit Development: Fitbit SDK
You'll fit in here. Using JavaScript, CSS, and SVG, developers now have a fast, easy way to build apps and clock faces f...
PythonからFitbit APIを使ってデータを取得する(OAuth2) - ブログを書くまでが
昨年2016年にFitbitデビューしました。APIを使って遊んでみたかったのですができていませんでした。 以前この記事でもFitbit APIを使ってみたい的なことを言ったのでこの度やってみました。 この手のやってみた系は日本や海外ブログ...
Pythonでfitbit APIから心拍数を取得してみよう! - Qiita
多機能ウエアラブル端末fitbit charge2!ひょんなことから最近話題のウエアラブル端末fitbit charge2をゲットしたので、これで遊んでみたいと思います。fitbitは公式でAP…

コメント

  1. 内山 優希 より:

    トークンの取得の際にコマンドプロントでcurlコマンドを実行したところ、各行でパッチが認識されませんと表示されるのですが、何かそれまでにセットしておく必要はあるのでしょうか。

    • sabopy より:

      curlはインストールされていますか?windowsのバージョンによっては最初から入ってない場合もあるそうです。

      • 内山優希 より:

        返信ありがとうございます。今標準で入っているかどうか確認をしてみます。また、pythonはこの時点でインストールしている必要がありますか。

      • 内山優希 より:

        curlが一定のバージョン以降は標準になっていると書いてあり、それ以降のバージョンだったのでインストールされていると思いますが、他に先ほど申したpythonのインストールややっておくことありますか。
        この記事に書かれている手順はすべて実行しました。

        • sabopy より:

          それではコマンドプロンプトを起動し、curl –versionと入力し、実行してみてください。
          curlがインストールされているならば、curlのバージョンが表示されるはずです。
          参考ページ https://www.adminweb.jp/blog/2021040902/

  2. 内山優希 より:

    参考ページを確認し、curl –versionを実行しましたが、記事に書いてある通りの表示が出ましたので、利用出来ています。
    また、curlコマンドが出ている部分がありますが、ここは全てコピーしてコマンドプロンプトに張り付けるのであっていますでしょうか。

    内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていませんと表示されるのは、各行の最初の–dataや–H,httpsなどです。

    • sabopy より:

      コピーして貼り付ける際に、改行してしまっているのかもしれません。
      一旦、メモ帳などに貼り付けて、改行してない状態で再度コピーして貼り付けてみてください。

  3. 内山優希 より:

    メモ帳で改行をしていない状態で張り付けたところ、
    curl: (6) Could not resolve host: Basic
    curl: (6) Could not resolve host: MjNCTEtZOjE4OGQ1NjAyMjcxYjk5NjZhN2U5NzRmZTgwMmI2ODVl’
    curl: (6) Could not resolve host: application
    curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) – 失効の関数は証明書の失効を確認 できませんでした。

    このようになりました。何か足りていないのでしょうか。何度もすみません。

  4. 内山優希 より:

    改行を消したところ、内部コマンドまたは外部コマンド、バッチファイルとして認識されていませんというエラーは消えましたので、別の原因であると考えています。

    資料に書かれている手順は全て行ったのですが、他に行うべきことがありましたら教えて頂けると幸いです。何度もお聞きしてしまいすみません。

  5. 内山優希 より:

    curlがインストールされているディレクトリ内で動かしているのですが、その場合-Xや-dataなどは使えますでしょうか。
    UTF-8モードには変更してあります。

    • sabopy より:

      curlコマンド自体は動いていて、認証がうまくいってない様子だと思います。認証コードの有効期間が604800 ms=10分くらいですので、時間切れかもしれません。認証コードの発行からやり直してみてはいかがでしょうか。

  6. 内山優希 より:

    やり直しを行ったところ、成功しました。何度もお聞きしてすみませんでしたありがとうございました!

  7. アツオ より:

    同様なトラブルが発生して、上記の事を試しても解決せず他に方法ご存じでしたらお教えいただければ幸いです。

    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (1) Protocol “\https” not supported or disabled in libcurl

    • sabopy より:

      “\https”の“\”が原因な気がします。
      “\https”を“https”にしてみてください。

  8. ryou より:

    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: Basic
    curl: (6) Could not resolve host: MjM4TFNCOjllOGQyZDBkOThkYWZjOTZjNmFjZTU3YWZiYzEzMTE2′
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: \
    curl: (6) Could not resolve host: application
    curl: (3) URL using bad/illegal format or missing URL

    このようなエラーが出てしまいます。対処法教えてほしいです。

  9. outsold より:

    curl: (6) Could not resolve host: Basic
    curl: (6) Could not resolve host: MjM4VFJMOmQxNTBkMmYxMDYzOWQwY2UwYjlhZDAxNTlkNThmM2Qy’
    curl: (6) Could not resolve host: application
    HTTP/1.1 401 Unauthorized
    Date: Fri, 04 Nov 2022 06:37:39 GMT
    Content-Type: application/json;charset=utf-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Vary: Origin,Accept-Encoding
    Cache-control: no-cache, private
    Set-Cookie: JSESSIONID=3F22B38FF6A17355E0AA8D1081277783.fitbit1; Path=/; Secure; HttpOnly
    Set-Cookie: fct=67147c81b3f64a92b785fe6af17e76f0; Path=/; Secure; HttpOnly
    WWW-Authenticate: Bearer realm=”api.fitbit.com”
    Content-Language: ja-JP
    X-Frame-Options: SAMEORIGIN
    Via: 1.1 google
    CF-Cache-Status: DYNAMIC
    Server: cloudflare
    CF-RAY: 764b57a32a8eafd3-NRT

    {“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}

    このようなエラーが出た場合の対処法を教えてほしいです。