0

我想获取两个日期之间在我的 google fit 帐户中注册的所有活动(自动注册的活动,例如步行和其他活动)及其所有信息。我花了几个小时阅读 Google Fit Rest API 文档,但我不太了解,因此无法获得所需的数据。

我不知道 API 的文档是否杂乱无章,示例是否很少,或者我是否不理解它,因为我的母语不是英语(可能),但我不明白如何进行调用。

如果我是对的:

  1. Google Fit API 将数据类型分为 4 种类型:会话、数据源、数据集和数据点。
  2. 一个会话代表一个活动。
  3. 一个数据源有很多数据集,每个数据集有很多数据点。

我想在一段时间内检索我的所有活动,并在 Json 中检索每个活动的所有数据(步数、卡路里、速度、心率、位置、记录活动的设备)。

我所取得的成就

如果我想检索我可以调用的所有活动:

称呼

获取https://www.googleapis.com/fitness/v1/users/me/sessions

  • 我可以使用 startTime 和 endTime 来限制要检索的会话。

呼叫响应是:

{
    "session": [
        {
            "id": "ef3107ca-a132-43df-ba87-5767bdb2e832",
            "name": "nadar",
            "description": "",
            "startTimeMillis": "1643155200000",
            "endTimeMillis": "1643160600000",
            "modifiedTimeMillis": "1643195812287",
            "application": {
                "packageName": "com.google.android.apps.fitness"
            },
            "activityType": 82
        },
        {
            "id": "21195d09-bc89-4457-8293-039839808526",
            "name": "cicl",
            "description": "",
            "startTimeMillis": "1643161800000",
            "endTimeMillis": "1643163600000",
            "modifiedTimeMillis": "1643189389446",
            "application": {
                "packageName": "com.google.android.apps.fitness"
            },
            "activityType": 14
        },
        {
            "id": "be9f60b4-79e9-41d5-bf64-e366b63d86ef",
            "name": "Bailar",
            "description": "Mal",
            "startTimeMillis": "1609647420000",
            "endTimeMillis": "1609656420000",
            "modifiedTimeMillis": "1643224174323",
            "application": {
                "packageName": "com.google.android.apps.fitness"
            },
            "activityType": 24
        },
        {
            "id": "bef8bda8-b24e-4d04-a22a-86338e6049fe",
            "name": "danza",
            "description": "",
            "startTimeMillis": "1643185566914",
            "endTimeMillis": "1643187366914",
            "modifiedTimeMillis": "1643188254598",
            "application": {
                "packageName": "com.google.android.apps.fitness"
            },
            "activityType": 24
        },
        {
            "id": "6e72bdbd-4ce2-47cc-b857-4ab3487a6cc7",
            "name": "boxeo1",
            "description": "",
            "startTimeMillis": "1643168460000",
            "endTimeMillis": "1643170260000",
            "modifiedTimeMillis": "1643220544876",
            "application": {
                "packageName": "com.google.android.apps.fitness"
            },
            "activityType": 20
        },
        {
            "id": "e36f5557-2f76-44d3-a80e-464d5a7f6fb4",
            "name": "boxeo2",
            "description": "",
            "startTimeMillis": "1643212744367",
            "endTimeMillis": "1643218144367",
            "modifiedTimeMillis": "1643220544876",
            "application": {
                "packageName": "com.google.android.apps.fitness"
            },
            "activityType": 20
        },
        {
            "id": "2625516e274d7f96:activemode:baseball:1643225867610",
            "name": "béisbol por la tarde",
            "description": "",
            "startTimeMillis": "1643225867647",
            "endTimeMillis": "1643225875355",
            "modifiedTimeMillis": "1643226008584",
            "application": {
                "packageName": "com.google.android.apps.fitness"
            },
            "activityType": 11
        },
        {
            "id": "0f1d829e-22e0-4f79-b23f-04e60af95dbc",
            "name": "sdch",
            "description": "",
            "startTimeMillis": "1643186984290",
            "endTimeMillis": "1643188784290",
            "modifiedTimeMillis": "1643189389446",
            "application": {
                "packageName": "com.google.android.apps.fitness"
            },
            "activityType": 12
        },
       ...
    ],
    "deletedSession": [],
    "nextPageToken": "XmRh-ZWj_CZxgJml3CJjZQ"
}

