Tworzenie funkcji związanych z odżywianiem i nawodnieniem za pomocą interfejsu Google Health API

Interfejs Google Health API udostępnia typy danych do śledzenia odżywiania i nawodnienia użytkownika. Te typy umożliwiają zapisywanie posiłków, odwoływanie się do produktów z bazy danych, śledzenie ilości składników odżywczych i zapisywanie spożycia płynów.

Obsługiwane typy danych

Tabela: typy danych o odżywianiu w interfejsie Google Health API
Typ danych Dostępne operacje
Zakres
Jedzenie
dataType: food
filter parameter: food
Typ rekordu: jedzenie
list, get .nutrition.readonly
.nutrition.writeonly
Jednostka miary jedzenia
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Typ rekordu: jedzenie

Zgodne urządzenia

list, get .nutrition.readonly
.nutrition.writeonly
Zapis nawodnienia
dataType: hydration-log
filter parameter: hydration_log
Typ rekordu: sesja
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Dziennik odżywiania
dataType: nutrition-log
filter parameter: nutrition_log
Typ rekordu: sesja

Zgodne urządzenia

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly

Dziennik odżywiania

Dziennik odżywiania zawiera informacje o jedzeniu zapisane przez użytkownika. Istnieją 2 sposoby tworzenia dziennika odżywiania, w zależności od rodzaju żywności:

  1. Zidentyfikowane jedzenie: ustaw pole food tak, aby odwoływało się do istniejącego zasobu Jedzenie. Pola nutrients, energy, energyFromFat, totalCarbohydrate, totalFat i foodDisplayName są wypełniane automatycznie na podstawie informacji o powiązanym produkcie spożywczym. Jest to preferowana metoda.

  2. Anonimowe jedzenie: ustaw ręcznie pole foodDisplayName i podaj wartości dla pól nutrients, energy, energyFromFat, totalCarbohydrate i totalFat. Dzienników odżywiania utworzonych na podstawie anonimowych produktów nie można edytować po utworzeniu.

Tworzenie dziennika odżywiania z anonimowymi produktami spożywczymi

Aby utworzyć wpis logu odżywiania, wyślij żądanie POST do punktu końcowego nutrition-log dataPoints.

Żądanie

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T18:00:00Z",
      "endTime": "2026-06-16T18:30:00Z"
    },
    "foodDisplayName": "Grilled Chicken Breast",
    "mealType": "DINNER",
    "energy": {
      "kcal": 165
    },
    "totalCarbohydrate": {
      "grams": 0
    },
    "totalFat": {
      "grams": 3.6
    },
    "nutrients": [
      {
        "nutrient": "PROTEIN",
        "quantity": {
          "grams": 31
        }
      },
      {
        "nutrient": "SODIUM",
        "quantity": {
          "grams": 0.074
        }
      }
    ],
    "serving": {
      "amount": 1.0
    }
  }
}

Odpowiedź

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/nutrition-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T18:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T18:30:00Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 18
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 18,
            "minutes": 30
          }
        }
      },
      "energy": {
        "kcal": 165
      },
      "totalCarbohydrate": {
        "grams": 0
      },
      "totalFat": {
        "grams": 3.6
      },
      "nutrients": [
        {
          "quantity": {
            "grams": 31
          },
          "nutrient": "PROTEIN"
        },
        {
          "quantity": {
            "grams": 0.074
          },
          "nutrient": "SODIUM"
        }
      ],
      "mealType": "DINNER",
      "serving": {
        "amount": 1
      },
      "foodDisplayName": "Grilled Chicken Breast"
    }
  }
}

Tworzenie wpisu w dzienniku odżywiania z rozpoznanym jedzeniem

Aby zapisać produkt spożywczy z bazy danych, ustaw pole food tak, aby odwoływało się do zasobu Food. Interfejs API automatycznie wypełnia pola dotyczące wartości odżywczych.

Żądanie

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "nutritionLog": {
    "interval": {
      "startTime": "2026-06-16T12:00:00Z",
      "endTime": "2026-06-16T12:30:00Z"
    },
    "food": "users/me/dataTypes/food/dataPoints/food-id",
    "mealType": "LUNCH",
    "serving": {
      "amount": 1.0,
      "foodMeasurementUnit": "users/me/dataTypes/food-measurement-unit/dataPoints/food-measurement-unit-id"
    }
  }
}

