在REST中获得Google Fit API的特定值



我正在为两个日期之间的活动调用google fit API,但我如何才能获得活动整数?是否有一种直接的方法从HTTP请求调用它,或者我必须自己过滤JSON数据?

social_token = SocialToken.objects.get(account__user=2)
token=social_token.token
url = "https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate"
headers = {
"Authorization": "Bearer {}".format(token),
"Content-Type": "application/json"
}
body = {
"aggregateBy": [{
"dataTypeName": "com.google.activity.segment",

}],
"startTimeMillis": 1634767200000,
"endTimeMillis": 1634853600000
}
respo = requests.post(url, data=json.dumps(body), headers=headers)

JSON响应

[
"{n  "bucket": 
[n    {n      "startTimeMillis": "1634767200000",n      "endTimeMillis": "1634853600000",n      "dataset": 
[n     ",
"   {n          "dataSourceId": "derived:com.google.activity.segment:com.google.android.gms:merge_activity_segments",n          "",
"point": 
[n            {n              "startTimeNanos": "1634818320000000000",n              "endTimeNanos": "163482012000000000",
"0",n              "dataTypeName": "com.google.activity.segment",n              "originDataSourceId": "raw:com.google.activity.se",
"gment:com.google.android.apps.fitness:user_input",n              "value": [n                {n                  "intVal": 97,n  ",
"                "mapVal": []n                }n              ]n            },n            {n              "startTimeNanos": "163",
"4820120000000000",n              "endTimeNanos": "1634820292573000000",n              "dataTypeName": "com.google.activity.segme",
"nt",n              "value": [n                {n                  "intVal": 7,n                  "mapVal": []n                }n",
"              ]n            },n            {n              "startTimeNanos": "1634823157245000000",n              "endTimeNanos"",
": "1634823301721000000",n              "dataTypeName": "com.google.activity.segment",n              "value": [n                {",
"n                  "intVal": 7,n                  "mapVal": []n                }n              ]n            }n          ]n     ",
"   }n      ]n    }n  ]n}n"
]

要获取一个范围内数据类型的所有单独条目,您需要使用Users.dataSources.datasets: getAPI。

请求方法为GET,端点为

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

,其中datasetId的格式为StartTimeInNanoseconds-EndTimeInNanoseconds,dataSourceId将是您希望针对的单个条目的数据源的ID。例如,对于体温,它将是derived:com.google.body.temperature:com.google.android.gms:merged

要获取应用程序可以访问的所有可用数据源id的列表,请调用API

GET https://www.googleapis.com/fitness/v1/users/me/dataSources

获取体温的示例请求

GET https://www.googleapis.com/fitness/v1/users/me/dataSources/derived:com.google.body.temperature:com.google.android.gms:merged/datasets/1655750425675000000-1655991535675000000
<<p>反应/strong>
{
"minStartTimeNs": "1655750425675000000", 
"maxEndTimeNs": "1655991535675000000", 
"dataSourceId": "derived:com.google.body.temperature:com.google.android.gms:merged", 
"point": [
{
"modifiedTimeMillis": "1655961443186", 
"startTimeNanos": "1655944200000000000", 
"endTimeNanos": "1655944200000000000", 
"value": [
{
"mapVal": [], 
"fpVal": 30
}, 
{
"mapVal": []
}
], 
"dataTypeName": "com.google.body.temperature", 
"originDataSourceId": "raw:com.google.body.temperature:com.google.android.apps.fitness:user_input"
}, 
{
"modifiedTimeMillis": "1655961443186", 
"startTimeNanos": "1655947800000000000", 
"endTimeNanos": "1655947800000000000", 
"value": [
{
"mapVal": [], 
"fpVal": 34
}, 
{
"mapVal": []
}
], 
"dataTypeName": "com.google.body.temperature", 
"originDataSourceId": "raw:com.google.body.temperature:com.google.android.apps.fitness:user_input"
}, 
{
"modifiedTimeMillis": "1655961443186", 
"startTimeNanos": "1655955000000000000", 
"endTimeNanos": "1655955000000000000", 
"value": [
{
"mapVal": [], 
"fpVal": 38
}, 
{
"mapVal": []
}
], 
"dataTypeName": "com.google.body.temperature", 
"originDataSourceId": "raw:com.google.body.temperature:com.google.android.apps.fitness:user_input"
}
]
}

最新更新