我想使用 Google 的 REST API 来获取我帐户的健身数据。为此,我发出 2 个后续呼叫。
获取https://www.googleapis.com/fitness/v1/users/me/dataSources。这将返回所有可用数据源的列表,如 [1] 中所示。
发布https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate。我使用来自 [1] 的请求正文中的 dataType 名称和 dataStreamId 来构建请求正文 [2]。
问题:第二次调用为所有包含空格的 dataSourceId 返回错误 [3],尽管它们在第一次请求中完全以这种方式返回。在代码示例中有空格,因为 dataSourceId 包含手机型号“Nexus 5”。如果没有空格,则请求成功且没有错误。
我已经尝试用其他东西(“%20”或“_”或“+”)替换空格,但没有任何帮助。这是 API 中的错误还是我在做一些根本错误的事情?
提前致谢!
编辑 1:顺便说一句,我正在使用谷歌的 oauth-playground 并选择了所有的健身范围。 https://developers.google.com/oauthplayground/
编辑 2:在代码示例 [2] 中,我使用了错误的 dataTypeName。是“activity_confidence”,但应该是“com.google.activity.samples”。
[1] 获取响应
{
"dataSource": [
{
"application": {
"packageName": "com.google.android.gms"
},
"dataQualityStandard": [
],
"dataStreamId": "derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus 5:c80045fc:detailed",
"dataStreamName": "detailed",
"dataType": {
"field": [
{
"format": "map",
"name": "activity_confidence"
}
],
"name": "com.google.activity.samples"
},
"device": {...},
"type": "derived"
},
...
]
}
[2] POST 正文
{
"aggregateBy": [
{
"dataSourceId": "derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus 5:c80045fc:detailed",
"dataTypeName": "com.google.activity.samples"
}
],
"endTimeMillis": 1511132400000,
"startTimeMillis": 1510268400000
}
[3] POST 错误信息
{
"error": {
"code": 400,
"errors": [
{
"domain": "global",
"message": "datasource not found: derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus 5:c80045fc:detailed",
"reason": "invalidArgument"
}
],
"message": "datasource not found: derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus 5:c80045fc:detailed"
}
}