Как получить данные о количестве шагов из API Google Fitness REST?

С тех пор, как я установил приложение Google Fit на свой Nexus 5, оно отслеживало количество моих шагов и время, потраченное на ходьбу. Я хотел бы получить эту информацию через API Google Fitness REST ( документы), но я не могу понять, как получить какие-либо из этих данных из API REST.

Я использовал площадку OAuth 2.0 для успешного перечисления источников данных, но ни один из примеров, которые я пробовал, не возвращал никаких данных о пригодности. Мне кажется, что мне нужно использовать что-то похожее на DataReadRequest из ( Android SDK), но я не создаю приложение для Android - я просто хочу получить доступ к данным о фитнесе, уже сохраненным в приложении Google Fit.

Можно ли вообще получить данные, собранные приложением Google Fit? Если да, как я могу читать и объединять данные подсчета шагов, используя REST API?

3 ответа

Решение

Получается, что ответ в документах в конце концов. Вот формат запроса.

GET https://www.googleapis.com/fitness/v1/users/{userId}/dataSources/{dataSourceId}/datasets/{datasetId}

Единственная поддерживаемая {userId} значение me (с аутентификацией).

Возможные значения для {dataSourceId} доступны, запустив другой запрос.

Я пропустил то, что {datasetId} на самом деле это не идентификатор, а место, где вы определяете интересующий вас период времени. Формат для этой переменной {startTime}-{endTime} где времена в наносекундах с эпохи.

Я смог заставить это работать, пройдя через клиент Google php и заметил, что они добавляют свое время начала и окончания для GET запрос с дополнительными 0 - девять.

Используйте то же самое GET Формат запроса, как указано в ответе выше:

https://www.googleapis.com/fitness/v1/users/{userId}/dataSources/{dataSourceId}/datasets/{datasetId}

Теперь вот пример с меткой времени Unix (PHP time() функция использует это)

https://www.googleapis.com/fitness/v1/users/me/dataSources/derived:com.google.step_count.delta:com.google.android.gms:estimated_steps/datasets/1470475368-1471080168

Это ответ, который я получаю:

{
  "minStartTimeNs": "1470475368", 
  "maxEndTimeNs": "1471080168", 
  "dataSourceId":
  "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps
}

Однако, если вы добавите время начала и окончания с девятью 0это то, что вы положили в свой GET запросы и сформируйте ваш запрос следующим образом:

https://www.googleapis.com/fitness/v1/users/me/dataSources/derived:com.google.step_count.delta:com.google.android.gms:estimated_steps/datasets/1470475368000000000-1471080168000000000

Это сработало - вот ответ, который я получил:

{
  "minStartTimeNs": "1470475368000000000", 
  "maxEndTimeNs": "1471080168000000000", 
  "dataSourceId":
     "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps", 

  "point": [
    {
      "modifiedTimeMillis": "1470804762704", 
      "startTimeNanos": "1470801347560000000", 
      "endTimeNanos": "1470801347567000000", 
      "value": [
        {
          "intVal": -3
        }
      ], 
      "dataTypeName": "com.google.step_count.delta", 
      "originDataSourceId":    "raw:com.google.step_count.delta:com.dsi.ant.plugins.antplus:AntPlus.0.124"
}, 

Ответ намного длиннее, но я обрезал его ради этого поста. Так что при прохождении вашего datasets Параметр в запросе:

1470475368-1471080168 не сработает, но 1470475368000000000-1471080168000000000 будут.

Это помогло мне, надеюсь, это кому-нибудь поможет!

Я попытался опубликовать метод с ниже URL и тела. Это будет работать, пожалуйста, проверьте встроенные комментарии тоже.

Используйте URL-адрес: https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate Метод: POST Тело:

    {
  "aggregateBy": [{
    "dataTypeName": "com.google.step_count.delta",
    "dataSourceId": "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps"
  }],
  "bucketByTime": { "durationMillis": 86400000 }, // This is 24 hours
  "startTimeMillis": 1504137600000, //start time
  "endTimeMillis": 1504310400000 // End Time
}
Другие вопросы по тегам