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

В этом документе описывается, как записывать тренировку с помощью Fitness REST API.

Шаг 1: Настройте проект

Вам необходимо настроить проект в Google API Console и активировать доступ к 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:Пример соответствия:пример-подгонки-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), чтобы указать, что пользователь отдыхает, поскольку вы можете не знать, что делает пользователь: он может стоять на месте или потягиваться, пить воду и т. д. Если вы знаете, что пользователь не двигается, вы можете использовать все еще (3).

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

Резюме

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

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