mirror of
https://github.com/sascha-hemi/hacs_waste_collection_schedule.git
synced 2026-03-21 02:04:22 +01:00
refactor heilbronn_de
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
from waste_collection_schedule import Collection # type: ignore[attr-defined]
|
||||
from waste_collection_schedule.service.ICS import ICS
|
||||
|
||||
@@ -13,31 +14,29 @@ TEST_CASES = {
|
||||
"hausnr": 33,
|
||||
},
|
||||
"Biberach": {
|
||||
"strasse":"Kehrhüttenstraße",
|
||||
"strasse": "Kehrhüttenstraße",
|
||||
"plz": 74078,
|
||||
"hausnr": "90",
|
||||
"hausnr": "90",
|
||||
},
|
||||
"klingenberg:": {
|
||||
"strasse":"Wittumhalde",
|
||||
"Klingenberg:": {
|
||||
"strasse": "Wittumhalde",
|
||||
"plz": "74081",
|
||||
"hausnr": 75,
|
||||
"hausnr": 75,
|
||||
},
|
||||
"klingenberg:": {
|
||||
"strasse":"Wittumhalde",
|
||||
"Klingenberg (hausnr as string):": {
|
||||
"strasse": "Wittumhalde",
|
||||
"plz": "74081",
|
||||
"hausnr": "75",
|
||||
"hausnr": "75",
|
||||
},
|
||||
"Rosenbergstraße": {
|
||||
"strasse":"Rosenbergstraße",
|
||||
"Rosenbergstraße 53": {
|
||||
"strasse": "Rosenbergstraße",
|
||||
"plz": "74074",
|
||||
"hausnr": "53",
|
||||
|
||||
"hausnr": "53",
|
||||
},
|
||||
"Rosenbergstraße2": {
|
||||
"strasse":"Rosenbergstraße",
|
||||
"Rosenbergstraße 41": {
|
||||
"strasse": "Rosenbergstraße",
|
||||
"plz": "74072",
|
||||
"hausnr": "41",
|
||||
|
||||
"hausnr": "41",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -50,6 +49,7 @@ ICON_MAP = {
|
||||
"BT": "mdi:package-variant",
|
||||
}
|
||||
|
||||
|
||||
class Source:
|
||||
def __init__(self, plz: int, strasse: str, hausnr: str | int):
|
||||
self._plz: str = str(plz)
|
||||
@@ -59,61 +59,72 @@ class Source:
|
||||
|
||||
def fetch(self):
|
||||
r = requests.get(
|
||||
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/street.json")
|
||||
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/street.json"
|
||||
)
|
||||
r.raise_for_status()
|
||||
streets: dict = r.json()
|
||||
|
||||
|
||||
#all the data is spilt in to two files for diffrent kinds of trash
|
||||
# all the data is spilt in to two files for different kinds of trash
|
||||
year_response = requests.get(
|
||||
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/yearObject.json")
|
||||
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/yearObject.json"
|
||||
)
|
||||
year_response.raise_for_status()
|
||||
|
||||
yearB_response = requests.get("https://abfallratgeber.heilbronn.de/excel_hn/htdocs/yearBObject.json")
|
||||
|
||||
yearB_response = requests.get(
|
||||
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/yearBObject.json"
|
||||
)
|
||||
yearB_response.raise_for_status()
|
||||
|
||||
|
||||
days_list: list[dict] = [year_response.json(),yearB_response.json()]
|
||||
|
||||
days_list: list[dict] = [year_response.json(), yearB_response.json()]
|
||||
|
||||
keys = []
|
||||
|
||||
|
||||
# get the values to search for in the json and save them in keys
|
||||
for street in streets:
|
||||
|
||||
if (street['route'] == self._strasse) and (street['postal_code'] == self._plz):
|
||||
|
||||
if ("street_number" in street) and (self._hausnr not in street['street_number']):
|
||||
|
||||
if (street["route"] == self._strasse) and (
|
||||
street["postal_code"] == self._plz
|
||||
):
|
||||
|
||||
if ("street_number" in street) and (
|
||||
self._hausnr not in street["street_number"]
|
||||
):
|
||||
continue
|
||||
keys = []
|
||||
for key in list({street['area'], street['g'], street['bt']}):
|
||||
for key in list({street["area"], street["g"], street["bt"]}):
|
||||
keys.append(key)
|
||||
if "-" in key:
|
||||
keys.append(key.split("-")[0])
|
||||
break
|
||||
|
||||
if keys == []:
|
||||
raise Exception("no address found for " + self._strasse + " " + self._hausnr + " " + self._plz)
|
||||
|
||||
|
||||
raise Exception(
|
||||
"no address found for "
|
||||
+ self._strasse
|
||||
+ " "
|
||||
+ self._hausnr
|
||||
+ " "
|
||||
+ self._plz
|
||||
)
|
||||
|
||||
entries = []
|
||||
# iterate over both json files and search for the keys
|
||||
for days in days_list:
|
||||
# iterate over both json files and search for the keys
|
||||
for days in days_list:
|
||||
for day in days.values():
|
||||
if not "date" in day:
|
||||
if "date" not in day:
|
||||
continue
|
||||
|
||||
date: dict = datetime.strptime(day['date'], '%d.%m.%Y').date()
|
||||
|
||||
|
||||
date: dict = datetime.strptime(day["date"], "%d.%m.%Y").date()
|
||||
|
||||
for key in keys:
|
||||
if key in day["districts"] and day["districts"][key] != []:
|
||||
for entry in day["districts"][key]:
|
||||
if entry in ICON_MAP:
|
||||
icon = ICON_MAP.get(entry)
|
||||
elif len(entry)>=2 and entry[:2] == "BT":
|
||||
elif len(entry) >= 2 and entry[:2] == "BT":
|
||||
icon = ICON_MAP.get("BT")
|
||||
else:
|
||||
icon = ICON_MAP.get(entry[0])
|
||||
entries.append(Collection(date, entry,icon))
|
||||
|
||||
entries.append(Collection(date, entry, icon))
|
||||
|
||||
return entries
|
||||
|
||||
@@ -30,11 +30,11 @@ waste_collection_schedule:
|
||||
```yaml
|
||||
waste_collection_schedule:
|
||||
sources:
|
||||
- name: bsr_de
|
||||
- name: heilbronn_de
|
||||
args:
|
||||
plz: 74072
|
||||
abf_strasse: "Rosenau"
|
||||
abf_hausnr: 33
|
||||
strasse: Rosenau
|
||||
hausnr: 33
|
||||
```
|
||||
|
||||
## How to get the source arguments
|
||||
|
||||
Reference in New Issue
Block a user