96 lines
3.5 KiB
Python
Executable File
96 lines
3.5 KiB
Python
Executable File
from datetime import datetime
|
|
import json
|
|
import httpx
|
|
import xmltodict
|
|
|
|
|
|
async def get_msreg(track):
|
|
base_url = "https://api.motorsportreg.com/rest/calendars/organization"
|
|
orgs = {
|
|
"speeddistrict": "2E22740B-E8C9-9FB9-21406A496429A28B",
|
|
"ongrid": "06277C99-00C9-23EB-FD08FE5275BCC0C5",
|
|
"speedsf": "072A885E-AD68-6F64-E88C19E4D0D21DFB",
|
|
"turn8": "F3469266-BEFF-E329-4FD6C4B189ACE2A8",
|
|
"speedventures": "DF7453ED-BF33-DC17-2C9BFD84C1F05E86",
|
|
"nextlevel": "CC23AEA4-AAB1-D087-4A10818D229DAFD2",
|
|
"lightspeed": "BC6417B8-0ED9-DD48-28BA1463C2C14322",
|
|
"socaldriversclub": "B4FC0113-C903-E9D3-68562D6765806945",
|
|
}
|
|
events = {}
|
|
client = httpx.AsyncClient()
|
|
|
|
if track == "Both":
|
|
tracks_we_care_about = ["buttonwillow", "thunderhill"]
|
|
else:
|
|
tracks_we_care_about = [track.lower()]
|
|
|
|
for org_name, org_id in orgs.items():
|
|
xml_blob = await client.get(
|
|
"%s/%s?exclude_cancelled=true&postalcode=94549&radius=500"
|
|
% (base_url, org_id)
|
|
)
|
|
awaited_xml_blob = xml_blob.text
|
|
json_blob = json.loads(
|
|
json.dumps(xmltodict.parse(awaited_xml_blob)["response"]["events"])
|
|
)
|
|
|
|
# If an organizer only has one upcoming event on MSReg, it is a dict, otherwise its a list of dicts
|
|
# My code assumes list of dicts, so wrap the event dict in a list of 1 item
|
|
if json_blob and isinstance(json_blob["event"], dict):
|
|
json_blob["event"] = [json_blob["event"]]
|
|
|
|
try:
|
|
for event in json_blob["event"]:
|
|
if any(x in event["name"].lower() for x in tracks_we_care_about):
|
|
event_object = {
|
|
"event_organizer": event["organization"]["name"],
|
|
"event_name": event["name"],
|
|
"event_url": event["detailuri"].split("?utm")[0],
|
|
"event_date": event["start"],
|
|
}
|
|
track = event["venue"]["name"]
|
|
if track not in events:
|
|
events[track] = []
|
|
events[track].append(event_object)
|
|
for track, track_events in events.items():
|
|
events[track] = sorted(
|
|
track_events,
|
|
key=lambda event: datetime.fromisoformat(
|
|
event["event_date"]
|
|
),
|
|
)
|
|
|
|
except Exception as e:
|
|
print("Errored on %s" % org_name)
|
|
print(e)
|
|
pass
|
|
|
|
return events
|
|
|
|
|
|
def get_corsa_club():
|
|
base_url = "https://corsa.club"
|
|
events = {}
|
|
products_blob = requests.get(base_url + "/products.json").json()["products"]
|
|
for event in products_blob:
|
|
# Filter out hoodies and what not, only care about track days that list run-groups as the options
|
|
if any("Intermediate" in s for s in event["options"][0]["values"]):
|
|
event_object = {
|
|
"event_name": event["title"],
|
|
"event_url": base_url + "/products/" + event["handle"],
|
|
"event_date": event["title"].split()[-1],
|
|
}
|
|
track = " ".join(event["title"].split()[0:-1])
|
|
try:
|
|
if track not in events:
|
|
events[track] = []
|
|
events[track].append(event_object)
|
|
except TypeError:
|
|
pass
|
|
|
|
return events
|
|
|
|
|
|
# if __name__ == '__main__':
|
|
# get_corsa_club()
|