Odpowiedź

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/nutrition-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "nutritionLog": {
      "interval": {
        "startTime": "2026-06-16T12:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T12:30:00Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 12
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 12,
            "minutes": 30
          }
        }
      },
      "energy": {
        "kcal": 95
      },
      "energyFromFat": {
        "kcal": 3
      },
      "totalCarbohydrate": {
        "grams": 25
      },
      "totalFat": {
        "grams": 0.3
      },
      "nutrients": [
        {
          "quantity": {
            "grams": 4.4,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "DIETARY_FIBER"
        },
        {
          "quantity": {
            "grams": 19,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "SUGAR"
        },
        {
          "quantity": {
            "grams": 0.5,
            "userProvidedUnit": "GRAM"
          },
          "nutrient": "PROTEIN"
        }
      ],
      "mealType": "LUNCH",
      "serving": {
        "amount": 1,
        "foodMeasurementUnit": "users/me/dataTypes/food-measurement-unit/dataPoints/food-measurement-unit-id"
      },
      "food": "users/user-id/dataTypes/food/dataPoints/food-id",
      "foodDisplayName": "Apple"
    }
  }
}

Usuwanie zapisów dotyczących odżywiania

Aby usunąć co najmniej 1 wpis logu odżywiania, wyślij żądanie POST do metody batchDelete z nazwami zasobów wpisów, które chcesz usunąć.

Żądanie:

POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints:batchDelete
Authorization: Bearer access-token
Content-Type: application/json

{
  "names": [
    "users/me/dataTypes/nutrition-log/dataPoints/data-point-id"
  ]
}

Pola dziennika odżywiania

Pełną listę pól i opisów znajdziesz w NutritionLog.

Ilość energii

Reprezentuje pomiar energii w kilokaloriach (kcal). Szczegółowe informacje znajdziesz w artykule EnergyQuantity.

{
  "kcal": 165
}

Ilość wagowa

Reprezentuje pomiar wagi w gramach. Więcej informacji znajdziesz w artykule WeightQuantity.

{
  "grams": 27.3
}

Ilość składnika odżywczego

Reprezentuje konkretny składnik odżywczy i jego zmierzoną ilość. Więcej informacji: NutrientQuantity.

{
  "nutrient": "PROTEIN",
  "quantity": {
    "grams": 31
  }
}

Wartości składników odżywczych

Pełną listę obsługiwanych typów składników odżywczych znajdziesz w artykule Nutrient.

Obsługa

Reprezentuje informacje o porcji we wpisie logu odżywiania. Więcej informacji: Serving.

{
  "amount": 1.5
}

Wartości typu posiłku

Pełną listę obsługiwanych typów posiłków znajdziesz w artykule MealType.

Jedzenie

Jedzenie to typ danych tylko do odczytu, który reprezentuje produkt spożywczy w bazie danych żywności. Użyj operacji list i get, aby przeglądać dostępne produkty spożywcze i pobierać informacje o ich wartościach odżywczych.

Wyświetlanie listy produktów spożywczych

Aby wyświetlić listę produktów spożywczych, wyślij żądanie GET do punktu końcowego food dataPoints:

GET https://health.googleapis.com/v4/users/me/dataTypes/food/dataPoints
Authorization: Bearer access-token
Accept: application/json

Jednostka miary jedzenia

Jednostka miary jedzenia to typ danych tylko do odczytu, który reprezentuje jednostki miary używane do określania porcji jedzenia (np. „filiżanka”, „łyżka” lub „sztuka”).

Lista dostępnych jednostek miary

Aby wyświetlić listę dostępnych jednostek miary:

GET https://health.googleapis.com/v4/users/me/dataTypes/food-measurement-unit/dataPoints
Authorization: Bearer access-token
Accept: application/json

Zapis nawodnienia

Zapis nawodnienia reprezentuje płyn zapisany przez użytkownika. W przeciwieństwie do żywności, która odnosi się do bazy danych żywności i mierzy spożycie składników odżywczych lub energii, wpisy dotyczące nawodnienia śledzą konkretną objętość płynu spożytego w danym przedziale czasu.

Tworzenie zapisu nawodnienia

Aby utworzyć wpis logu nawodnienia, wyślij żądanie POST do punktu końcowego hydration-log dataPoints. Wszystkie ilości objętości są konwertowane na mililitry w formacie interfejsu API.

Żądanie

POST https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json

{
  "hydrationLog": {
    "interval": {
      "startTime": "2026-06-16T14:00:00Z",
      "endTime": "2026-06-16T14:00:01Z"
    },
    "amountConsumed": {
      "milliliters": 500,
      "userProvidedUnit": "FLUID_OUNCE_US"
    }
  }
}

Odpowiedź

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "hydrationLog": {
      "interval": {
        "startTime": "2026-06-16T14:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T14:00:01Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 14
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 14,
            "seconds": 1
          }
        }
      },
      "amountConsumed": {
        "milliliters": 500,
        "userProvidedUnit": "FLUID_OUNCE_US"
      }
    }
  }
}

Aktualizowanie zapisu nawodnienia

Aby zaktualizować wpis logu nawodnienia, wyślij żądanie PATCH do punktu końcowego hydration-log dataPoints z identyfikatorem punktu danych.

Żądanie

