From 8eb11016d70701fbd19f7b6e7c76eadb283bb8ce Mon Sep 17 00:00:00 2001 From: mampfes Date: Sat, 4 Feb 2023 09:05:02 +0100 Subject: [PATCH] refactor wollongongwaste_com_au --- .../source/wollongongwaste_com_au.py | 59 ++++++++----------- doc/source/wollongongwaste_com_au.md | 40 +++++-------- 2 files changed, 41 insertions(+), 58 deletions(-) diff --git a/custom_components/waste_collection_schedule/waste_collection_schedule/source/wollongongwaste_com_au.py b/custom_components/waste_collection_schedule/waste_collection_schedule/source/wollongongwaste_com_au.py index dc271f3a..1643af9c 100644 --- a/custom_components/waste_collection_schedule/waste_collection_schedule/source/wollongongwaste_com_au.py +++ b/custom_components/waste_collection_schedule/waste_collection_schedule/source/wollongongwaste_com_au.py @@ -1,5 +1,4 @@ -import json -from datetime import datetime, date, timedelta +from datetime import date, datetime, timedelta import requests from waste_collection_schedule import Collection @@ -8,12 +7,16 @@ TITLE = "Wollongong Council" DESCRIPTION = "Source script for wollongongwaste.com.au" URL = "https://wollongongwaste.com" COUNTRY = "au" -TEST_CASES = { - "TestName1": {"propertyID": "21444"} -} +TEST_CASES = {"TestName1": {"propertyID": "21444"}} API_URL = "https://wollongong.waste-info.com.au/api/v1/properties/" +ICON_MAP = { + "waste": "mdi:trash-can", + "organic": "mdi:leaf", + "recycle": "mdi:recycle", +} + def day_of_week(start_date, end_date, day_of_week_index): day_of_week_dates = [] @@ -23,57 +26,45 @@ def day_of_week(start_date, end_date, day_of_week_index): start_date += timedelta(days=1) return day_of_week_dates + class Source: - def __init__(self,propertyID): + def __init__(self, propertyID): self._propertyID = propertyID - self._url = API_URL def fetch(self): # Have to specify a start and end, or the API returns nothing. So lets request this year, and next year. # start=2022-12-31T13:00:00.000Z&end=2024-12-30T13:00:00.000Z - startdate = datetime(date.today().year-1, 12, 31, 13, 0, 0) - enddate = datetime(date.today().year+1, 12, 31, 13, 0, 0) + startdate = datetime(date.today().year - 1, 12, 31, 13, 0, 0) + enddate = datetime(date.today().year + 1, 12, 31, 13, 0, 0) data = { "start": startdate.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), - "end": enddate.strftime("%Y-%m-%dT%H:%M:%S.%fZ") + "end": enddate.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), } - r = requests.get(f"{self._url}{self._propertyID}.json", data=data) + r = requests.get(f"{API_URL}{self._propertyID}.json", data=data) + r.raise_for_status() d = r.json() entries = [] for entry in d: - if entry['event_type'] == "waste": - dow = entry['daysOfWeek'] - for day in dow: - for pickupdate in day_of_week(startdate, enddate, day-1): + waste_type = entry["event_type"] + if waste_type in ("waste", "organic"): + for day in entry["daysOfWeek"]: + for pickupdate in day_of_week(startdate, enddate, day - 1): entries.append( Collection( date=pickupdate.date(), - t="Waste to Landfill (Red)", - icon = "mdi:trash-can" + t=waste_type, + icon=ICON_MAP.get(waste_type), ) ) - if entry['event_type'] == "organic": - dow = entry['daysOfWeek'] - for day in dow: - for pickupdate in day_of_week(startdate, enddate, day-1): - print(pickupdate) - entries.append( - Collection( - date=pickupdate.date(), - t="FOGO (Green)", - icon = "mdi:leaf", - ) - ) - if entry['event_type'] == "recycle": + if waste_type in ("recycle"): entries.append( Collection( - date=date(*map(int, entry['start'].split('-'))), - t="Recycling (Yelllow)", - icon="mdi:recycle" + date=date(*map(int, entry["start"].split("-"))), + t=waste_type, + icon=ICON_MAP.get(waste_type), ) ) return entries - diff --git a/doc/source/wollongongwaste_com_au.md b/doc/source/wollongongwaste_com_au.md index 9a93beb3..1fe99113 100644 --- a/doc/source/wollongongwaste_com_au.md +++ b/doc/source/wollongongwaste_com_au.md @@ -14,42 +14,34 @@ waste_collection_schedule: ### Configuration Variables -### Configuration Variables - -**propertyID**
+**propertyID** *(string) (mandatory)* -This is required. +### How to find your propertyID +Go to +amd get the locality ID from the above json. -#### How to find your `propertyID` +Add it as `locality=` to the Street query, +e.g.: +Get the street ID from the above json. -Get your locality. - -https://wollongong.waste-info.com.au/api/v1/localities.json -get the locality ID from the above json. - -Add it as locality= to the Street query - eg: https://wollongong.waste-info.com.au/api/v1/streets.json?locality=19 -Get the street ID from the above json - -Add it as street= to the property query - eg: https://wollongong.waste-info.com.au/api/v1/properties.json?street=663 -get the property ID from the above json. +Add it as `street=` to the property query, +e.g.: +Get the property ID from the above json. This is your propertyID This is all you need to directly query your calendar json in future, you can skip all the above steps once you know your property ID -You could also use [Waste Calendar](https://www.wollongongwaste.com.au/calendar/) with developer tools open on the Network tab, look up your address, and make note of the filename in the last request. It will be in the format .json - eg: https://wollongong.waste-info.com.au/api/v1/properties/21444.json?start=2022-12-31T13:00:00.000Z&end=2023-12-30T13:00:00.000Z +You could also use [Waste Calendar](https://www.wollongongwaste.com.au/calendar/) with developer tools open on the Network tab, look up your address, and make note of the filename in the last request. It will be in the format `.json`, e.g.: +## Example -## Example using UPRN ```yaml waste_collection_schedule: - sources: - - name: wollongongwaste_com_au - args: - uprn: 21444 + sources: + - name: wollongongwaste_com_au + args: + propertyID: 21444 ```