このドキュメントでは、Fitness REST API を使用してワークアウトを記録する方法について説明します。
ステップ 1: プロジェクトを設定する
スタートガイドで説明されているように、Google API Console でプロジェクトを設定し、Fitness REST API へのアクセスを有効にする必要があります。
ステップ 2: アプリを認証する
アプリは、アクセス トークンを使用して Fitness API へのリクエストを認証する必要があります。アクセス トークンを取得するために、クライアントの承認で説明されているように、アプリにはクライアント固有の認証情報とアクセス範囲が含まれます。
ステップ 3: データソースを作成する
データソースは、特定のタイプのセンサーデータのソースを表します。フィットネス ストアに挿入されるすべてのデータは、データソースに関連付ける必要があります。データソースを 1 回作成し、その後のセッションで再利用できます。
データソースを作成するには、次のパラメータを指定して認証済みの HTTP リクエストを送信します。
- HTTP メソッド
- 投稿
- リソース
https://www.googleapis.com/fitness/v1/users/me/dataSources
me
ユーザー ID は、アクセス トークンがリクエストを承認するユーザーを指します。- リクエスト本文
{ "name": "example-fit-heart-rate", "dataStreamId": "raw:com.google.heart_rate.bpm:1234567890:Example Fit:example-fit-hrm-1:123456", "dataType": { "field": [{ "name": "bpm", "format": "floatPoint" }], "name": "com.google.heart_rate.bpm" }, "application": { "packageName": "com.example.fit.someapp", "version": "1.0" }, "device": { "model": "example-fit-hrm-1", "version": "1", "type": "watch", "uid": "123456", "manufacturer":"Example Fit" }, "type": "raw" }
このリクエストにより、com.google.heart_rate.bpm
タイプのフィットネス データを提供する心拍数モニターを表すデータソースが作成されます。データソースの ID を指定する必要があります。任意の値を指定できます。この例のデータソース ID は、採用できる適切な命名規則に従います。データがアプリによってのみ生成される場合、デバイス コンポーネントは省略可能です。
リクエストが成功した場合、レスポンスは 200 OK
ステータス コードになります。
データソースの詳細については、API リファレンスの Users.dataSources
リソースをご覧ください。
ステップ 4: データポイントを追加する
データセットを使用して、フィットネス ストアにデータポイントを挿入します。データセットは、時間によって制限される単一のデータソースからのデータポイントの集合です。
データセットを作成してデータセットにポイントを追加するには、次のパラメータを指定して認証済みの HTTP リクエストを送信します。
- HTTP メソッド
- PATCH
- リソース
https://www.googleapis.com/fitness/v1/users/me/dataSources/
raw:com.google.heart_rate.bpm:1234567890:Example%20Fit:example-fit-hrm-1:123456/datasets/1411053997000000000-1411057556000000000URL には、データソース ID、ナノ秒単位でのデータセットの開始時間と終了時間が含まれます。
- リクエスト本文
{ "minStartTimeNs": 1411053997000000000, "maxEndTimeNs": 1411057556000000000, "dataSourceId": "raw:com.google.heart_rate.bpm:1234567890:Example Fit:example-fit-hrm-1:123456", "point": [ { "startTimeNanos": 1411053997000000000, "endTimeNanos": 1411053997000000000, "dataTypeName": "com.google.heart_rate.bpm", "value": [ { "fpVal": 78.8 } ] }, { "startTimeNanos": 1411055000000000000, "endTimeNanos": 1411055000000000000, "dataTypeName": "com.google.heart_rate.bpm", "value": [ { "fpVal": 89.1 } ] }, { "startTimeNanos": 1411057556000000000, "endTimeNanos": 1411057556000000000, "dataTypeName": "com.google.heart_rate.bpm", "value": [ { "fpVal": 62.45 } ] } ] }
このリクエストは、前の手順でデータソース用に、1 時間以内に 3 つの心拍数データポイントを含むデータセットを作成します。
リクエストが成功した場合、レスポンスは 200 OK
ステータス コードになります。
データセットの詳細については、API リファレンスの Users.dataSources.datasets
リソースをご覧ください。
有効なタイムスタンプを生成する
上の例のタイムスタンプはナノ秒単位です。有効なタイムスタンプを生成するには、次の Python スクリプトを使用します。
from datetime import datetime, timedelta import calendar def date_to_nano(ts): """ Takes a datetime object and returns POSIX UTC in nanoseconds """ return calendar.timegm(ts.utctimetuple()) * int(1e9) if __name__ == '__main__': print 'Current time is %d' % date_to_nano(datetime.now()) print 'Time 1 hour ago was %d' % date_to_nano(datetime.now() + timedelta(hours=-1))
ステップ 5: セッションを作成する
フィットネス ストアにデータを挿入したので、セッションを挿入して、このワークアウトの追加メタデータを提供できます。セッションは、ユーザーがフィットネス活動を行う時間を表します。
このワークアウトのセッションを作成するには、次のパラメータを指定して認証済みの HTTP リクエストを送信します。
- HTTP メソッド
- 入力
- リソース
https://www.googleapis.com/fitness/v1/users/me/sessions/sessionId
sessionId は任意で、認証されたユーザーに関連付けられたすべてのセッションで一意である必要があります。
- リクエスト本文
{ "id": "example-fit-1411053997", "name": "Example Fit Run on Sunday Afternoon", "description": "Example Fit Running Session", "startTimeMillis": 1411053997000, "endTimeMillis": 1411057556000, "application": { "name": "Foo Example App", "version": "1.0" }, "activityType": 8 }
他のアプリがセッションの概要を作成するために使用する可能性があるため、人が読める形式のセッション名を選択します。セッションの開始時間と終了時間はミリ秒単位(ナノ秒単位)です。セッションとデータソースに同じパッケージ名を使用します。これにより、データの整合性が高まり、データ アトリビューションがアプリに再びリンクされるようになります。
このセッションで指定された時間間隔は、以前に挿入された心拍数データを扱うため、Google Fit はこれらのデータポイントをこのセッションに関連付けます。
セッションの詳細については、API リファレンスの Users.sessions
リソースをご覧ください。
ステップ 6: アクティビティ セグメントを作成する
アクティビティ セグメントを使用すると、セッション内のさまざまなアクティビティを表すことができます。アクティビティ セグメントは、1 つのアクティビティをカバーする時間セグメントです。たとえば、ユーザーが 1 時間実行する場合、running
型のアクティビティ セグメント(8)を 1 時間にわたって作成できます。ユーザーが 25 分間実行し、5 分間休憩した後、さらに 30 分間実行した場合は、それぞれ running
、unknown
、running
タイプの 3 つの連続するアクティビティ セグメントを作成できます。
アクティビティ セグメントを作成する手順は、他のデータポイントを追加する場合と同じです。アクティビティ セグメントを作成するには、まずアクティビティ セグメントのデータソースを作成し、次にデータセットを作成してアクティビティ セグメントのデータポイントを追加します。
次の例では、アクティビティ セグメントのデータソースをすでに作成していて、データソース ID が "raw:com.google.activity.Segment:1234567890:Example Fit:example-fit-hrm-1:123456" の場合、心拍数の測定値と同じ時間枠で 3 つのセグメント(ランニング、安静、ランニング)を作成しています。
- HTTP メソッド
- PATCH
- リソース
https://www.googleapis.com/fitness/v1/users/me/dataSources/
raw:com.google.activity.segment:1234567890/datasets/1411053997000000000-1411057556000000000- リクエスト本文
{ "minStartTimeNs": 1411053997000000000, "maxEndTimeNs": 1411057556000000000, "dataSourceId": "raw:com.google.activity.segment:1234567890", "point": [ { "startTimeNanos": 1411053997000000000, "endTimeNanos": 1411053997000000000, "dataTypeName": "com.google.activity.segment", "value": [ { "intVal": 8 } ] }, { "startTimeNanos": 1411055000000000000, "endTimeNanos": 1411055000000000000, "dataTypeName": "com.google.activity.segment", "value": [ { "intVal": 4 } ] }, { "startTimeNanos": 1411057556000000000, "endTimeNanos": 1411057556000000000, "dataTypeName": "com.google.activity.segment", "value": [ { "intVal": 8 } ] } ] }
これらのアクティビティ セグメントのデータポイントは、アクティビティ セグメントを処理するために作成されたデータソースに追加されます。セグメントのセットごとに新しいデータソースを作成することもできますが、特定のタイプのセッション専用のもの(実行中など)を再利用する必要があります。
セッションはアクティビティのタイプを指定します。これは、ユーザーが関わっているアクティビティ全体と一致する必要があります。 ランニング中に休憩を取っても、ワークアウト全体はランニングです。一般に、セッションのアクティビティ タイプは、主要なアクティビティ セグメント タイプと一致します。
アクティビティ タイプが「不明」(4)の場合は、ユーザーが休んでいることを示してください。ユーザーが何をしているか、たとえばストレッチ、ストレッチ、水を飲んでいるかどうかなどを知ることができません。ユーザーが移動していないことがわかっている場合は、引き続き(3)を使用できます。
アクティビティ タイプの詳細なリストについては、アクティビティ タイプをご覧ください。
まとめ
このチュートリアルでは、データの種類とアクティビティ セグメントのデータソースの作成、フィットネス ストアへのデータポイントの挿入、ワークアウト中のさまざまなアクティビティを表すアクティビティ セグメントの作成、そしてワークアウト全体を含むセッションの挿入を行いました。
Google Fit は、ユーザーが挿入したデータと、その間隔で利用可能なその他のデータを、ユーザーのワークアウトを表すセッションに関連付けます。