Jak nagrać trening

W tym dokumencie opisujemy, jak nagrywać trening za pomocą interfejsu Fitness API REST.

Krok 1. Skonfiguruj projekt

Musisz skonfigurować projekt w Konsoli interfejsów API Google i aktywować dostęp do interfejsu Fitness API REST zgodnie z opisem w sekcji Pierwsze kroki.

Krok 2. Uwierzytelnij aplikację

Aplikacja musi uwierzytelniać żądania wysyłane do interfejsu Fitness API przy użyciu tokena dostępu. Aby uzyskać token dostępu, aplikacja musi zawierać dane logowania właściwe dla klienta oraz zakres dostępu zgodnie z opisem w sekcji Autoryzacja żądań.

Krok 3. Utwórz źródło danych

Źródło danych jest źródłem danych z czujników określonego typu. Wszystkie dane wstawiane do sklepu fitness muszą być powiązane ze źródłem danych. Możesz utworzyć źródła danych raz i używać ich w kolejnych sesjach.

Aby utworzyć źródło danych, prześlij uwierzytelnione żądanie HTTP z tymi parametrami:

Metoda HTTP
POST
Zasób

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

Identyfikator użytkownika me odnosi się do użytkownika, którego token dostępu autoryzuje żądanie.

Treść żądania
{
"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"
}

To żądanie tworzy źródło danych reprezentujące pulsometr, który dostarcza dane o aktywności fizycznej typu com.google.heart_rate.bpm. Musisz podać identyfikator źródła danych. Może to być dowolna wartość. Identyfikator źródła danych w tym przykładzie jest zgodny z rozsądną konwencją nazewnictwa, którą możesz zastosować. Komponent urządzenia jest opcjonalny, jeśli dane są generowane tylko przez aplikację.

Jeśli żądanie zakończy się powodzeniem, odpowiedzią będzie kod stanu 200 OK.

Więcej informacji o źródłach danych znajdziesz w dokumentacji interfejsu API zasobu Users.dataSources.

Krok 4. Dodaj punkty danych

Za pomocą zbiorów danych możesz wstawiać punkty danych w centrum fitness. Zbiór danych to ograniczony czasowo zbiór punktów danych z jednego źródła danych.

Aby utworzyć zbiór danych i dodać do niego punkty, prześlij uwierzytelnione żądanie HTTP z tymi parametrami:

Metoda HTTP
PATCH
Zasób

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

Adres URL zawiera identyfikator źródła danych oraz czas rozpoczęcia i zakończenia zbioru danych w nanosekundach.

Treść żądania
{
"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
    }
  ]
}
]
}

To żądanie tworzy w ciągu godziny zbiór danych z 3 punktami danych o tętnie dla źródła danych z poprzedniego kroku.

Jeśli żądanie zakończy się powodzeniem, odpowiedzią będzie kod stanu 200 OK.

Więcej informacji o zbiorach danych znajdziesz w dokumentacji interfejsu API zasobu Users.dataSources.datasets.

Generuj prawidłowe sygnatury czasowe

Sygnatury czasowe w powyższym przykładzie są podane w nanosekundach. Aby wygenerować prawidłowe sygnatury czasowe, możesz użyć tego skryptu w Pythonie:

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))

Krok 5. Utwórz sesję

Po dodaniu danych do sklepu fitness możesz wstawić sesję, aby udostępnić dodatkowe metadane treningu. Sesje to przedziały czasu, w których użytkownicy wykonują ćwiczenia.

Aby utworzyć sesję do tego treningu, prześlij uwierzytelnione żądanie HTTP z tymi parametrami:

Metoda HTTP
PUT
Zasób

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

Pole sessionId jest dowolne i musi być unikalne we wszystkich sesjach powiązanych z uwierzytelnionym użytkownikiem.

Treść żądania
{
"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
}

Wybierz nazwę sesji, która będzie zrozumiała dla człowieka i powinna być opisowa, ponieważ inne aplikacje mogą jej używać do jej podsumowania. Czas rozpoczęcia i zakończenia sesji jest wyrażony w milisekundach (a nie w nanosekundach). Używaj tej samej nazwy pakietu w przypadku sesji i źródeł danych. Zapewni to spójność danych i zapewni połączenie atrybucji danych z Twoją aplikacją.

Przedział czasu określony w tej sesji obejmuje dane o tętnie wstawione wcześniej, więc Google Fit wiąże te punkty danych z tą sesją.

Więcej informacji o sesjach znajdziesz w dokumentacji interfejsu API zasobu Users.sessions.

Krok 6. Utwórz segmenty aktywności

Segmenty aktywności pomagają zaprezentować różne działania podczas sesji. Segment aktywności to przedział czasu, który obejmuje pojedynczą czynność. Jeśli np. użytkownik jedzie na godzinne biegi, możesz utworzyć segment aktywności typu running (8) na całą godzinę. Jeśli użytkownik będzie wyświetlać reklamy przez 25 minut, zrobić sobie 5 minut przerwy, a potem przebiec kolejne pół godziny, możesz utworzyć 3 kolejne segmenty aktywności odpowiednio o typach running, unknown i running.

Tworzenie segmentu aktywności odbywa się tak samo jak dodawanie każdego innego punktu danych. Aby utworzyć segmenty aktywności, najpierw utwórz źródło danych segmentu aktywności, a potem zbiór danych i dodaj do niego punkty danych segmentu aktywności.

Ten przykład tworzy trzy segmenty (bieganie, spoczynkowe i bieganie) w tych samych przedziałach czasowych co odczyty tętna, przy założeniu, że masz już utworzone źródło danych segmentu aktywności, a identyfikator źródła danych to „raw:com.google.activity.segment:1234567890:Przykład Fit:example-fit-hrm-1:123456”:

Metoda HTTP
PATCH
Zasób
https://www.googleapis.com/fitness/v1/users/me/dataSources/
raw:com.google.activity.segment:1234567890/datasets/1411053997000000000-1411057556000000000
Treść żądania
{
"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
    }
  ]
}
]
}

Punkty danych segmentu aktywności są dodawane do źródła danych, które zostało utworzone specjalnie do obsługi segmentów aktywności. Możesz utworzyć nowe źródło danych dla każdego zestawu segmentów, ale używać ponownie źródła dedykowanego dla określonego typu sesji, np. uruchomionej.

Sesje określają typ aktywności, który powinien odpowiadać całej aktywności użytkownika, którą wykonujesz. Nawet jeśli użytkownik robi sobie przerwę w trakcie biegu, cały trening to bieg. Ogólnie typ aktywności w tej sesji będzie zgodny z typem dominującego segmentu aktywności.

Użyj typu aktywności nieznany (4), aby zasygnalizować, że użytkownik odpoczywa, ponieważ możesz nie wiedzieć, co robi. Może to robić bez ruchu lub rozciąga się, pije wodę itd. Jeśli wiesz, że użytkownik się nie rusza, możesz użyć opcji still (3).

Szczegółową listę typów aktywności znajdziesz w artykule Typy działań.

Podsumowanie

W tym samouczku utworzyliśmy źródła danych dla typów danych i segmentów aktywności, utworzyliśmy punkty danych w sklepie fitness, utworzyliśmy segmenty aktywności reprezentujące różne rodzaje aktywności podczas treningu oraz wstawiliśmy sesję, która obejmuje cały trening.

Google Fit wiąże dodane przez Ciebie dane oraz inne dostępne dane z tego przedziału czasu z sesją reprezentującą trening użytkownika.