57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
import requests
|
|
import csv
|
|
import time
|
|
|
|
API_URL = "https://www.sereiaguardia.com.br/web_api/orders/:orderId/complete?access_token=APP_ID-6197-STORE_ID-1018776-7a249468d35d27e5b151a11228bc88a1d2db55edb59b4a6477ec9b04e7aa703c"
|
|
OUTPUT_CSV = "orders.csv"
|
|
RATE_LIMIT_SECONDS = 0.5 # 60 req/min = 1 req/sec
|
|
|
|
# Optional authentication
|
|
HEADERS = {
|
|
# "Authorization": "Bearer TOKEN",
|
|
# "Accept": "application/json"
|
|
}
|
|
|
|
def fetch_order(order_id):
|
|
"""Fetch a single order."""
|
|
url = API_URL.replace(":orderId", str(order_id))
|
|
response = requests.get(url, headers=HEADERS, timeout=10)
|
|
response.raise_for_status() # will throw if request fails
|
|
return response.json()
|
|
|
|
def main():
|
|
# Create CSV file and write headers after fetching first row
|
|
first_row_written = False
|
|
|
|
with open(OUTPUT_CSV, mode="w", newline="", encoding="utf-8") as file:
|
|
writer = None
|
|
|
|
for order_id in range(1, 2001):
|
|
try:
|
|
data = fetch_order(order_id)
|
|
|
|
# Create the CSV writer and header dynamically from the JSON keys
|
|
if not first_row_written:
|
|
fieldnames = data.keys()
|
|
writer = csv.DictWriter(file, fieldnames=fieldnames)
|
|
writer.writeheader()
|
|
first_row_written = True
|
|
|
|
# Write the row
|
|
writer.writerow(data)
|
|
|
|
print(f"Saved order {order_id}")
|
|
|
|
except requests.exceptions.HTTPError as err:
|
|
print(f"HTTP error for order {order_id}: {err}")
|
|
except Exception as err:
|
|
print(f"Error for order {order_id}: {err}")
|
|
|
|
# Respect rate limit
|
|
time.sleep(RATE_LIMIT_SECONDS)
|
|
|
|
print("Done!")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|