Como gravar um treino

Este documento descreve como gravar um treino usando a API REST do Fitness.

Etapa 1: configurar um projeto

Configure um projeto no Console de APIs do Google e ative o acesso à API REST Fitness, conforme descrito em Primeiros passos.

Etapa 2: autenticar seu app

Seu app precisa autenticar solicitações para a API Fitness usando um token de acesso. Para receber o token de acesso, o app inclui credenciais específicas do cliente e um escopo de acesso, conforme descrito em Como autorizar solicitações.

Etapa 3: criar uma fonte de dados

Uma fonte de dados representa uma fonte de dados do sensor de um tipo específico. Todos os dados inseridos no armazenamento de condicionamento físico precisam estar associados a uma fonte de dados. É possível criar fontes de dados uma vez e reutilizá-las em sessões futuras.

Para criar uma fonte de dados, envie uma solicitação HTTP autenticada com estes parâmetros:

Método HTTP
POSTAR
Recurso

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

O ID do usuário do me se refere ao usuário cujo token de acesso autoriza a solicitação.

Corpo da solicitação
{
"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"
}

Essa solicitação cria uma fonte de dados que representa um monitor de frequência cardíaca que fornece dados de condicionamento físico do tipo com.google.heart_rate.bpm. Especifique o ID da fonte de dados, que pode ser qualquer valor. O código da fonte de dados neste exemplo segue uma convenção de nomenclatura razoável que você pode adotar. O componente do dispositivo será opcional se os dados forem gerados somente por um app.

Se a solicitação for bem-sucedida, a resposta será um código de status 200 OK.

Para mais informações sobre fontes de dados, consulte a referência da API para o recurso Users.dataSources.

Etapa 4: adicionar pontos de dados

Use conjuntos de dados para inserir pontos de dados no armazenamento de dados de condicionamento físico. Um conjunto de dados é uma coleção de pontos de dados de uma única fonte de dados limitada pelo tempo.

Para criar um conjunto de dados e adicionar pontos a ele, envie uma solicitação HTTP autenticada com estes parâmetros:

Método HTTP
PORTA
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

O URL inclui o ID da fonte de dados e os horários de início e término do conjunto de dados em nanossegundos.

Corpo da solicitação
{
"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
    }
  ]
}
]
}

Essa solicitação cria um conjunto de dados com três pontos de dados de frequência cardíaca dentro de uma hora para a fonte de dados na etapa anterior.

Se a solicitação for bem-sucedida, a resposta será um código de status 200 OK.

Para mais informações sobre conjuntos de dados, consulte a referência da API para o recurso Users.dataSources.datasets.

Gere carimbos de data/hora válidos

Os carimbos de data/hora do exemplo acima estão em nanossegundos. Para gerar carimbos de data/hora válidos, use o seguinte script 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))

Etapa 5: criar uma sessão

Agora que você inseriu dados no armazenamento de condicionamento físico, pode inserir uma sessão para fornecer metadados adicionais a este treino. As sessões representam um intervalo de tempo em que os usuários realizam uma atividade de condicionamento físico.

Para criar uma sessão para este treino, envie uma solicitação HTTP autenticada com estes parâmetros:

Método HTTP
PUTAR
Recurso

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

O sessionId é arbitrário e precisa ser exclusivo para todas as sessões associadas ao usuário autenticado.

Corpo da solicitação
{
"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
}

Escolha um nome de sessão legível e descritivo, já que ele pode ser usado por outros apps para resumir a sessão. Os horários de início e término das sessões são em milissegundos (não em nanossegundos). Use o mesmo nome de pacote para as sessões e fontes de dados, o que torna os dados mais consistentes e garante que a atribuição de dados seja vinculada ao seu app.

O intervalo de tempo especificado nesta sessão abrange os dados de frequência cardíaca inseridos anteriormente, portanto, o Google Fit associa esses pontos de dados a essa sessão.

Para mais informações sobre sessões, consulte a referência da API para o recurso Users.sessions.

Etapa 6: criar segmentos de atividade

Os segmentos de atividade ajudam você a representar atividades diferentes em uma sessão. Um segmento de atividade é um segmento de tempo que abrange uma única atividade. Por exemplo, se um usuário executar uma execução de uma hora, será possível criar um segmento de atividade do tipo running (8) para toda a hora. Se um usuário executar por 25 minutos, fizer uma pausa de 5 minutos e, em seguida, executar por outra meia hora, será possível criar três segmentos de atividade consecutivos dos tipos running, unknown e running, respectivamente.

Criar um segmento de atividade é igual a adicionar qualquer outro ponto de dados. Para criar segmentos de atividade, primeiro crie uma fonte de dados de segmentos de atividade. Em seguida, crie um conjunto de dados e adicione pontos de dados de segmentos de atividade a ele.

O exemplo a seguir cria três segmentos (em execução, em repouso e em execução) nos mesmos períodos das leituras de frequência cardíaca, supondo que você já tenha criado uma fonte de dados de segmento de atividade e que o ID da fonte de dados seja "raw:com.google.activity.segment:1234567890:Exemplo Fit:example-fit-hrm-1:123456":

Método HTTP
PORTA
Recurso
https://www.googleapis.com/fitness/v1/users/me/dataSources/
raw:com.google.activity.segment:1234567890/datasets/1411053997000000000-1411057556000000000
Corpo da solicitação
{
"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
    }
  ]
}
]
}

Esses pontos de dados de segmentos de atividade são adicionados a uma fonte de dados criada especificamente para processar segmentos de atividade. É possível criar uma nova fonte de dados para cada conjunto de segmentos, mas reutilize uma dedicada a um tipo específico de sessão, como a execução.

As sessões especificam um tipo de atividade, que deve corresponder à atividade geral do usuário. Mesmo se um usuário fizer uma pausa durante a corrida, o treino geral ainda será uma corrida. Em geral, o tipo de atividade da sessão corresponde ao tipo de segmento de atividade dominante.

Use o tipo de atividade desconhecido (4) para indicar que um usuário está descansando, porque talvez você não saiba o que o usuário está fazendo: ele pode estar parado ou se alongando, bebendo água e assim por diante. Se você souber que o usuário não está se movendo, use till (3).

Para ver uma lista detalhada de tipos de atividade, consulte Tipos de atividade.

Resumo

Neste tutorial, você criou fontes de dados para tipos de dados e segmentos de atividades, inseriu pontos de dados no armazenamento de condicionamento físico, criou segmentos de atividades para representar as diferentes atividades que ocorrem durante um treino e inseriu uma sessão que cobre todo o treino.

O Google Fit associa os dados inseridos e outros dados disponíveis nesse período a uma sessão que representa o treino do usuário.