Files
studspider/src/bricksetapi.py
T
2025-10-09 12:35:28 -07:00

61 lines
2.1 KiB
Python

import os
import requests
import json
import dotenv
dotenv.load_dotenv()
USERNAME = os.getenv("BRICKSET_USERNAME")
PASS = os.getenv("BRICKSET_PASS")
BRICKSET_API_KEY = os.getenv("BRICKSET_API_KEY")
debug = False # Set to True to enable debug output
def login(username, password):
url = "https://brickset.com/api/v3.asmx/login"
headers = {"UserAgent": "Edderkop/0.1"}
params = {
"UserAgent": "Edderkop/0.1",
"username": username,
"password": password,
"apiKey": BRICKSET_API_KEY,
}
response = requests.get(url, params=params, headers=headers)
if debug:
print(f"[@DEBUG] Login response: {response.status_code} - {response.text}\n")
return response.json()
def get_set(set_number: int) -> dict:
login_response = login(USERNAME, PASS)
url = f"https://brickset.com/api/v3.asmx/getSets?apiKey={BRICKSET_API_KEY}&userHash={login_response["hash"]}&params={{'setNumber' : '{set_number}-1'}}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
our_set = {
"set_num": data["sets"][0]["number"],
"set_name": data["sets"][0]["name"],
"set_theme": data["sets"][0]["theme"],
"set_image": data["sets"][0]["image"]["thumbnailURL"],
"set_barcode": data["sets"][0]["barcode"]["UPC"],
"set_retailprice": round(data["sets"][0]["LEGOCom"]["US"]["retailPrice"]),
}
# add PW 10% b4 tax
our_set.update(
{"set_adjustredprice": our_set + ((10 / 100) * our_set["set_retailprice"])}
)
our_set["pw_name"] = (
f"{our_set['set_num']} - {our_set["set_theme"].upper()} {our_set['set_name']}"
)
if our_set["set_retailprice"] >= 110:
our_set["requires_manual_price"] = True
return our_set
elif response.status_code == 500:
raise Exception(
"Internal Server Error: Please check the API key and parameters."
)
else:
raise Exception("Unexpected response from the API.")