【Oura】CLI & クライアントツールを作りました【API】
暇だったので、Goの勉強がてらOura CloudのAPI clientを作ってみました。
Ouraとはなんぞやという人は以下の記事をご覧ください。
【Oura Ring】最新のウェルネスリングの実力と購入方法 - pavlog
インストール
https://github.com/paveg/goura を cloneして以下のようにインストールします。
$ cd path/to/goura # go がなければ入れる、goenvを使っていれば以下 $ goenv install -s $ make install
これでインストールは完了です。 Homebrewでも公開しようと思いましたが面倒臭くて放置してます。
$ goura version goura version: v1.0.0, revision: 13fac6f
できること
基本OuraCloudに生えてるAPIをGoから扱えるようにしただけなので、特に特徴的なことはありません。
helpコマンドを参照すると全て書いてあるのでそちらを見れば良いですが、簡単に書きます。
$ goura --help goura is an Unofficial API client of Oura Cloud written in Go. Complete documentation is available at https://github.com/paveg/goura Usage: goura [command] Available Commands: activity Fetch activities configure Fetch your access_token help Help about any command readiness Fetch readinesses sleep Fetch sleep userinfo Fetch user information version Print the version number of goura Flags: -h, --help help for goura Use "goura [command] --help" for more information about a command.
OuraCloudのClientID及びClientSecretを事前に設置しておいてください。
AccessTokenの取得
$ goura configure
とするとaccess tokenを取得します。 Webブラウザでページが開くので自分のアカウントでログインを行い認証します。
正しく実行すれば、 .goura.yaml
がルートディレクトリ直下に作成されて情報が記述されます。
accesstoken: xxx clientid: yyy clientsecret: zzz redirecturl: http://localhost:8888
これは、他のAPIを叩く時に利用されます。
APIを叩く
叩けるAPIは以下の4つです。
- userinfo
- activity
- sleep
- readness
実際に叩くには以下のように行います。
$ goura userinfo | jq . 2019/09/21 13:54:59 HTTP Request: 200 OK { "age": 27, "weight": 54.2, "height": 170, "gender": "male", "email": "example@gmail.com", "user_id": "xxx" }
また日付の指定が可能なAPIでは以下のように指定を行います。
範囲指定も可能ですが、1日に絞って指定しています。
$ goura readiness -t 2019-02-02 | jq . 2019/09/21 13:57:07 HTTP Request: 200 OK { "readiness": [ { "summary_date": "2019-02-02", "period_id": 0, "score": 77, "score_previous_night": 67, "score_sleep_balance": 64, "score_previous_day": 96, "score_activity_balance": 92, "score_resting_hr": 77, "score_recovery_index": 100, "score_temperature": 98 } ] }
おわりに
とくにこれといった大きな学びはないですが、実際にGoでAPIクライアントを作るのはとても楽しかったです。
また cobra などのパッケージを利用して開発ができて、次回以降CLIツールを作るのがすごい敷居が下がりました。
すでに rubyでもAPIクライアントは作成していますが、 その機能の少なさゆえにやることがあまり思い浮かばず、Slackへ睡眠の質が悪い時だけ通知するなどしています。
もしよかったら使ってみてください(雑)。