如何从Google Fitness REST API检索步数数据?

Cho*_*sby 10 google-api google-fit

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

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

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

Cho*_*sby 6

事实证明,答案完全在文档中.这是请求的格式.

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

唯一支持的{userId}值是me(使用身份验证).

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

我错过的一点是,这{datasetId}不是一个真正的ID,但实际上你定义了你感兴趣的时间跨度.该变量的格式是{startTime}-{endTime}自纪元以来的时间以纳秒为单位.

  • 非常糟糕的 api 支持。 (2认同)
  • 我正在研究这个rest api,但是当我输入这个查询时,它不会返回任何整数值,而是只给我一个json内容,其中包含开始和结束时间以及我在查询中放入的数据流id..知道该怎么做吗? ?查询:https://www.googleapis.com/fitness/v1/users/me/dataSources/衍生:com.google.calories.expended:com.google.android.gms:merge_calories_expished/datasets/1461628800-1461864195响应:{ “minStartTimeNs”:“1461628800”,“maxEndTimeNs”:“1461864195”,“dataSourceId”:“派生:com.google.calories.expished:com.google.android.gms:merge_calories_expished”} (2认同)

Xan*_*anT 6

我能够通过google php 客户端完成这项工作,并注意到他们为GET请求附加了额外的 0 - 9的开始和结束时间。

使用GET上述答案中提到的相同请求格式:

https://www.googleapis.com/fitness/v1/users/{userId}/dataSources/{dataSourceId}/datasets/{datasetId}
Run Code Online (Sandbox Code Playgroud)

现在这是一个带有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
Run Code Online (Sandbox Code Playgroud)

这是我得到的回应:

{
  "minStartTimeNs": "1470475368", 
  "maxEndTimeNs": "1471080168", 
  "dataSourceId":
  "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您将开始时间和结束时间附加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
Run Code Online (Sandbox Code Playgroud)

它奏效了——这是我得到的回应:

{
  "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"
}, 
Run Code Online (Sandbox Code Playgroud)

回复要长很多,但为了这篇文章,我截断了它。因此,当将您的datasets参数传递到请求中时:

1470475368-1471080168不会工作,但1470475368000000000-1471080168000000000会。

这对我有用,希望它可以帮助某人!


小智 5

我尝试使用以下 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
}
Run Code Online (Sandbox Code Playgroud)