Я пытаюсь l oop по списку объектов, а затем, когда в URL ничего нет, останавливаю код, а затем go к следующему объекту, а затем записываю все данные в один JSON файл .
Вот мой код
import json
import requests
from config import configs
from datetime import datetime
current_date = datetime.now().strftime("%Y%m%d-%H%M%S")
header = {"Authorization": "Bearer <api_key>"}
pst_rec_path = 'path/to/folder'
# Get a list of pst's (there are 245)
all_psts = []
for i in range(1, 3):
s = requests.Session()
s.proxies = < my_proxy >
resp = s.get("https://host/v1/psts?page={0}".format(i), headers=header, verify=False).json()
# Get only the values from the pst_id field and put them into a list
full_psts = [item['pst_id'] for item in resp]
all_psts.extend(full_psts)
# get all the pst receipitent list
pst_rec_list = []
print(len(all_psts))
# This will loop over all the pst's. Since there's a pagination limit per page (max=1), I have to iterate each page until it's empty
for obj in all_psts:
# Iterate over all the pages per page until it is empty
for i in range(1, 5000):
s = requests.Session()
s.proxies = < my_proxy >
resp = s.get("https://host/v1/psts/{0}/recipients?page={1}".format(obj, i), headers=header, verify=False).json()
if resp: # If theres data, append it to the pst_rec_list variable
pst_rec_list.extend(resp)
elif not resp: # if not stop the loop and go to the next obj
print(str(i)) # To see at which page number it stopped at
break
else:
break
print(len(pst_rec_list))
with open(pst_rec_path, 'w', encoding='utf-8') as file:
json.dump(pst_rec_list, file, ensure_ascii=False, indent=1, sort_keys=False, default=str)
По сути, этот скрипт создает полный список объектов (pst), которых около 245 ... Затем перебирает каждый объект и записывает его данные в файл JSON. Однако, поскольку в этом API существует ограничение на разбиение на страницы (max = 1), мне приходится повторять каждую страницу, пока она не станет пустой. Этот код работает прилично, но занимает вечность. Есть ли более быстрый и эффективный способ l oop на каждой странице, записать данные в файл JSON, а затем, когда на странице ничего нет, остановить текущий объект l oop и go в следующий объект? Я новичок в этом, поэтому любые идеи или предложения могут помочь.