【问题标题】:Getting activities list with a distances in Google Fit API (REST)在 Google Fit API (REST) 中获取带有距离的活动列表
【发布时间】:2021-08-19 19:19:13
【问题描述】:

我需要在 Google 健身中获取最近的活动列表,包括旅行的距离。

我正在使用直接 REST API 请求(PHP 通过 cURL)。

  1. 首先,我通过 oAuth 2.0 进行授权

https://accounts.google.com/o/oauth2/v2/auth?client_id=%CLIENT_ID%&redirect_uri=%REDIRECT_URI%&response_type=code&scope=https://www.googleapis.com/auth/fitness.activity.read%20https://www.googleapis.com/auth/fitness.location.read

  1. 授权后,我被重定向到我的站点 %REDIRECT_URI%,其中 GET 请求包含“代码”。

  2. 我使用这个“代码”来获取授权令牌:

POST - https://www.googleapis.com/oauth2/v3/token
POST data: {
    'code': %CODE_FROM_GET_PARAM%,
    'client_id' => %CLIENT_ID%,
    'client_secret' => %CLIENT_SECRET%,
    'grant_type' => 'authorization_code',
    'redirect_uri' => %REDIRECT_URI%
}
  1. 完成请求后,我收到一个“ya29.a0ARrdaM-...”形式的身份验证令牌,我使用此令牌进行标头承载授权。

  2. 我向https://www.googleapis.com/fitness/v1/users/me/sessions 发出请求以获取活动列表:

"session": [
        {
            "id": "Run1629350880000",
            "name": "Run",
            "description": "",
            "startTimeMillis": "1629350880000",
            "endTimeMillis": "1629352020000",
            "modifiedTimeMillis": "1629358291250",
            "application": {
                "packageName": "com.xiaomi.hm.health"
            },
            "activityType": 8
        }, ...
]

根据这个列表,我可以看到运行时间(startTimeMillis,endTimeMillis),但我仍然需要获取距离。

接下来我该怎么做?

【问题讨论】:

  • @mikegross 此解决方案适用于 Android,不适用于 REST API
  • 哦,我的错!在仔细阅读developers.google.com/fit/rest/v1/reference之后,我发现没有特别关注距离。可能是你在用户运行的时候要自己记录。但我明白为什么不记录它,fit API 是记录许多不同的运动(冰壶等),并不是所有的运动都有与它们相关的距离。所以可能 Google Fit API 不存储距离。
  • Session 的字段描述为here。距离不是 Session 中记录的字段。

标签: google-fit google-fit-api


【解决方案1】:

从问题中采取的所有操作都是正确的。

接下来需要向https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate发送请求

CURL 请求:

您可以删除“

curl --location --request POST 'https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate' \
--header 'Authorization: Bearer %AUTH_TOKEN%' \ <--- Real Auth token
--header 'Content-Type: application/json' \
--data-raw '{
    "aggregateBy": [
      {
        "dataTypeName": "com.google.distance.delta",
        "dataSourceId": "derived:com.google.distance.delta:com.google.android.gms:merge_distance_delta"
      }
    ],
    "startTimeMillis": 1629350880000, <--- "startTimeMillis" from session data
    "endTimeMillis": 1629352020000    <--- "endTimeMillis" from session data
  }'

回应:

{
    "bucket": [
        {
            "startTimeMillis": "1629350880000",
            "endTimeMillis": "1629352020000",
            "dataset": [
                {
                    "dataSourceId": "derived:com.google.distance.delta:com.google.android.gms:merge_distance_delta",
                    "point": [
                        {
                            "startTimeNanos": "1629350880000000000",
                            "endTimeNanos": "1629352020000000000",
                            "dataTypeName": "com.google.distance.delta",
                            "originDataSourceId": "raw:com.google.distance.delta:com.xiaomi.hm.health:GoogleFitSyncHelper- distance0",
                            "value": [
                                {
                                    "fpVal": 874, <--- distance in meters
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多