mirror of
https://github.com/sascha-hemi/hacs_waste_collection_schedule.git
synced 2026-03-21 02:04:22 +01:00
Added source for Hobsons Bay City Council. (#1616)
* Added source for Hobsons Bay City Council. * reformatting --------- Co-authored-by: 5ila5 <5ila5@users.noreply.github.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,3 +8,4 @@ custom_components/waste_collection_schedule/waste_collection_schedule/test/secre
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
.venv/
|
.venv/
|
||||||
.idea/
|
.idea/
|
||||||
|
.python-version
|
||||||
@@ -40,6 +40,7 @@ Waste collection schedules in the following formats and countries are supported.
|
|||||||
- [City of Onkaparinga Council](/doc/source/onkaparingacity_com.md) / onkaparingacity.com
|
- [City of Onkaparinga Council](/doc/source/onkaparingacity_com.md) / onkaparingacity.com
|
||||||
- [Cumberland Council (NSW)](/doc/source/cumberland_nsw_gov_au.md) / cumberland.nsw.gov.au
|
- [Cumberland Council (NSW)](/doc/source/cumberland_nsw_gov_au.md) / cumberland.nsw.gov.au
|
||||||
- [Gold Coast City Council](/doc/source/goldcoast_qld_gov_au.md) / goldcoast.qld.gov.au
|
- [Gold Coast City Council](/doc/source/goldcoast_qld_gov_au.md) / goldcoast.qld.gov.au
|
||||||
|
- [Hobsons Bay City Council](/doc/source/hobsonsbay_vic_gov_au.md) / hobsonsbay.vic.gov.au
|
||||||
- [Hume City Council](/doc/source/hume_vic_gov_au.md) / hume.vic.gov.au
|
- [Hume City Council](/doc/source/hume_vic_gov_au.md) / hume.vic.gov.au
|
||||||
- [Inner West Council (NSW)](/doc/source/innerwest_nsw_gov_au.md) / innerwest.nsw.gov.au
|
- [Inner West Council (NSW)](/doc/source/innerwest_nsw_gov_au.md) / innerwest.nsw.gov.au
|
||||||
- [Ipswich City Council](/doc/source/ipswich_qld_gov_au.md) / ipswich.qld.gov.au
|
- [Ipswich City Council](/doc/source/ipswich_qld_gov_au.md) / ipswich.qld.gov.au
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
|
from urllib.parse import urlencode, urljoin
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from waste_collection_schedule import Collection # type: ignore
|
||||||
|
|
||||||
|
TITLE = "Hobsons Bay City Council"
|
||||||
|
DESCRIPTION = "Source for Hobsons Bay City Council waste & recycling collection"
|
||||||
|
URL = "https://www.hobsonsbay.vic.gov.au"
|
||||||
|
TEST_CASES = {
|
||||||
|
"Civic Parade Medical Centre": {"street_address": "399 Queen St, Altona Meadows"},
|
||||||
|
"Hecho En Mexico Altona": {"street_address": "48 Pier St, Altona"},
|
||||||
|
}
|
||||||
|
|
||||||
|
API_URL = "https://hbcc-seven.vercel.app/api/"
|
||||||
|
SEARCH_API_URL = "https://jw7fda7yti-2.algolianet.com/1/indexes/*/queries"
|
||||||
|
SEARCH_APPLICATION_ID = "JW7FDA7YTI"
|
||||||
|
SEARCH_API_KEY = "7a3b39eba83ef97796c682e6a749be71"
|
||||||
|
ICON_MAP = {
|
||||||
|
"Rubbish": "mdi:trash-can-outline",
|
||||||
|
"Commingled Recycling": "mdi:recycle",
|
||||||
|
"Food and Garden": "mdi:leaf",
|
||||||
|
"Glass": "mdi:glass-fragile",
|
||||||
|
}
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Source:
|
||||||
|
def __init__(self, street_address: str):
|
||||||
|
self._street_address = street_address
|
||||||
|
|
||||||
|
def fetch(self):
|
||||||
|
_LOGGER.debug(f"Searching for address {self._street_address}")
|
||||||
|
|
||||||
|
search_params = {
|
||||||
|
"x-algolia-api-key": SEARCH_API_KEY,
|
||||||
|
"x-algolia-application-id": SEARCH_APPLICATION_ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
# &query=&tagFilters=
|
||||||
|
|
||||||
|
search_data = {
|
||||||
|
"requests": [
|
||||||
|
{
|
||||||
|
"indexName": "addresses",
|
||||||
|
"params": urlencode(
|
||||||
|
{
|
||||||
|
"facets": [],
|
||||||
|
"highlightPostTag": "</ais-highlight-0000000000>",
|
||||||
|
"highlightPreTag": "<ais-highlight-0000000000>",
|
||||||
|
"hitsPerPage": 1, # no point in fetching more without a UI to select
|
||||||
|
"query": self._street_address,
|
||||||
|
"tagFilters": "",
|
||||||
|
}
|
||||||
|
),
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
search_response = requests.post(
|
||||||
|
SEARCH_API_URL, params=search_params, json=search_data
|
||||||
|
)
|
||||||
|
|
||||||
|
search_response.raise_for_status()
|
||||||
|
match = search_response.json()["results"][0]["hits"][0]
|
||||||
|
|
||||||
|
_LOGGER.debug(f"Search result: {match}")
|
||||||
|
|
||||||
|
asn = match["Assessment Number"]
|
||||||
|
|
||||||
|
_LOGGER.info(f"ASN: {asn}")
|
||||||
|
|
||||||
|
addresses_params = {"asn": asn}
|
||||||
|
addresses_endpoint = urljoin(API_URL, "addresses")
|
||||||
|
addresses_response = requests.get(addresses_endpoint, params=addresses_params)
|
||||||
|
addresses_response.raise_for_status()
|
||||||
|
address = addresses_response.json()["rows"][0]
|
||||||
|
|
||||||
|
day = address["day"]
|
||||||
|
area = address["area"]
|
||||||
|
|
||||||
|
_LOGGER.debug(f"Address result: {address}")
|
||||||
|
_LOGGER.info(f"Day: {day}, Area: {area}")
|
||||||
|
|
||||||
|
schedules_params = {"day": day, "area": area}
|
||||||
|
schedules_endpoint = urljoin(API_URL, "schedules")
|
||||||
|
schedules_response = requests.get(schedules_endpoint, params=schedules_params)
|
||||||
|
schedules_response.raise_for_status()
|
||||||
|
schedules = schedules_response.json()["rows"]
|
||||||
|
|
||||||
|
_LOGGER.debug(f"Schedules: {schedules}")
|
||||||
|
|
||||||
|
entries = [
|
||||||
|
Collection(
|
||||||
|
date=datetime.strptime(s["date"], "%d/%m/%Y").date(),
|
||||||
|
t=s["bin_type"],
|
||||||
|
icon=ICON_MAP.get(s["bin_type"], "Rubbish"),
|
||||||
|
)
|
||||||
|
for s in schedules
|
||||||
|
]
|
||||||
|
|
||||||
|
return entries
|
||||||
32
doc/source/hobsonsbay_vic_gov_au.md
Normal file
32
doc/source/hobsonsbay_vic_gov_au.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Hobsons Bay City Council
|
||||||
|
|
||||||
|
Support for schedules provided by [Hobsons Bay City Council](https://www.hobsonsbay.vic.gov.au).
|
||||||
|
|
||||||
|
## Configuration via configuration.yaml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
waste_collection_schedule:
|
||||||
|
sources:
|
||||||
|
- name: hobsonsbay_vic_gov_au
|
||||||
|
args:
|
||||||
|
street_address: STREET_ADDRESS
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration Variables
|
||||||
|
|
||||||
|
**street_address**
|
||||||
|
*(string) (required)*
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
waste_collection_schedule:
|
||||||
|
sources:
|
||||||
|
- name: hobsonsbay_vic_gov_au
|
||||||
|
args:
|
||||||
|
street_address: 399 Queen St, Altona Meadows
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to get the source arguments
|
||||||
|
|
||||||
|
Visit the [Hobsons Bay City Council: When will my bins be collected?](https://www.hobsonsbay.vic.gov.au/Services/Waste-Recycling/When-will-my-bins-be-collected) page to install the iOS or Android app, then search for your address. The `street_address` argument should exactly match the street address shown in the autocomplete result of the app. If you do not want to install the app, you can also use the [interactive waste collections map](https://hbcc.maps.arcgis.com/apps/webappviewer/index.html?id=4db29582f74b4ba2ab2152fedeefe7b1) to search for a supported address. However, note that it does not always match what the API expects.
|
||||||
Reference in New Issue
Block a user