我需要重复进行api调用,因为每次调用1000条记录都受到限制。我总共测试大约20,000条记录,保留一个样本,然后需要下一个1000条。offset参数可用。
p = getpass.getpass()
url = ("https://example.api.com/api/1.0/devices/all/?offset={}&include_cols=asset_no,name,service_level,building&type=physical"
r = requests.get(url, auth=HTTPBasicAuth('admin', p))
data = json.loads(r.text)
payload = data["Devices"]
每个api调用的偏移量值应增加1000(例如,偏移量= 1000,偏移量= 2000,偏移量= 3000等),直到检索到所有页面为止。
如何创建使用此offset参数进行分页api调用的函数?我相信需要一个生成器,但是我无法理解需要使用offset参数的示例。
答案 0 :(得分:1)
由于您没有显示更多详细信息并且没有提及API供应商,因此我必须对此保持通用。
可以使用简单的while
循环来完成分页。
基本工作流程是,当您在 您的回应,请继续提出后续要求。用伪代码 可能看起来像这样:
Page = GetPageOfItems(); //process the data from the page, or add it to a larger array, etc. while( Page->cursor ) Page = GetPageOfItems(Page->cursor); //process the data again end
参考:https://medium.com/square-corner-blog/tips-and-tricks-for-api-pagination-5cacc6f017da
实现方式还取决于API的详细信息,例如数据标题是否包含当前的offset
和/或hasMore
键,例如
p = getpass.getpass()
offset=0
while True:
url = ("https://example.api.com/api/1.0/devices/all/?offset=" + offset + "&include_cols=asset_no,name,service_level,building&type=physical"
r = requests.get(url, auth=HTTPBasicAuth('admin', p))
data = json.loads(r.text)
# Process the payload or add it to a list
offset = data['offset'] # offset +1?
hasMore = data['has-more']
if not hasMore:
break