我正在为两个日期之间的活动调用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: get
API。
请求方法为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"
}
]
}