Jak nagrać trening

Ten dokument opisuje, jak zapisać trening przy użyciu API Fitness REST.

Krok 1. Skonfiguruj projekt

Musisz skonfigurować projekt w konsoli interfejsu Google API i aktywować dostęp do interfejsu Fit API typu REST, jak opisano w sekcji Pierwsze kroki.

Krok 2. Uwierzytelnianie aplikacji

Aplikacja musi uwierzytelnić żądania do Fitness API za pomocą tokena dostępu. Aby uzyskać token dostępu, aplikacja zawiera dane logowania właściwe dla klienta i zakres dostępu zgodnie z opisem w sekcji Autoryzowanie żądań.

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

Źródło danych reprezentuje źródło danych z czujników określonego typu. Wszystkie dane wstawione do sklepu fitness muszą być powiązane ze źródłem danych. Źródła danych możesz utworzyć raz i wykorzystać je do kolejnych sesji.

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

Metoda HTTP
OPUBLIKUJ
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 monitorowanie tętna z informacjami o typie aktywności (com.google.heart_rate.bpm). Musisz określić identyfikator źródła danych o dowolnej wartości. Identyfikator źródła danych w tym przykładzie jest zgodny z obowiązującą konwencją nazewnictwa. Komponent urządzenia jest opcjonalny, jeśli dane są generowane tylko przez aplikację.

Jeśli żądanie się powiedzie, odpowiedź zawiera kod stanu 200 OK.

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

Krok 4. Dodaj punkty danych

Możesz korzystać ze zbiorów danych, aby wstawiać punkty danych do sklepu fitness. Zbiór danych to zbiór punktów danych z jednego źródła danych ograniczonych czasowo.

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 zbiór danych z 3 punktami danych tętna w ciągu godziny dla źródła danych z poprzedniego kroku.

Jeśli żądanie się powiedzie, odpowiedź zawiera kod stanu 200 OK.

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

Wygeneruj prawidłowe sygnatury czasowe

Sygnatury czasowe w przykładzie powyżej są podawane nanosekundy. Do wygenerowania prawidłowych sygnatur czasowych możesz użyć tego skryptu Pythona:

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 wstawieniu danych do sklepu fitness możesz rozpocząć sesję, aby udostępnić dodatkowe metadane dla tego treningu. Sesje to przedział czasu, w którym użytkownicy wykonują aktywność fizyczną.

Aby utworzyć sesję dla 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

Wartość sessionId może być dowolna i musi być unikalna 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 i zrozumiała, ponieważ może ją podsumować inne aplikacje. Czas rozpoczęcia i zakończenia sesji jest podany w milisekundach (nie nanosekundach). Użyj tej samej nazwy pakietu w sesjach i źródłach danych. Dzięki temu dane będą bardziej spójne i będzie można je powiązać z aplikacją.

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

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

Krok 6. Utwórz segmenty aktywności

Segmenty aktywności pomagają reprezentować różne działania w ramach sesji. Segment aktywności to przedział czasu obejmujący pojedynczą aktywność. Jeśli na przykład użytkownik biega przez godzinę, możesz utworzyć segment aktywności typu running (8) obejmujący całą godzinę. Jeśli użytkownik będzie pracować przez 25 minut, będzie mieć 5 dni przerwy, a potem pół godziny aktywności, możesz utworzyć odpowiednio 3 segmenty aktywności typu running, unknown i running.

Proces tworzenia segmentu jest taki sam jak dodawanie innych punktów danych. Aby utworzyć segmenty aktywności, najpierw utwórz źródło danych segmentu aktywności, a następnie zbiór danych i dodaj do niego punkty danych o aktywności.

Poniższy przykład przedstawia 3 segmenty (bieganie, odpoczynek i bieganie) w tym samym okresie co odczyty tętna, przy założeniu, że źródło danych segmentu aktywności jest już utworzone, a identyfikator źródła danych to "raw:com.google.activity.segment:1234567890:przykładowe dopasowanie: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
    }
  ]
}
]
}

Te 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 musisz ponownie użyć tego samego źródła związanego z określonym typem sesji, np. biegiem.

Sesje określają typ działania, który powinien odpowiadać ogólnej aktywności użytkownika. Nawet jeśli użytkownik zrobi sobie przerwę podczas biegu, cały trening będzie nadal biegany. Ogólnie typ aktywności w sesji będzie odpowiadać typowi segmentu dominującego.

Typ aktywności nieznany (4) wskazuje, że użytkownik odpoczywa, ponieważ nie wie, co robi. Może to być nieruchomy ruch, rozciągać się, pić wodę itd. Jeśli wiesz, że użytkownik się nie rusza, możesz użyć nadal (3).

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

Podsumowanie

W tym samouczku udało Ci się utworzyć źródła danych dla typów danych i segmentów aktywności, punkty danych zostały wstawione do sklepu fitness, segmenty aktywności odzwierciedlające różne rodzaje aktywności podczas treningu oraz sesję obejmującą cały trening.

Google Fit łączy wstawione dane i inne dostępne dane z tego przedziału czasu z sesją reprezentującą trening użytkownika.