分页在Google Fit中无结果

时间:2018-10-31 23:33:43

标签: google-fit

我正在使用Google Fit的REST API。我想使用Fitness.users.sessions.list方法列出会话。这给了我几十个结果。

现在,我想获得更多结果,为此,我将pageToken设置为从上一个响应中获得的值。但是新结果不包含任何数据点,仅包含另一个pageToken:

{
 "session": [
 ],
 "deletedSession": [
 ],
 "nextPageToken": "1541027616563"
}

当我使用Google Python API客户端的分页功能时,也会发生同样的事情:我迭代结果,但从未获得任何新数据。

    request = self.service.users().sessions().list(userId='me')
    while request is not None:
        response = request.execute()
        for ds in response['session']:
            yield ds
        request = self.service.users().sessions().list_next(request, response)

我确定我的帐户在Google Fit中还有很多会话数据!我是否缺少有关分页的内容?

谢谢

2 个答案:

答案 0 :(得分:0)

可能是因为您使用的URL格式与documentation中的示例不同。

您正在使用:

startTime=2018-10-18T00:00:00+00:00

文档中的内容为:

startTime=2014-04-01T00:00:00.00Z

文档还指出,startTimeendTime查询参数都是必需的。

答案 1 :(得分:0)

我认为pageToken参数的描述实际上是相当令人困惑的in the documentation这个答案是在文档更新之前写的。)。

  

继续标记,用于对大结果集进行分页。要获取下一页结果,请将此参数设置为上一个响应中的nextPageToken的值。

这混淆了两个概念:继续和分页。 Users.sessions的实现中实际上没有任何分页。

会话通过其修改时间戳编制索引。与API进行交互的方式有两种(或三种,具体取决于您的计算方式):

  • 传递开始和/或结束时间。省略的开始时间和结束时间分别视为时间的开始和结束。在这种情况下,您将找回这段时间之间的所有会话。
  • 不传递开始时间或结束时间。在这种情况下,您将收到过去和现在之间的所有会话。那个时间是:
    • pageToken(如果提供)
    • 否则,这是7天前的事(实际上并没有出现在文档中,但这是行为)

在上述任何一种情况下,您都会收到一个nextPageToken返回,该返回恰好在结果中的最近会话之后。因此,nextPageToken实际上是一个 continuation 令牌,因为它的意思是您已经被告知到目前为止所有已修改的会话:将该令牌传递回去以告知所有已修改的内容在nextPageToken和“当前时间”之间进行更新。

这样,如果您发出的请求获取了过去7天的所有会话(没有开始/结束时间,没有页面令牌)并获得了nextPageToken,则您只会使用nextPageToken(如果在第一个请求和第二个请求之间已修改了任何会话)。

因此,如果您要快速连续发出这些请求,那么您在第二个响应中将看不到任何内容。


就您通过in your commentstartTime的有效性而言,这是一个错误。 RFC3339定义小数秒应该是可选的。

我将解决该问题;但在此期间,只需确保您经过了小数秒(即使只是.0,例如2018-10-18T00:00:00.0+00:00)。