はじめに
fitbitとは、心拍数、歩数や睡眠をトラッキングするために腕に着用するタイプのスマートウォッチです。日々の健康状態を把握するのにとても役立っています。ここでは、Fitbit APIを使ってデータを取得するために、アプリの登録からtokenの取得まで解説します。
手順
fitbit devにアクセス
Manage(右上)からRegister An Appを選択します。
アプリの登録
空白部分を適当に埋めていきます。
・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に続きます。
コメント
トークンの取得の際にコマンドプロントでcurlコマンドを実行したところ、各行でパッチが認識されませんと表示されるのですが、何かそれまでにセットしておく必要はあるのでしょうか。
curlはインストールされていますか?windowsのバージョンによっては最初から入ってない場合もあるそうです。
返信ありがとうございます。今標準で入っているかどうか確認をしてみます。また、pythonはこの時点でインストールしている必要がありますか。
curlが一定のバージョン以降は標準になっていると書いてあり、それ以降のバージョンだったのでインストールされていると思いますが、他に先ほど申したpythonのインストールややっておくことありますか。
この記事に書かれている手順はすべて実行しました。
それではコマンドプロンプトを起動し、curl –versionと入力し、実行してみてください。
curlがインストールされているならば、curlのバージョンが表示されるはずです。
参考ページ https://www.adminweb.jp/blog/2021040902/
参考ページを確認し、curl –versionを実行しましたが、記事に書いてある通りの表示が出ましたので、利用出来ています。
また、curlコマンドが出ている部分がありますが、ここは全てコピーしてコマンドプロンプトに張り付けるのであっていますでしょうか。
内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていませんと表示されるのは、各行の最初の–dataや–H,httpsなどです。
コピーして貼り付ける際に、改行してしまっているのかもしれません。
一旦、メモ帳などに貼り付けて、改行してない状態で再度コピーして貼り付けてみてください。
メモ帳で改行をしていない状態で張り付けたところ、
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) – 失効の関数は証明書の失効を確認 できませんでした。
このようになりました。何か足りていないのでしょうか。何度もすみません。
1.文字コードをUTF-8表示モードにする
2.シングルクォーテーションをダブルクォーテーション(’を”に)にする
でどうでしょうか?
参考ページ:
https://qiita.com/yamachan360/items/8c928738289cd518eec8
改行を消したところ、内部コマンドまたは外部コマンド、バッチファイルとして認識されていませんというエラーは消えましたので、別の原因であると考えています。
資料に書かれている手順は全て行ったのですが、他に行うべきことがありましたら教えて頂けると幸いです。何度もお聞きしてしまいすみません。
curlがインストールされているディレクトリ内で動かしているのですが、その場合-Xや-dataなどは使えますでしょうか。
UTF-8モードには変更してあります。
curlコマンド自体は動いていて、認証がうまくいってない様子だと思います。認証コードの有効期間が604800 ms=10分くらいですので、時間切れかもしれません。認証コードの発行からやり直してみてはいかがでしょうか。
やり直しを行ったところ、成功しました。何度もお聞きしてすみませんでしたありがとうございました!
おめでとうございます!
同様なトラブルが発生して、上記の事を試しても解決せず他に方法ご存じでしたらお教えいただければ幸いです。
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
“\https”の“\”が原因な気がします。
“\https”を“https”にしてみてください。
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
このようなエラーが出てしまいます。対処法教えてほしいです。
/etc/resolv.confのDNS設定がおかしい為に取得失敗しているようです。
下記ページを参考に対処してみてください。
https://qiita.com/bz0/items/7d4bac34c6cdada59b94
私も同様の内容でトークンを取得できません、DNSの設定がおかしいとのことですがどのような手段で参考ページのように修正できるのでしょうか。
やり方については、
https://teratail.com/questions/174236
http://dqn.sakusakutto.jp/2011/07/linux-resolvconf-nameserver.html
https://zenn.dev/supersatton/articles/deba9cbf8fa8a7
が参考になるかと思います。
viエディタを使うようです。
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}
このようなエラーが出た場合の対処法を教えてほしいです。