add merri_bek_vic_gov_au source

* Add Merri-bek City Council, Australia

Add source for Merri-bek City Council, Australia via API.

- Add doc/source/merri_bek_vic_gov_au.md
- Add source/merri_bek_vic_gov_au.py
- Update README.md
- Update info.md
This commit is contained in:
Damien Kingsley
2024-01-05 22:17:37 +11:00
committed by 5ila5
parent 50f24b9d06
commit 80d4c7aa00
4 changed files with 136 additions and 1 deletions

View File

@@ -52,6 +52,7 @@ Waste collection schedules in the following formats and countries are supported.
- [Maribyrnong Council](/doc/source/maribyrnong_vic_gov_au.md) / maribyrnong.vic.gov.au/Residents/Bins-and-recycling
- [Maroondah City Council](/doc/source/maroondah_vic_gov_au.md) / maroondah.vic.gov.au
- [Melton City Council](/doc/source/melton_vic_gov_au.md) / melton.vic.gov.au
- [Merri-bek City Council](/doc/source/merri_bek_vic_gov_au.md) / merri-bek.vic.gov.au
- [Moreton Bay](/doc/ics/moretonbay_qld_gov_au.md) / moretonbay.qld.gov.au
- [Nillumbik Shire Council](/doc/source/nillumbik_vic_gov_au.md) / nillumbik.vic.gov.au
- [North Adelaide Waste Management Authority](/doc/source/nawma_sa_gov_au.md) / nawma.sa.gov.au

View File

@@ -0,0 +1,102 @@
from datetime import datetime
import requests
from waste_collection_schedule import Collection # type: ignore[attr-defined]
TITLE = "Merri-bek City Council"
DESCRIPTION = "Source for Merri-bek City Council (VIC) rubbish collection."
URL = "https://www.merri-bek.vic.gov.au"
TEST_CASES = {
"Monday": {
"address": "1 Widford Street Glenroy 3046",
},
"Tuesday": {
"address": "1 Gaffney Street Coburg 3058",
},
"Wednesday": {
"address": "1 Shorts Road Coburg North 3058",
},
"Thursday": {
"address": "1 Glenroy Road Glenroy 3046",
},
"Friday": {
"address": "1 Major Road Fawkner 3060",
},
"Glass Drop Off": {
"address": "1 Elesbury Avenue Brunswick East 3057",
},
}
ICON_MAP = {
"Rubbish": "mdi:trash-can",
"Recycling": "mdi:recycle",
"Glass": "mdi:glass-fragile",
"Green": "mdi:leaf",
}
COLLECTIONS = {
"AllBinDays": ["Rubbish", "Green"],
"AllGlassDays": ["Glass"],
"AllRecycleDays": ["Recycling"],
}
class Source:
def __init__(self, address):
self.address = address
def fetch(self):
PARAMS = {
"where": f"EZI_Address LIKE '{self.address}%'",
"outFields": "EZI_Address,Waste_Rate_Code,Recycling_Rate_Code,FOGO_Rate_Code,Glass_Rate_Code,Day,Zone,GlassWeek",
"returnGeometry": "true",
"f": "json",
}
url = "https://services6.arcgis.com/8L5sOwfzTAvcvQur/ArcGIS/rest/services/WasteServices4Bin/FeatureServer/0/query/"
r = requests.get(
url,
params=PARAMS,
)
r.raise_for_status()
data = r.json()
features = data.get("features")
if not features:
raise Exception("address not found")
attributes = features[0]["attributes"]
PARAMS = {
"wasteDay": attributes["Day"],
"wasteRateCode": attributes["Waste_Rate_Code"],
"recycleRateCode": attributes["Recycling_Rate_Code"],
"fogoRateCode": attributes["FOGO_Rate_Code"],
"glassRateCode": attributes["Glass_Rate_Code"],
"zone": attributes["Zone"],
"glassWeekNumber": attributes["GlassWeek"],
"address": attributes["EZI_Address"],
"cpage": "94106",
}
url = "https://www.merri-bek.vic.gov.au/gis/AddressDetails.svc/fourbins/"
r = requests.get(
url,
params=PARAMS,
)
r.raise_for_status()
data = r.json()[0]
entries = [
Collection(
date=datetime.strptime(collection_date, "%d-%m-%Y").date(),
t=waste_name,
icon=ICON_MAP.get(waste_name),
)
for collection_name, waste_names in COLLECTIONS.items()
if collection_name in data
for collection_date in data[collection_name]
for waste_name in waste_names
]
return entries

View File

@@ -0,0 +1,32 @@
# Merri-bek City Council (VIC)
Support for schedules provided by [Merri-bek City Council (VIC)](https://www.merri-bek.vic.gov.au/living-in-merri-bek/waste-and-recycling/bins-and-collection-services/).
## Configuration via configuration.yaml
```yaml
waste_collection_schedule:
sources:
- name: merri_bek_vic_gov_au
args:
address: address
```
### Configuration Variables
**address**
*(String) (required)*
## Example
```yaml
waste_collection_schedule:
sources:
- name: merri_bek_vic_gov_au
args:
address: 90 Bell Street Coburg 3058
```
## How to get the source arguments
Search your address on [Merri-bek City Council's Website](https://www.merri-bek.vic.gov.au/living-in-merri-bek/waste-and-recycling/bins-and-collection-services/) to ensure you use the correct address format. Start typing the full address and the use autocomplete to search. After results have been found, copy the address exactly as it appears in the search box.

File diff suppressed because one or more lines are too long