Как получить данные о количестве шагов из 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
}