14

自从我在 Nexus 5 上安装了 Google Fit 应用程序以来,它一直在跟踪我的步数和步行时间。我想通过 Google Fitness REST api ( docs ) 检索此信息,但我不知道如何从 REST api 获取任何数据。

我已经使用 OAuth 2.0 游乐场成功列出了数据源,但我尝试过的所有示例都没有返回任何健身数据。我觉得我需要使用类似于(Android SDK)中的 DataReadRequest 的东西,但我没有构建 Android 应用程序——我只想访问 Google Fit 应用程序已经存储的健身数据。

甚至可以获取 Google Fit 应用程序收集的数据吗?如果是这样,我如何使用 REST api 读取和汇总步数数据?

4

3 回答 3

7

事实证明,答案毕竟在文档中。这是请求的格式。

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

唯一支持的{userId}值是me(with authentication)。

的可能值{dataSourceId}可通过运行不同的请求获得

我错过的一点是,这{datasetId}并不是真正的 ID,而是您定义感兴趣的时间跨度的地方。该变量的格式是{startTime}-{endTime}自纪元以来的时间以纳秒为单位。

于 2014-11-27T19:54:59.050 回答
7

我能够通过谷歌 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会。

这对我有用,希望对某人有所帮助!

于 2016-08-13T11:31:14.753 回答
5

我尝试了使用以下 URL 和正文的 post 方法。这将起作用,请也检查内联评论。

使用网址: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
}
于 2017-09-01T09:23:40.103 回答