57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
import os
|
|
import requests
|
|
from time import sleep
|
|
|
|
# --- Configuration ---
|
|
TCGDEX_API = "https://api.tcgdex.net/v2/de/cards"
|
|
OUTPUT_FOLDER = "cards"
|
|
REQUEST_DELAY = 0.1 # seconds between requests to avoid rate limiting
|
|
|
|
# Create output folder if not exists
|
|
os.makedirs(OUTPUT_FOLDER, exist_ok=True)
|
|
|
|
# Fetch card list from TCGdex
|
|
print("Fetching card list...")
|
|
resp = requests.get(TCGDEX_API)
|
|
if resp.status_code != 200:
|
|
raise Exception(f"Failed to fetch card list: {resp.status_code}")
|
|
cards = resp.json()
|
|
print(f"Total cards fetched: {len(cards)}")
|
|
|
|
# Download each card image
|
|
for card in cards:
|
|
card_id = card.get("id", None)
|
|
image_base = card.get("image", None)
|
|
|
|
if not card_id:
|
|
print("Skipping card with missing ID:", card)
|
|
continue
|
|
|
|
if not image_base:
|
|
print(f"No image URL for {card_id}, skipping...")
|
|
continue
|
|
|
|
image_url = image_base + "/high.png"
|
|
output_path = os.path.join(OUTPUT_FOLDER, f"{card_id}.png")
|
|
|
|
# Skip if already downloaded
|
|
if os.path.exists(output_path):
|
|
print(f"Already exists: {card_id}")
|
|
continue
|
|
|
|
try:
|
|
r = requests.get(image_url, stream=True)
|
|
if r.status_code == 200:
|
|
with open(output_path, "wb") as f:
|
|
for chunk in r.iter_content(1024):
|
|
f.write(chunk)
|
|
print(f"Downloaded: {card_id}")
|
|
else:
|
|
print(f"Failed to download {card_id}: HTTP {r.status_code}")
|
|
except Exception as e:
|
|
print(f"Error downloading {card_id}: {e}")
|
|
|
|
sleep(REQUEST_DELAY) # small delay to be polite
|
|
|
|
print("All done!")
|