问题描述
我必须从Google工作区(Gsuite)中提取25万本Chromebook,我正在使用Admin Directory API从Google检索JSON数据。
响应以200条记录的块形式返回,响应中包含nextPagetoken
,我使用该下一页标记来检索下200条记录,依此类推。
一个小时后,使用上一个请求中附加的nextPagetoken
,但是Google返回错误400,
注意:谷歌称其为无效字符串“ CMiJhq7-5ewCEp0BCm737N8GN ......”是nextPagetoken。
为什么会这样? nextPagetoken会在1小时后过期吗?
我的代码段:
query_list = {
'maxResults' => 200,'access_token' => access_token,'pagetoken' => next_page_token
}
HTTParty.get(endpoint_url,query: query_list)
解决方法
发送初始请求时,将创建nextPage令牌。使用此令牌是为了从请求中获取下一批行。
此令牌旨在立即使用,因为如果等待很长时间,与初始请求相关的数据可能会更改。
是的,下一页令牌确实会过期,我实际上希望它们在不到一个小时的时间内过期。我还想知道,下一页令牌在您第一次使用后是否还会过期?
如果您想再次发出相同的请求,我建议您这样做,并在小时后为您建立新的下一页令牌。
,我不得不改变方法,最初,我从Google API中获取了200个块,执行了一些耗时的处理,然后将其输入到数据库中(数据库密集型任务),然后请求了接下来的200个块,依此类推。一个小时后,Google发送的最后一个nexttoken无效。
因此,现在我获取200个块,将它们以JSON格式保存到我的数据库中,而无需执行任何数据库密集型任务,请求下200个,依此类推。在nextPageToken无效之前,我能够在大约56分钟内从Google提取300K Chromebooks JSON数据。
我现在正在处理数据库中存在的JSON数据,而没有网络开销或任何Google API依赖项。