Nik*_*Nik 2 python api pagination
我正在编写一个代码,从 API 获取记录,并且该 API 实现了分页,最多允许 100 条记录。所以我必须循环100的倍数。目前我的代码比较总记录并从偏移量100 开始循环,然后是 101,102,103 等。我希望它以 100 为单位循环(如 100,200,300),并在偏移量大于总记录时立即停止。我不知道如何做到这一点,我有部分代码增加 1 而不是 100,并且在需要时不会停止。有人可以帮我解决这个问题吗?
import pandas as pd
from pandas.io.json import json_normalize
#Token for Authorization
API_ACCESS_KEY = 'Token'
Accept='application/xml'
#Query Details that is passed in the URL
since = '2018-01-01'
until = '2018-02-01'
limit = '100'
offset = '0'
total = 'true'
def get():
url_address = "https://mywebsite/web?offset="+str('0')
headers = {
'Authorization': 'token={0}'.format(API_ACCESS_KEY),
'Accept': Accept,
}
querystring = {"since":since,"until":until, "limit":limit, "total":total}
# find out total number of pages
r = requests.get(url=url_address, headers=headers, params=querystring).json()
total_record = int(r['total'])
print("Total record: " +str(total_record))
# results will be appended to this list
all_items = []
# loop through all offset and return JSON object
for offset in range(0, total_record):
url = "https://mywebsite/web?offset="+str(offset)
response = requests.get(url=url, headers=headers, params=querystring).json()
all_items.append(response)
offset = offset + 100
print(offset)
# prettify JSON
data = json.dumps(all_items, sort_keys=True, indent=4)
return data
print(get())
Run Code Online (Sandbox Code Playgroud)
目前,当我打印偏移量时,我看到
总记录数:345
100,
101,
102,
预期:
总记录: 345
100,
200,
300
停止循环!
一种方法就是改变
for offset in range(0, total_record):
url = "https://mywebsite/web?offset="+str(offset)
response = requests.get(url=url, headers=headers, params=querystring).json()
all_items.append(response)
offset = offset + 100
print(offset)
Run Code Online (Sandbox Code Playgroud)
到
for offset in range(0, total_record, 100):
url = "https://mywebsite/web?offset="+str(offset)
response = requests.get(url=url, headers=headers, params=querystring).json()
all_items.append(response)
print(offset)
Run Code Online (Sandbox Code Playgroud)
因为您无法更改循环内的偏移量
| 归档时间: |
|
| 查看次数: |
9679 次 |
| 最近记录: |