我需要重复进行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调用时,offset值应增加1000(例如,offset = 1000,offset = 2000,offset = 3000等),直到检索到所有页面为止。

如何创建使用此offset参数进行分页api调用的函数?我相信需要一个生成器,但是我无法理解需要使用offset参数的示例。

最佳答案

由于您没有提供更多详细信息并且未提及任何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

关于python - 如何使用Python请求对具有offset参数的api调用进行分页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54101781/

10-13 09:52