有了这些数据,我可以获得 Google 的 fit 主页活动列表数据(红方活动和信息除外)。我可以用“startTimeMillis”获得开始日期,用“name”获得名称,减去“startTimeMillis”和“endTimeMillis”的持续时间。

此 GET 调用不会返回自动步骤活动,“心脏点”也不会返回。¿ 我怎样才能获得这些数据?

在此处输入图像描述

然后,我想获取每个活动的所有数据(蓝色方块数据)。

在此处输入图像描述 在此处输入图像描述

为此,我使用以下 POST 调用(我通过测试失败实现了 trhat 响应,因为我不正确理解 post 调用正文的每个参数):

称呼

发布https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate

身体

 {
   "aggregateBy": [
          {
            "dataTypeName": "com.google.calories.expended",
          }, {
            "dataTypeName": "com.google.step_count.delta",
          }, 
          {
            "dataTypeName": "com.google.speed",
          },
           {
            "dataTypeName": "com.google.active_minutes",
          },
           {
            "dataTypeName": "com.google.distance.delta",
          },
           {
            "dataTypeName": "com.google.heart_minutes",
          },
          ],
    "startTimeMillis": 1643151600000,
    "endTimeMillis": 1643238000000,
    bucketBySession: {}
}

我对该正文的了解是,我想检索由“startTimeMillis”和“endTimeMillis”之间的会话(活动)打包的数据。因此,如果在该期间完成了两个相同类型的活动,则两者都将出现在响应中。对于每个会话(活动)包,我想检索卡路里、步数、速度、分钟、距离和心分钟(心点)。

结果是这样的:

