توسعه تجربه‌های تغذیه و آب‌رسانی با Google Health API

‫Google Health API انواع داده را برای ردیابی تغذیه و آب‌رسانی کاربر ارائه می‌دهد. این انواع به شما امکان می‌دهند وعده‌های غذایی را ثبت کنید، به غذاها در پایگاه داده غذا ارجاع دهید، مقدار مواد مغذی را پیگیری کنید، و مصرف مایعات را ثبت کنید.

انواع داده‌های پشتیبانی‌شده

جدول: انواع داده‌های تغذیه Google Health API
نوع داده عملیات
دردسترس
حوزه
غذا
dataType: food
filter parameter: food
نوع گزارش: غذا
فهرست، دریافت .nutrition.readonly
.nutrition.writeonly
واحد اندازه‌گیری غذا
dataType: food-measurement-unit
filter parameter: food_measurement_unit
نوع گزارش: غذا

دستگاه‌های سازگار

فهرست، دریافت .nutrition.readonly
.nutrition.writeonly
گزارش آب‌رسانی
dataType: hydration-log
filter parameter: hydration_log
نوع ضبط: جلسه
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
گزارش تغذیه
dataType: nutrition-log
filter parameter: nutrition_log
نوع ضبط: جلسه

دستگاه‌های سازگار

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

گزارش تغذیه

«گزارش تغذیه» نشان‌دهنده غذایی است که کاربر ثبت کرده است. دو روش برای ایجاد گزارش تغذیه وجود دارد که به نوع غذا بستگی دارد:

  1. غذای شناسایی‌شده: فیلد food را برای ارجاع به منبع غذا موجود تنظیم کنید. فیلدهای nutrients،‏ energy،‏ energyFromFat،‏ totalCarbohydrate،‏ totalFat، و foodDisplayName به‌طور خودکار از غذای ارجاع‌شده پر می‌شوند. این روش ترجیحی است.

  2. غذای ناشناس: فیلد foodDisplayName را به‌صورت دستی تنظیم کنید و مقادیر nutrients، energy، energyFromFat، totalCarbohydrate، و totalFat را ارائه دهید. گزارش‌های تغذیه ایجادشده از غذای ناشناس پس‌از ایجاد قابل‌ویرایش نیستند.

یک گزارش تغذیه با غذای ناشناس بساز

برای ایجاد ورودی گزارش تغذیه، درخواست POST را به نقطه پایانی nutrition-log dataPoints ارسال کنید.

درخواست

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

پاسخ

{
  "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"
    }
  }
}

ایجاد گزارش تغذیه با غذای شناسایی‌شده

برای ثبت کردن غذا از پایگاه داده غذا، فیلد food را برای ارجاع به منبع «غذا» تنظیم کنید. میانای برنامه‌سازی کاربردی فیلدهای تغذیه‌ای را به‌طور خودکار پر می‌کند.

درخواست

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"
    }
  }
}

پاسخ

{
  "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"
    }
  }
}

حذف گزارش‌های تغذیه

برای حذف یک یا چند ورودی گزارش تغذیه، درخواست POST را به روش batchDelete با نام منبع ورودی‌هایی که باید حذف شوند ارسال کنید.

درخواست:

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"
  ]
}

فیلدهای گزارش تغذیه

برای مشاهده فهرست کامل فیلدها و توضیحات، به NutritionLog مراجعه کنید.

مقدار انرژی

نشان‌دهنده اندازه‌گیری انرژی است که برحسب کیلوکالری (kcal) اندازه‌گیری می‌شود. برای جزئیات، به EnergyQuantity مراجعه کنید.

{
  "kcal": 165
}

مقدار وزن

نشان‌دهنده اندازه‌گیری وزن، به گرم. برای جزئیات، WeightQuantity را ببینید.

{
  "grams": 27.3
}

مقدار ماده مغذی

نشان‌دهنده ماده مغذی خاص و مقدار اندازه‌گیری‌شده آن است. برای جزئیات، به NutrientQuantity مراجعه کنید.

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

مقادیر مواد مغذی

برای فهرست کامل انواع مواد مغذی پشتیبانی‌شده، به Nutrient مراجعه کنید.

خدمات رسانی

نشان‌دهنده اطلاعات وعده غذایی برای ورودی گزارش تغذیه است. برای جزئیات، به Serving مراجعه کنید.

{
  "amount": 1.5
}

مقادیر نوع غذا

برای فهرست کامل انواع وعده‌های غذایی پشتیبانی‌شده، MealType را ببینید.

غذا

«غذا» نوع داده فقط‌خواندنی است که نشان‌دهنده یک ماده غذایی در پایگاه داده غذا است. از عملیات list و get برای مرور غذاهای دردسترس و بازیابی اطلاعات تغذیه‌ای آن‌ها استفاده کنید.

