分页在 Google Fit 中没有结果

Pagination yields no results in 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 中有更多(!)更多会话数据适合我的帐户。我是否遗漏了有关分页的内容?

谢谢

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

您正在使用:

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

其中文档中的一个是:

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

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

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

The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.

这混淆了两个概念:延续和分页。 Users.sessions.

的实现实际上没有任何分页

会话按其修改时间戳编制索引。有两种(或三种,取决于您如何计算)与 API:

交互的方式
  • 传递开始 and/or 结束时间。省略的开始和结束时间分别作为开始和结束时间。在这种情况下,您将取回那些时间之间的所有会话。
  • 既不传递开始时间也不传递结束时间。在这种情况下,您将收到过去某个时间和现在之间的所有会话。那个时间是:
    • pageToken,如果提供
    • 否则,是 7 天前(这实际上并没有出现在文档中,但它是行为)

在任何这些情况下,您都会收到一个 nextPageToken 返回,它紧接在结果中最近的会话之后。因此,nextPageToken 实际上是一个 continuation 令牌,因为它的意思是您已被告知到目前为止修改的所有会话:将该令牌传回以被告知关于在 nextPageToken 和 "current time" 之间修改以获取更新的任何内容。

因此,如果您发出请求获取过去 7 天的所有会话(没有 start/end 时间,没有页面令牌)并获得 nextPageToken,您只会得到一些回报在使用该 nextPageToken 的请求中,如果在第一个和第二个请求之间修改了任何会话。

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


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

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