Как записать тренировку

В этом документе описывается, как записать тренировку с помощью 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 относится к пользователю, чей токен доступа авторизует запрос.

Тело запроса
{
"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 . Необходимо указать идентификатор источника данных, и это может быть любое значение. Идентификатор источника данных в этом примере соответствует разумному соглашению об именах, которое вы можете принять. Компонент устройства является необязательным, если данные генерируются только приложением.

Если запрос успешен, ответом будет код состояния 200 OK .

Дополнительные сведения об источниках данных см. в справочнике по API для ресурса Users.dataSources .

Шаг 4. Добавьте точки данных

Вы используете наборы данных для вставки точек данных в фитнес-магазин. Набор данных — это набор точек данных из одного источника данных, ограниченный временем.

Чтобы создать набор данных и добавить к нему точки, отправьте аутентифицированный HTTP-запрос со следующими параметрами:

HTTP-метод
ПЛАСТЫРЬ
Ресурс

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

URL-адрес включает идентификатор источника данных, а также время начала и окончания набора данных в наносекундах.

Тело запроса
{
"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 .

Дополнительные сведения о наборах данных см. в справочнике по 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. Создайте сегменты активности

Сегменты действий помогают представлять различные действия в рамках сеанса. Сегмент действия — это временной сегмент, охватывающий одно действие. Например, если пользователь совершает часовую пробежку, вы можете создать сегмент активности типа running (8) на весь час. Если пользователь бегает 25 минут, делает перерыв 5, а затем бежит еще полчаса, вы можете создать три последовательных сегмента активности типов running , unknown и running соответственно.

Создание сегмента активности аналогично добавлению любой другой точки данных. Чтобы создать сегменты активности, сначала создайте источник данных сегмента активности, затем создайте набор данных и добавьте в него точки данных сегмента активности.

В следующем примере создаются три сегмента (бег, отдых и бег) в тех же временных интервалах, что и показания сердечного ритма, при условии, что вы уже создали источник данных сегмента активности, а идентификатор источника данных — «raw:com.google.activity.segment». 1234567890:Пример соответствия:example-fit-hrm-1:123456":

HTTP-метод
ПЛАСТЫРЬ
Ресурс
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), чтобы указать, что пользователь отдыхает, поскольку вы можете не знать, что он делает: он может стоять неподвижно или потягиваться, пить воду и т. д. Если вы знаете, что пользователь не движется, вы можете использовать Still (3).

Подробный список видов деятельности см. в разделе «Типы деятельности» .

Краткое содержание

В этом руководстве вы создали источники данных для типов данных и сегментов активности; вы вставили точки данных в фитнес-магазин; вы создали сегменты активности, чтобы представить различные действия, происходящие во время тренировки; и вы вставили сеанс, охватывающий всю тренировку.

Google Fit связывает введенные вами данные и любые другие данные, доступные за этот интервал времени, с сеансом, представляющим тренировку пользователя.