我正在使用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中还有很多会话数据!我是否缺少有关分页的内容?
谢谢
答案 0 :(得分:0)
可能是因为您使用的URL格式与documentation中的示例不同。
您正在使用:
startTime=2018-10-18T00:00:00+00:00
文档中的内容为:
startTime=2014-04-01T00:00:00.00Z
文档还指出,startTime
和endTime
查询参数都是必需的。
答案 1 :(得分:0)
我认为pageToken
参数的描述实际上是相当令人困惑的in the documentation(这个答案是在文档更新之前写的。)。
继续标记,用于对大结果集进行分页。要获取下一页结果,请将此参数设置为上一个响应中的
nextPageToken
的值。
这混淆了两个概念:继续和分页。 Users.sessions
的实现中实际上没有任何分页。
会话通过其修改时间戳编制索引。与API进行交互的方式有两种(或三种,具体取决于您的计算方式):
pageToken
(如果提供)在上述任何一种情况下,您都会收到一个nextPageToken
返回,该返回恰好在结果中的最近会话之后。因此,nextPageToken
实际上是一个 continuation 令牌,因为它的意思是您已经被告知到目前为止所有已修改的会话:将该令牌传递回去以告知所有已修改的内容在nextPageToken
和“当前时间”之间进行更新。
这样,如果您发出的请求获取了过去7天的所有会话(没有开始/结束时间,没有页面令牌)并获得了nextPageToken
,则您只会使用nextPageToken
(如果在第一个请求和第二个请求之间已修改了任何会话)。
因此,如果您要快速连续发出这些请求,那么您在第二个响应中将看不到任何内容。
就您通过in your comment的startTime
的有效性而言,这是一个错误。 RFC3339定义小数秒应该是可选的。
我将解决该问题;但在此期间,只需确保您经过了小数秒(即使只是.0
,例如2018-10-18T00:00:00.0+00:00
)。