refactor wollongongwaste_com_au

This commit is contained in:
mampfes
2023-02-04 09:05:02 +01:00
parent 006359c0dc
commit 8eb11016d7
2 changed files with 41 additions and 58 deletions

View File

@@ -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

View File

@@ -14,42 +14,34 @@ waste_collection_schedule:
### Configuration Variables
### Configuration Variables
**propertyID**<br>
**propertyID**
*(string) (mandatory)*
This is required.
### How to find your propertyID
Go to <https://wollongong.waste-info.com.au/api/v1/localities.json>
amd get the locality ID from the above json.
#### How to find your `propertyID`
Add it as `locality=<id>` to the Street query,
e.g.: <https://wollongong.waste-info.com.au/api/v1/streets.json?locality=19>
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=<id> 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=<id> 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=<id>` to the property query,
e.g.: <https://wollongong.waste-info.com.au/api/v1/properties.json?street=663>
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 <propertyID>.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 `<propertyID>.json`, e.g.: <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>
## Example
## Example using UPRN
```yaml
waste_collection_schedule:
sources:
- name: wollongongwaste_com_au
args:
uprn: 21444
sources:
- name: wollongongwaste_com_au
args:
propertyID: 21444
```