Merge pull request #661 from daffster/wollongongwaste_com_au

Add support for Wollongong, Australia
This commit is contained in:
Steffen Zimmermann
2023-02-04 08:46:26 +01:00
committed by GitHub
4 changed files with 136 additions and 1 deletions

View File

@@ -44,6 +44,7 @@ Waste collection schedules in the following formats and countries are supported.
- [RecycleSmart](/doc/source/recyclesmart_com.md) / recyclesmart.com
- [Stonnington City Council](/doc/source/stonnington_vic_gov_au.md) / stonnington.vic.gov.au
- [The Hills Shire Council, Sydney](/doc/source/thehills_nsw_gov_au.md) / thehills.nsw.gov.au
- [Wollongong City Council](/doc/source/wollongongwaste_com_au.md) / wollongongwaste.com.au
- [Wyndham City Council, Melbourne](/doc/source/wyndham_vic_gov_au.md) / wyndham.vic.gov.au
</details>

View File

@@ -0,0 +1,79 @@
import json
from datetime import datetime, date, timedelta
import requests
from waste_collection_schedule import Collection
TITLE = "Wollongong Council"
DESCRIPTION = "Source script for wollongongwaste.com.au"
URL = "https://wollongongwaste.com"
COUNTRY = "au"
TEST_CASES = {
"TestName1": {"propertyID": "21444"}
}
API_URL = "https://wollongong.waste-info.com.au/api/v1/properties/"
def day_of_week(start_date, end_date, day_of_week_index):
day_of_week_dates = []
while start_date <= end_date:
if start_date.weekday() == day_of_week_index:
day_of_week_dates.append(start_date)
start_date += timedelta(days=1)
return day_of_week_dates
class Source:
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)
data = {
"start": startdate.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)
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):
entries.append(
Collection(
date=pickupdate.date(),
t="Waste to Landfill (Red)",
icon = "mdi:trash-can"
)
)
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":
entries.append(
Collection(
date=date(*map(int, entry['start'].split('-'))),
t="Recycling (Yelllow)",
icon="mdi:recycle"
)
)
return entries

View File

@@ -0,0 +1,55 @@
# Wollongong City Council
Support for schedules provided by [Wollongong Waste](https://www.wollongongwaste.com.au/), serving Wollongong Council in the Illawara, New South Wales, Australia
## Configuration via configuration.yaml
```yaml
waste_collection_schedule:
sources:
- name: wollongongwaste_com_au
args:
propertyID: UNIQUE_PROPERTY_ID
```
### Configuration Variables
### Configuration Variables
**propertyID**<br>
*(string) (mandatory)*
This is required.
#### How to find your `propertyID`
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.
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
## Example using UPRN
```yaml
waste_collection_schedule:
sources:
- name: wollongongwaste_com_au
args:
uprn: 21444
```

View File

@@ -16,7 +16,7 @@ Waste collection schedules from service provider web sites are updated daily, de
|--|--|
| Generic | ICS / iCal files |
| Static | User-defined dates or repeating date patterns |<!--Begin of country section-->
| Australia | Banyule City Council, Belmont City Council, Brisbane City Council, Campbelltown City Council, City of Canada Bay Council, Gold Coast City Council, Inner West Council (NSW), Ipswich City Council, Ku-ring-gai Council, Lake Macquarie City Council, Macedon Ranges Shire Council, Maribyrnong Council, Maroondah City Council, Melton City Council, Nillumbik Shire Council, North Adelaide Waste Management Authority, RecycleSmart, Stonnington City Council, The Hills Shire Council, Sydney, Wyndham City Council, Melbourne |
| Australia | Banyule City Council, Belmont City Council, Brisbane City Council, Campbelltown City Council, City of Canada Bay Council, Gold Coast City Council, Inner West Council (NSW), Ipswich City Council, Ku-ring-gai Council, Lake Macquarie City Council, Macedon Ranges Shire Council, Maroondah City Council, Maribyrnong Council, Melton City Council, Nillumbik Shire Council, North Adelaide Waste Management Authority, RecycleSmart, Stonnington City Council, The Hills Shire Council, Sydney, Wyndham City Council, Melbourne, Wollongong City Council |
| Austria | Burgenländischer Müllverband, infeo, Stadtservice Korneuburg, Umweltprofis, WSZ Moosburg |
| Belgium | Hygea, Recycle! |
| Canada | City of Toronto |