見出し画像

Oura Ring の値を API 経由で取得する

Oura Ring は指輪型の生体トラッキングデバイスです。特に睡眠の状態を精度高く計測してくれます。この記事では、API 経由で Oura Ring の Sleep、Activity、Readiness の値を 取得する方法についてまとめました。API  を利用するには以下の2通り方法があります。
1. Personal Access Token を使う
2. OAuth2 でユーザー認証する
この記事では 1. の、Personal Access Token を使った方法について見ていきます。OAuth2 のパターンは Oura Ring を使ったアプリケーションを開発する場合に必要になります。Personal Access Token については個人用途でのみ使えます。

Personal Access Token を作成する

以下の開発者用のページで Personal Access Token を作成します。
Oura Ring をスマホに同期する時に作成した Oura Ring アカウントでのログインが必要です。

右上の Create Personal Access Token  ボタンをクリックしてトークンを作成しましょう。こちらのトークンは作成した時にしか表示されないので、どこかにメモっておきます。このトークンが漏れた場合には、あなたの生体情報が他の人に簡単にわかってしまうので十分気をつけてください。

Oura Ring API を使ってみる

さて、あとは使ってみるだけです。API は 4 種類あるのでそれぞれ見ていきます。基本的にはアプリから見れる値と同じですが、より細かく見れたりするので便利です。
API は全て、https://api.ouraring.com から始まり、バージョン1を意味する /v1/ が付きます。また、返却形式は Json 形式です。

Personal Info API

個人情報を取得する API です。
https://api.ouraring.com/v1/userinfo?access_token=TOKEN

# 返却される値の例
{
  age: 27,
  weight: 63,
  height: 175,
  gender: "male",
  email: "XXXXXX@gmail.com"
}

Sleep Periods API

睡眠情報を取得する API です。start と end を指定することができます。
https://api.ouraring.com/v1/sleep?start=YYYY-MM-DD&end=YYYY-MM-DD&access_token=TOKEN

# 返却される値の例(実際の値を使っているので、まあまあ恥ずいっすね)
# ドキュメント: https://cloud.ouraring.com/docs/sleep
{
sleep: [
  {
    awake: 7800,
    bedtime_end: "2020-08-11T09:36:22+09:00",
    bedtime_end_delta: 34582,
    bedtime_start: "2020-08-11T00:53:22+09:00",
    bedtime_start_delta: 3202,
    breath_average: 15.25,
    deep: 6600,
    duration: 31380,
    efficiency: 75,
    hr_5min: [0,53,51,50,51,52,52, ..............],
    hr_average: 55.29,
    hr_lowest: 46,
    hypnogram_5min: "442214244222444422222111111222222221111111122222212132222234434422222222111144442222322224424443333333344",
    is_longest: 1,
    light: 13590,
    midpoint_at_delta: 18832,
    midpoint_time: 15630,
    onset_latency: 510,
    period_id: 1,
    rem: 3390,
    restless: 39,
    rmssd: 94,
    rmssd_5min: [0,96,127,160,128,114,121,108,115,97, ........],
    score: 64,
    score_alignment: 32,
    score_deep: 96,
    score_disturbances: 63,
    score_efficiency: 60,
    score_latency: 83,
    score_rem: 46,
    score_total: 66,
    summary_date: "2020-08-10",
    temperature_delta: 0.4,
    temperature_deviation: 0.4,
    temperature_trend_deviation: 0.31,
    timezone: 540,
    total: 23580
  },
  {
   ...
  }
]
}

Activity Summaries API

活動情報を取得する API です。start と end を指定することができます。
https://api.ouraring.com/v1/activity?start=YYYY-MM-DD&end=YYYY-MM-DD&access_token=TOKEN

# 返却される値の例
# ドキュメント: https://cloud.ouraring.com/docs/activity
{
activity: [
  {
    average_met: 1.4375,
    cal_active: 248,
    cal_total: 2233,
    class_5min: "000000000000000000000000000000000000000000000000000000000000000000000000032122222223323322032223222233222342442233222222233212222222333333333333333223332343310000000000000000034322333222323122222322232222222222222233322332234322222322000000000000000000000000000000000000000000000000000000",
    daily_movement: 4401,
    day_end: "2020-08-13T03:59:59+09:00",
    day_start: "2020-08-12T04:00:00+09:00",
    high: 0,
    inactive: 456,
    inactivity_alerts: 0,
    low: 202,
    medium: 28,
    met_1min: [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1, ........... ],
    met_min_high: 0,
    met_min_inactive: 14,
    met_min_low: 112,
    met_min_medium: 93,
    non_wear: 727,
    rest: 27,
    score: 59,
    score_meet_daily_targets: 1,
    score_move_every_hour: 100,
    score_recovery_time: 100,
    score_stay_active: 78,
    score_training_frequency: 1,
    score_training_volume: 85,
    steps: 6054,
    summary_date: "2020-08-12",
    target_calories: 450,
    target_km: 10,
    target_miles: 6,
    timezone: 540,
    to_target_km: 4.3,
    to_target_miles: 2.6,
    total: 230
  },
  {
   ...
  }
]
}

Readiness Summaries API

Radiness 情報を取得する API です。start と end を指定することができます。
https://api.ouraring.com/v1/readiness?start=YYYY-MM-DD&end=YYYY-MM-DD&access_token=TOKEN

# 返却される値の例
# ドキュメント: https://cloud.ouraring.com/docs/readiness
{
readiness: [
  {
    period_id: 0,
    score: 80,
    score_activity_balance: 99,
    score_hrv_balance: 86,
    score_previous_day: 88,
    score_previous_night: 48,
    score_recovery_index: 78,
    score_resting_hr: 100,
    score_sleep_balance: 74,
    score_temperature: 88,
    summary_date: "2020-08-13"
  },
  {
   ...
  }
]
}

あとは curl なりブラウザなりお好きな API クライアントからこれらの API を呼んじゃいましょう。

この辺のことは全部ドキュメントに書いてあるんで詳しく知りたい人は、こちらをどうぞ。ではでは。


この記事が気に入ったらサポートをしてみませんか?