如何记录锻炼

本文档介绍了如何使用 Fitness REST API 记录锻炼。

第 1 步:设置项目

您需要在 Google API 控制台中设置项目,并激活对 Fitness REST API 的访问权限,如开始使用中所述。

第 2 步:对应用进行身份验证

您的应用需要使用访问令牌对 Fitness API 的请求进行身份验证。要获取 访问令牌,则您的应用包含客户端专用凭据和访问权限范围。 如向请求授权中所述。

第 3 步:创建数据源

数据源表示特定类型的传感器数据源。插入到健身数据存储区的所有数据都必须与数据源相关联。您可以创建一次数据源,并在日后的会话中重复使用。

如需创建数据源,请使用以下参数提交经过身份验证的 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 可以是任何值。此示例中的数据源 ID 遵循合理的命名惯例 供您采用。如果数据仅由应用生成,则设备组件为可选组件。

如果请求成功,响应将是 200 OK 状态代码。

有关数据源的详情,请参阅 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-1411057556000000000

该网址包含数据源 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
    }
  ]
}
]
}

此请求会为上一步中的数据源创建一个包含一小时内三个心率数据点的数据集。

如果请求成功,响应将为 200 OK 状态代码。

有关数据集的更多信息,请参阅 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 方法
PUT
资源

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 健身会将这些数据点与此时段相关联。

如需详细了解会话,请参阅 Users.sessions 资源的 API 参考文档。

第 6 步:创建活动细分

activity 细分有助于您表示会话中的不同 activity。活动行程是指涵盖单个活动的时间段。例如,如果用户访问 对于一小时的跑步,您可以创建一个 running (8) 类型的活动细分,用于 整个小时。假设某位用户跑了 25 分钟,然后休息 5 分钟,然后又跑了 0.5 分钟 则可以创建三个连续的活动细分,类型为 running, 分别为 unknownrunning

创建活动细分受众群与添加任何其他数据点一样。创建活动 细分,首先要创建活动细分数据源,然后创建数据集并添加 活动细分数据指向它。

以下示例假设您已创建运动细分数据源,且数据源 ID 为“raw:com.google.activity.segment:1234567890:Example Fit:example-fit-hrm-1:123456”,在与心率读数相同的时间范围内创建了三个细分(跑步、休息和跑步):

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
    }
  ]
}
]
}

这些活动细分数据点会添加到专门创建的数据源中 用于处理活动片段您可以为每组细分受众群创建一个新的数据源 您应重复使用专用于特定类型的会话(如跑步)的会话。

会话用于指定活动类型,该类型应与用户参与的整体活动相符。即使用户在跑步时休息了一下,整个锻炼仍会被视为跑步。一般来说,会话的活动类型将与主要活动细分类型相匹配。

使用 unknown 活动类型 (4) 来指示用户正在休息,因为您可能并未在活动中 了解用户正在做什么:用户可能静止或拉伸、喝水等。如果您 知道用户没有移动,则可以使用 still (3)。

如需查看活动类型的详细列表,请参阅活动类型

摘要

在本教程中,您为数据类型和活动细分创建了数据源;你插入了 注入健身数据存储区的数据;您创建了活动细分 在锻炼过程中发生的活动;并且你插入了一个专题演讲 锻炼。

Google 健身会将您插入的数据以及该时间间隔内可用的数据与代表用户锻炼的会话相关联。