{
    "bucket": [
        {
            "startTimeMillis": "1643155200000",
            "endTimeMillis": "1643160600000",
            "dataset": [
                {
                    "dataSourceId": "derived:com.google.calories.expended:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643155200000000000",
                            "endTimeNanos": "1643160600000000000",
                            "dataTypeName": "com.google.calories.expended",
                            "originDataSourceId": "raw:com.google.calories.expended:com.google.android.apps.fitness:user_input",
                            "value": [
                                {
                                    "fpVal": 600,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "dataSourceId": "derived:com.google.step_count.delta:com.google.android.gms:aggregated",
                    "point": []
                },
                {
                    "dataSourceId": "derived:com.google.speed.summary:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643157900000000000",
                            "endTimeNanos": "1643157900000000000",
                            "dataTypeName": "com.google.speed.summary",
                            "originDataSourceId": "raw:com.google.distance.delta:com.google.android.apps.fitness:user_input",
                            "value": [
                                {
                                    "fpVal": 0.55555558204650879,
                                    "mapVal": []
                                },
                                {
                                    "fpVal": 0.55555558204650879,
                                    "mapVal": []
                                },
                                {
                                    "fpVal": 0.55555558204650879,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "dataSourceId": "derived:com.google.active_minutes:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643155200000000000",
                            "endTimeNanos": "1643160600000000000",
                            "dataTypeName": "com.google.active_minutes",
                            "originDataSourceId": "raw:com.google.active_minutes:com.google.android.apps.fitness:user_input",
                            "value": [
                                {
                                    "intVal": 90,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "dataSourceId": "derived:com.google.distance.delta:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643155200000000000",
                            "endTimeNanos": "1643160600000000000",
                            "dataTypeName": "com.google.distance.delta",
                            "originDataSourceId": "raw:com.google.distance.delta:com.google.android.apps.fitness:user_input",
                            "value": [
                                {
                                    "fpVal": 3000,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "dataSourceId": "derived:com.google.heart_minutes.summary:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643155200000000000",
                            "endTimeNanos": "1643160600000000000",
                            "dataTypeName": "com.google.heart_minutes.summary",
                            "value": [
                                {
                                    "fpVal": 180,
                                    "mapVal": []
                                },
                                {
                                    "intVal": 90,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                }
            ],
            "session": {
                "id": "ef3107ca-a132-43df-ba87-5767bdb2e832",
                "name": "nadar",
                "description": "",
                "startTimeMillis": "1643155200000",
                "endTimeMillis": "1643160600000",
                "modifiedTimeMillis": "1643195812287",
                "application": {
                    "packageName": "com.google.android.apps.fitness"
                },
                "activityType": 82
            }
        },
        {
            "startTimeMillis": "1643161800000",
            "endTimeMillis": "1643163600000",
            "dataset": [
                {
                    "dataSourceId": "derived:com.google.calories.expended:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643161800000000000",
                            "endTimeNanos": "1643163600000000000",
                            "dataTypeName": "com.google.calories.expended",
                            "originDataSourceId": "raw:com.google.calories.expended:com.google.android.apps.fitness:user_input",
                            "value": [
                                {
                                    "fpVal": 200,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "dataSourceId": "derived:com.google.step_count.delta:com.google.android.gms:aggregated",
                    "point": []
                },
                {
                    "dataSourceId": "derived:com.google.speed.summary:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643162700000000000",
                            "endTimeNanos": "1643162700000000000",
                            "dataTypeName": "com.google.speed.summary",
                            "originDataSourceId": "raw:com.google.distance.delta:com.google.android.apps.fitness:user_input",
                            "value": [
                                {
                                    "fpVal": 11.111110687255859,
                                    "mapVal": []
                                },
                                {
                                    "fpVal": 11.111110687255859,
                                    "mapVal": []
                                },
                                {
                                    "fpVal": 11.111110687255859,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "dataSourceId": "derived:com.google.active_minutes:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643161800000000000",
                            "endTimeNanos": "1643163600000000000",
                            "dataTypeName": "com.google.active_minutes",
                            "originDataSourceId": "raw:com.google.active_minutes:com.google.android.apps.fitness:user_input",
                            "value": [
                                {
                                    "intVal": 30,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "dataSourceId": "derived:com.google.distance.delta:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643161800000000000",
                            "endTimeNanos": "1643163600000000000",
                            "dataTypeName": "com.google.distance.delta",
                            "originDataSourceId": "raw:com.google.distance.delta:com.google.android.apps.fitness:user_input",
                            "value": [
                                {
                                    "fpVal": 20000,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                },
                {
                    "dataSourceId": "derived:com.google.heart_minutes.summary:com.google.android.gms:aggregated",
                    "point": [
                        {
                            "startTimeNanos": "1643161800000000000",
                            "endTimeNanos": "1643163600000000000",
                            "dataTypeName": "com.google.heart_minutes.summary",
                            "value": [
                                {
                                    "fpVal": 30,
                                    "mapVal": []
                                },
                                {
                                    "intVal": 30,
                                    "mapVal": []
                                }
                            ]
                        }
                    ]
                }
            ],
            "session": {
                "id": "21195d09-bc89-4457-8293-039839808526",
                "name": "cicl",
                "description": "",
                "startTimeMillis": "1643161800000",
                "endTimeMillis": "1643163600000",
                "modifiedTimeMillis": "1643189389446",
                "application": {
                    "packageName": "com.google.android.apps.fitness"
                },
                "activityType": 14
            }
        },
        ...
        }
    ]
}

我不知道这是否是获取活动数据的最佳方式,因为我不了解 API 文档。所以,我要问的是关于获得每个活动信息和自动记录的活动(我不想要被删除的活动)的信息的支持者和干净的方法,以及一些关于它的解释。我还想获得记录每个活动的设备。

更多疑惑:datasourceName和datasourceId有什么区别?为什么一切如此混乱?

当我尝试使用一些 dataTypeName 时,例如:com.google.activity.exercise、com.google.activity.summary....在我的通话正文中,我收到以下错误,我不明白为什么。

{
    "error": {
        "code": 400,
        "message": "no default datasource found for: com.google.activity.summary",
        "errors": [
            {
                "message": "no default datasource found for: com.google.activity.summary",
                "domain": "global",
                "reason": "invalidArgument"
            }
        ],
        "status": "INVALID_ARGUMENT"
    }
}
4

0 回答 0