我通过Cloud API访问Microsoft Health数据。按照要检索daily summaries的文档,我构造了一个带有startTime
参数的GET请求。虽然我打算在一周的时间内检索数据,但API似乎忽略了startTime
参数,并尽可能多地返回数据。
我使用以下代码构建符合ISO 8601的日期字符串,以及发出HTTP请求。 httpClient_
的类型为HttpClient,其中包含实施OAuth身份验证的链式IHttpFilter
。
IAsyncOperation<hstring> get_summaries()
{
using namespace std::chrono;
constexpr auto day{ 24h };
constexpr auto week{ 7 * day };
auto const end_date{ clock::now() };
auto const start_date{ end_date - week };
auto const formatter{ DateTimeFormatter{ L"{year.full}-{month.integer(2)}-{day.integer(2)}T{hour.integer(2)}:{minute.integer(2)}:{second.integer(2)}Z" } };
auto const start_date_string{ formatter.Format(start_date) };
auto const query{ L"startTime=" + start_date_string };
Uri const request{ L"https://api.microsofthealth.net/v1/me/Summaries/Daily?" + Uri::EscapeComponent(query) };
auto const response{ co_await httpClient_.GetStringAsync(request) };
co_return response;
}
在2018-06-17上运行此代码会生成以下请求URL:
https://api.microsofthealth.net/v1/me/Summaries/Daily?startTime%3D2018-06-10T10%3A18%3A20Z
我希望返回的JSON字符串能够容纳8个条目,2018-06-10到2018-06-17期间每天一个条目。这是我实际收到的(缩写)JSON字符串:
{
"summaries": [
{
"userId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"startTime": "2018-06-17T02:00:00+02:00",
"endTime": "2018-06-18T02:00:00+02:00",
"parentDay": "2018-06-17T02:00:00+02:00",
...
},
{
"userId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"startTime": "2018-06-16T02:00:00+02:00",
"endTime": "2018-06-17T02:00:00+02:00",
"parentDay": "2018-06-16T02:00:00+02:00",
...
},
...
{
"userId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"startTime": "2018-05-18T02:00:00+02:00",
"endTime": "2018-05-19T02:00:00+02:00",
"parentDay": "2018-05-18T02:00:00+02:00",
...
}
],
"nextPage": "https://api.microsofthealth.net/v1/me/Summaries/Daily?startTime%3d2018-06-10T10%3a18%3a20Z&ct=636621984000000000",
"itemCount": 31
}
我访问API的方式有问题吗?或者这是Cloud API中的一个错误,尚未列在Known Issues下?