@hunden har rätt. 1 sek räckte inte som fördröjning. Jag höftade bara till något som verkade fungera och det råkade bli för kort. Jag försökte bygga in en check och loop tills det lyckades, men det var en dålig implementation som inte visste skillnad på när det inte fanns någon acceptor
och när man slog i ratelimiten. När du sedan lade till en break
började den skippa när man blev ratelimitad istället för att loopa som min optimistiska plan var. Aja, jag varnade åtminstone för att felhanteringen var dålig.
Bifogar (förhoppningsvis) bättre fungerande kod med någorlunda genomtänkt hantering av de fel som du märkt kan uppstå plus lite bonusar som att skippa redan processerade rader och marginellt mer informativ output.
Klicka för mer information
import requests, json, openpyxl, time
APIKEY = "honken, tomten och louis pasteur"
EXCEL_FILE = "book.xlsx"
wb = openpyxl.load_workbook(EXCEL_FILE)
s = requests.Session()
for row in wb.active.iter_rows(min_row=2):
id = row[0].value
if not id: # no more ids -> end of list?
break
if row[1].value: # skip already processed rows
continue
print("\nProcessing:", id)
while True:
try:
r = s.get("https://ds.postnord.com/v2/trackandtrace/findByIdentifier.jso...", params={
"id": id,
"locale": "sv",
"apikey": APIKEY,
})
a = json.loads(r.text)
row[1].value = a["TrackingInformationResponse"]["shipments"][0]["items"][0]["acceptor"]["name"]
time.sleep(1)
wb.save(EXCEL_FILE)
print("Success")
except KeyError as e:
if str(e) == "'TrackingInformationResponse'":
print("Rate limited, trying again in 1 second")
time.sleep(1)
continue
elif str(e) == "'acceptor'":
print("No acceptor found. Need to process manually?")
print("Skipping")
else:
print("Other KeyError:", e)
# vet inte om det här händer någon gång
print("Skipping")
except IndexError as e:
print("IndexError:", e)
print("Is tracking ID valid?")
# vet inte hur du vill hantera detta, så skippar bara
print("Skipping")
break
Visa mer