Я думаю, что это может быть то, что вы имеете в виду ... но, как указано в комментариях, это не очень помогает:
def fetch_paged(url):
while url:
res = requests.get(url)
res.raise_for_status()
data = res.json()
yield data
url = data['next_page_uri']
def fetch(url):
for data in fetch_paged(url):
yield from data[resource]
(Я воспользовался возможностью, чтобы позвонить raise_for_status()
который будет raise
для неуспешных, то есть res.status_code < 400
, ответов)
не уверен, что это "лучше", но, возможно, если вы собираетесь многократно использовать функциональность fetch_paged
Примечание: многие другие API помещают этот next_page_uri
в заголовки ответа стандартными способами , с которыми библиотека requests
знает, как иметь дело, и предоставляет через res.links
атрибут