فهرست کردن غذاها

برای فهرست کردن غذاها، درخواست GET را به نقطه پایانی food dataPoints ارسال کنید:

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

واحد اندازه‌گیری غذا

«واحد اندازه‌گیری غذا» نوع داده‌ای فقط خواندنی است که واحدهای اندازه‌گیری مورداستفاده برای وعده‌های غذایی را نشان می‌دهد (برای مثال، «فنجان»، «قاشق غذاخوری»، یا «تکه»).

فهرست کردن واحدهای اندازه‌گیری دردسترس

برای فهرست کردن واحدهای اندازه‌گیری دردسترس:

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

گزارش آب‌رسانی

«گزارش مصرف آب» نشان‌دهنده مایعاتی است که کاربر ثبت کرده است. برخلاف غذاها که به پایگاه داده «غذا» ارجاع می‌دهند و مصرف مواد مغذی یا انرژی را اندازه‌گیری می‌کنند، ورودی‌های آب‌رسانی حجم مشخصی از مایع مصرف‌شده را در یک بازه زمانی معین ردیابی می‌کنند.

ایجاد گزارش آب‌رسانی

برای ایجاد ورودی گزارش آب‌رسانی، درخواست POST را به نقطه پایانی hydration-log dataPoints ارسال کنید. همه مقادیر حجم در قالب میانای برنامه‌سازی کاربردی به میلی‌لیتر تبدیل می‌شوند.

درخواست

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"
    }
  }
}

پاسخ

{
  "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"
      }
    }
  }
}

به‌روزرسانی گزارش آب‌رسانی

برای به‌روزرسانی ورودی گزارش آب‌رسانی، درخواست PATCH را با شناسه نقطه داده به نقطه پایانی hydration-log dataPoints ارسال کنید.

درخواست

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

پاسخ

{
  "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
      }
    }
  }
}

حذف گزارش‌های آب‌رسانی

برای حذف یک یا چند ورودی گزارش آب‌رسانی، درخواست POST را به روش batchDelete ارسال کنید.

درخواست

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"
  ]
}

پاسخ

{
  "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"
          }
        }
      }
    ]
  }
}

فیلدهای ثبت آب‌رسانی

برای مشاهده فهرست کامل فیلدها و توضیحات، به HydrationLog مراجعه کنید.

مقدار حجم

نشان‌دهنده اندازه‌گیری حجم است که برحسب میلی‌لیتر اندازه‌گیری می‌شود. برای جزئیات، VolumeQuantity را ببینید.

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

مقادیر واحد حجم

برای مشاهده فهرست کامل واحدهای حجم پشتیبانی‌شده، به VolumeUnit مراجعه کنید. مقادیر رایج شامل MILLILITER، LITER، CUP_US، و FLUID_OUNCE_US می‌شود.

رهنمودها

  • درصورت امکان از غذای شناسایی‌شده استفاده کنید. این میانای برنامه‌سازی کاربردی فیلدهای تغذیه‌ای را به‌طور خودکار پر می‌کند، خطاها را کاهش می‌دهد، و سازگاری با پایگاه داده غذا را تضمین می‌کند.
  • گزارش‌های تغذیه ایجادشده از غذای ناشناس را نمی‌توان پس‌از ایجاد به‌روز کرد. اگر لازم است گزارش غذای ناشناسی را اصلاح کنید، آن را حذف کنید و گزارش جدیدی ایجاد کنید.
  • برخلاف گزارش‌های ناشناس تغذیه غذایی، ورودی‌های گزارش هیدراتاسیون کاملاً قابل‌تغییر هستند و می‌توانند پس‌از ایجاد بااستفاده از درخواست PATCH به‌روز شوند.
  • همه مقادیر مواد مغذی در آرایه nutrients از گرم به‌عنوان واحد اندازه‌گیری استفاده می‌کنند.
  • فیلدهای energy و energyFromFat از کیلوکالری (kcal) به‌عنوان واحد اندازه‌گیری استفاده می‌کنند.
  • این میانای برنامه‌سازی کاربردی همه مقادیر آب‌رسانی را به میلی‌لیتر تبدیل و ذخیره می‌کند. فیلد اختیاری userProvidedUnit در VolumeQuantity فقط برای نمایش سمت مشتری برای کاربر استفاده می‌شود.
  • درخواست‌های مستقیم HTTP DELETE به نقاط داده hydration-log جداگانه 404 Not Found را برمی‌گرداند. از روش batchDelete برای برداشتن این ورودی‌های منبع استفاده کنید.
  • گزارش‌های مصرف آب از فاصله زمانی کوتاهی استفاده می‌کنند که در آن startTime و endTime نشان‌دهنده دوره زمانی مصرف مایع است.