Cómo grabar un entrenamiento

En este documento, se describe cómo registrar un entrenamiento con la API de REST de Fitness.

Paso 1: Configura un proyecto

Debes configurar un proyecto en la Consola de APIs de Google y activar el acceso a la API de REST de Fitness, como se describe en Cómo comenzar.

Paso 2: Autentica tu app

Tu app necesita autenticar las solicitudes a la Fitness API a través de un token de acceso. Para obtener el token de acceso, tu app incluye credenciales específicas del cliente y un permiso de acceso, como se describe en Cómo autorizar solicitudes.

Paso 3: Crea una fuente de datos

Una fuente de datos representa una fuente de datos de sensores de un tipo determinado. Todos los datos insertados en el almacén de entrenamiento debe estar asociado a una fuente de datos. Puedes crear fuentes de datos una vez y y reutilizarlos para sesiones futuras.

Para crear una fuente de datos, envía una solicitud HTTP autenticada con estos parámetros:

Método HTTP
PUBLICAR
Recurso

https://www.googleapis.com/fitness/v1/users/me/dataSources

El ID de usuario me hace referencia al usuario cuyo token de acceso autoriza la solicitud.

Cuerpo de la solicitud
{
"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"
}

Esta solicitud crea una fuente de datos que representa un monitor de frecuencia cardíaca que proporciona entrenamiento datos de tipo com.google.heart_rate.bpm. Debes especificar el ID de la fuente de datos puede ser cualquier valor. El ID de la fuente de datos de este ejemplo sigue una convención de nombres razonable que puedes adoptar. El componente del dispositivo es opcional si solo una app genera los datos.

Si la solicitud se realiza correctamente, la respuesta es un código de estado 200 OK.

Para obtener más información sobre las fuentes de datos, consulta la referencia de la API para el Recurso Users.dataSources.

Paso 4: Agrega datos

Usas conjuntos de datos para insertar datos en la tienda de entrenamiento. Un conjunto de datos es un conjunto de datos puntos de una única fuente de datos limitada por tiempo.

Para crear un conjunto de datos y agregarle puntos, envía una solicitud HTTP autenticada con estos parámetros:

Método HTTP
PATCH
Recurso

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

La URL incluye el ID de la fuente de datos y las horas de inicio y finalización del conjunto de datos en nanosegundos.

Cuerpo de la solicitud
{
"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
    }
  ]
}
]
}

Esta solicitud crea un conjunto de datos con tres datos de frecuencia cardíaca en una hora para los datos fuente en el paso anterior.

Si la solicitud se realiza correctamente, la respuesta es un código de estado 200 OK.

Para obtener más información sobre los conjuntos de datos, consulta la referencia de la API para el Recurso Users.dataSources.datasets.

Genera marcas de tiempo válidas

Las marcas de tiempo del ejemplo anterior están en nanosegundos. Para generar marcas de tiempo válidas, puedes usar la siguiente secuencia de comandos de 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))

Paso 5: Crea una sesión

Ahora que insertaste los datos en la tienda de entrenamiento, puedes insertar una sesión para proporcionar metadatos adicionales para este entrenamiento. Las sesiones representan un intervalo de tiempo durante el cual los usuarios realizar una actividad física.

Si quieres crear una sesión para este entrenamiento, envía una solicitud HTTP autenticada con estos parámetros:

Método HTTP
PUT
Recurso

https://www.googleapis.com/fitness/v1/users/me/sessions/sessionId

El valor de sessionId es arbitrario y debe ser único para todas las sesiones asociada con el usuario autenticado.

Cuerpo de la solicitud
{
"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
}

Elige un nombre de sesión que sea legible y descriptivo, ya que es posible que lo usen otras apps para resumir la sesión. Las horas de inicio y finalización de las sesiones se expresan en milisegundos. (no nanosegundos). Usa el mismo nombre de paquete para tus sesiones y fuentes de datos. Esto hace que para que los datos sean más coherentes y garantiza que la atribución de datos se vincule con tu app.

El intervalo de tiempo especificado en esta sesión cubre los datos de frecuencia cardiaca insertados anteriormente, Google Fit asocia esos datos con esta sesión.

Para obtener más información sobre las sesiones, consulta la referencia de la API para la Recurso Users.sessions.

Paso 6: Crea segmentos de actividad

Los segmentos de actividad te ayudan a representar diferentes actividades dentro de una sesión. Un segmento de actividad es un segmento de tiempo que abarca una sola actividad. Por ejemplo, si un usuario visita para correr una hora, puedes crear un segmento de actividad del tipo running (8) para el una hora entera. Si un usuario corre durante 25 minutos, se toma un descanso durante 5 y, luego, corre otra mitad. por hora, puedes crear tres segmentos de actividad consecutivos de los tipos running, unknown y running, respectivamente.

Crear un segmento de actividad es lo mismo que agregar cualquier otro dato. Cómo crear una actividad segmentos, primero crea una fuente de datos de segmentos de actividad, luego, crea un conjunto de datos y agrega datos de segmentos de actividad a él.

En el siguiente ejemplo, se crean tres segmentos (en ejecución, en reposo y en ejecución) en los mismos períodos que las lecturas de la frecuencia cardíaca, suponiendo que ya creaste un segmento de actividad fuente de datos y el ID de la fuente de datos es "raw:com.google.activity.segment:1234567890:Example Fit:example-fit-hrm-1:123456":

Método HTTP
PATCH
Recurso
https://www.googleapis.com/fitness/v1/users/me/dataSources/
raw:com.google.activity.segment:1234567890/datasets/1411053997000000000-1411057556000000000
Cuerpo de la solicitud
{
"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
    }
  ]
}
]
}

Estos datos del segmento de actividad se agregan a una fuente de datos creada específicamente para manejar los segmentos de actividad. Podrías crear una nueva fuente de datos para cada conjunto de segmentos, pero deberías reutilizar una dedicada a un tipo particular de sesión, como correr.

Las sesiones especifican un tipo de actividad, que debe coincidir con la actividad general en la que participa el usuario. Incluso si un usuario se toma un descanso mientras corre, el entrenamiento general sigue siendo una carrera. En general, el El tipo de actividad de la sesión coincidirá con el tipo de segmento de actividad dominante.

Utilice el tipo de actividad unknown (4) para indicar que un usuario está descansando, ya que es posible que no lo haga. sepa lo que está haciendo el usuario: puede estar quieto o estirando, bebiendo agua, etc. Si saber que el usuario no se está moviendo, puedes usar still (3).

Para obtener una lista detallada de los tipos de actividades, consulta Tipos de actividad.

Resumen

En este instructivo, creaste fuentes de datos para tipos de datos y segmentos de actividad. insertaste los datos en la tienda de entrenamiento; creaste segmentos de actividad para representar los diferentes actividades que se realizan durante un entrenamiento; y, luego, insertaste una sesión que abarca entrenamiento.

Google Fit asocia los datos que insertaste y cualquier otro dato disponible para ese intervalo de tiempo con una sesión que representa el entrenamiento del usuario.