PATCH https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints/data-point-id
Authorization: Bearer access-token
Content-Type: application/json

{
  "hydrationLog": {
    "interval": {
      "startTime": "2026-06-16T10:00:00Z",
      "endTime": "2026-06-16T10:00:01Z"
    },
    "amountConsumed": {
      "milliliters": 500
    }
  }
}

Odpowiedź

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
    "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
    "dataSource": {
      "recordingMethod": "UNKNOWN",
      "application": {
        "googleWebClientId": "google-web-client-id"
      },
      "platform": "GOOGLE_WEB_API"
    },
    "hydrationLog": {
      "interval": {
        "startTime": "2026-06-16T10:00:00Z",
        "startUtcOffset": "0s",
        "endTime": "2026-06-16T10:00:01Z",
        "endUtcOffset": "0s",
        "civilStartTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 10
          }
        },
        "civilEndTime": {
          "date": {
            "year": 2026,
            "month": 6,
            "day": 16
          },
          "time": {
            "hours": 10,
            "seconds": 1
          }
        }
      },
      "amountConsumed": {
        "milliliters": 500
      }
    }
  }
}

Usuwanie zapisanych danych o nawodnieniu

Aby usunąć co najmniej 1 wpis logu nawodnienia, wyślij żądanie POST do metody batchDelete.

Żądanie

POST https://health.googleapis.com/v4/users/me/dataTypes/hydration-log/dataPoints:batchDelete
Authorization: Bearer access-token
Content-Type: application/json

{
  "names": [
    "users/me/dataTypes/hydration-log/dataPoints/data-point-id"
  ]
}

Odpowiedź

{
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.devicesandservices.health.v4.BatchDeleteDataPointsResponse",
    "dataPoints": [
      {
        "name": "users/user-id/dataTypes/hydration-log/dataPoints/data-point-id",
        "dataSource": {
          "recordingMethod": "UNKNOWN",
          "application": {
            "googleWebClientId": "google-web-client-id"
          },
          "platform": "GOOGLE_WEB_API"
        },
        "hydrationLog": {
          "interval": {
            "startTime": "2026-06-16T14:00:00Z",
            "startUtcOffset": "0s",
            "endTime": "2026-06-16T14:00:01Z",
            "endUtcOffset": "0s",
            "civilStartTime": {
              "date": {
                "year": 2026,
                "month": 6,
                "day": 16
              },
              "time": {
                "hours": 14
              }
            },
            "civilEndTime": {
              "date": {
                "year": 2026,
                "month": 6,
                "day": 16
              },
              "time": {
                "hours": 14,
                "seconds": 1
              }
            }
          },
          "amountConsumed": {
            "milliliters": 500,
            "userProvidedUnit": "FLUID_OUNCE_US"
          }
        }
      }
    ]
  }
}

Pola zapisu nawodnienia

Pełną listę pól i opisów znajdziesz w HydrationLog.

Liczba woluminów

Reprezentuje pomiar objętości w mililitrach. Więcej informacji znajdziesz w artykule VolumeQuantity.

{
  "milliliters": 250,
  "userProvidedUnit": "MILLILITER"
}

Wartości jednostek objętości

Pełną listę obsługiwanych jednostek objętości znajdziesz w artykule VolumeUnit. Typowe wartości to MILLILITER, LITER, CUP_US i FLUID_OUNCE_US.

Wytyczne

  • W miarę możliwości używaj rozpoznanych produktów spożywczych. Interfejs API automatycznie wypełnia pola dotyczące wartości odżywczych, co zmniejsza liczbę błędów i zapewnia spójność z bazą danych żywności.
  • Dzienników odżywiania utworzonych na podstawie anonimowych danych o żywności nie można aktualizować po utworzeniu. Jeśli chcesz poprawić anonimowy zapis dotyczący posiłku, usuń go i utwórz nowy.
  • W przeciwieństwie do anonimowych wpisów dotyczących odżywiania wpisy dotyczące nawodnienia są w pełni modyfikowalne i można je aktualizować po utworzeniu za pomocą żądania PATCH.
  • Wszystkie ilości składników odżywczych w tablicy nutrients są podane w gramach.
  • Pola energy i energyFromFat używają kilokalorii (kcal) jako jednostki miary.
  • Interfejs API konwertuje i przechowuje wszystkie ilości nawodnienia w mililitrach. Opcjonalne pole userProvidedUnit w VolumeQuantity jest używane tylko do wyświetlania dla użytkownika po stronie klienta.
  • Bezpośrednie żądania HTTP DELETE do poszczególnych punktów danych hydration-log zwracają błąd 404 Not Found. Aby usunąć te wpisy zasobów, użyj metody batchDelete.
  • Zapisy dotyczące nawodnienia używają krótkiego interwału, w którym startTime i endTime reprezentują okres, w którym płyn został spożyty.