mirror of
https://github.com/sascha-hemi/hacs_waste_collection_schedule.git
synced 2026-03-21 06:05:57 +01:00
abfallwirtschaft_vechta_de fetches next year in Dec (#1585)
* fix last few days in december * refactoring + General reformatting --------- Co-authored-by: 5ila5 <5ila5@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
803246edce
commit
c3289070be
@@ -1,31 +1,25 @@
|
||||
import requests
|
||||
from waste_collection_schedule import Collection # type: ignore[attr-defined]
|
||||
from waste_collection_schedule.service.ICS import ICS
|
||||
|
||||
import json
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
from waste_collection_schedule import Collection # type: ignore[attr-defined]
|
||||
from waste_collection_schedule.service.ICS import ICS
|
||||
|
||||
TITLE = "AWB Abfallwirtschaft Vechta"
|
||||
DESCRIPTION = "Source for AWB Abfallwirtschaft Vechta."
|
||||
URL = "https://www.abfallwirtschaft-vechta.de/"
|
||||
TEST_CASES = {
|
||||
"Vechta, An der Hasenweide": {
|
||||
"stadt": "Vechta",
|
||||
"strasse": "An der Hasenweide"
|
||||
},
|
||||
"Bakum, Up'n Sande": {
|
||||
"stadt": "Bakum",
|
||||
"strasse": "Up'n Sande"
|
||||
},
|
||||
"Vechta, An der Hasenweide": {"stadt": "Vechta", "strasse": "An der Hasenweide"},
|
||||
"Bakum, Up'n Sande": {"stadt": "Bakum", "strasse": "Up'n Sande"},
|
||||
"Neuenkirchen-Vörden, Braunschweiger Straße": {
|
||||
"stadt": "Neuenkirchen-Vörden",
|
||||
"strasse": "Braunschweiger Straße"
|
||||
"strasse": "Braunschweiger Straße",
|
||||
},
|
||||
"Goldenstedt, An der Ellenbäke": {
|
||||
"stadt": "Goldenstedt",
|
||||
"strasse": "An der Ellenbäke"
|
||||
},
|
||||
"strasse": "An der Ellenbäke",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +34,7 @@ ICON_MAP = {
|
||||
"Gelbe Tonne": "mdi:recycle",
|
||||
}
|
||||
|
||||
|
||||
class Source:
|
||||
def __init__(self, stadt: str, strasse: str):
|
||||
self._stadt: str = stadt
|
||||
@@ -47,26 +42,37 @@ class Source:
|
||||
self._ics = ICS()
|
||||
|
||||
def fetch(self):
|
||||
args = {
|
||||
"stadt": self._stadt,
|
||||
"strasse": self._strasse
|
||||
}
|
||||
|
||||
now = datetime.now()
|
||||
entries = self.get_data(now.year)
|
||||
if now.month != 12:
|
||||
return entries
|
||||
try:
|
||||
return entries + self.get_data(now.year + 1)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def get_data(self, jahr):
|
||||
args = {"stadt": self._stadt, "strasse": self._strasse}
|
||||
|
||||
collection_entries = []
|
||||
string_entries = []
|
||||
|
||||
for papier_typ in ["pamo", "siemer"]:
|
||||
session = requests.Session()
|
||||
session.cookies.set("jahr", str(datetime.now().year))
|
||||
session.cookies.set("jahr", str(jahr))
|
||||
|
||||
r = session.get(
|
||||
"https://www.abfallwirtschaft-vechta.de/CALENDER/inc.suche_stadt.php", params={"term": self._stadt})
|
||||
"https://www.abfallwirtschaft-vechta.de/CALENDER/inc.suche_stadt.php",
|
||||
params={"term": self._stadt},
|
||||
)
|
||||
r.raise_for_status()
|
||||
city_id = r.json()[0]["id"]
|
||||
session.cookies.set("stadt", str(city_id))
|
||||
|
||||
r = session.get("https://www.abfallwirtschaft-vechta.de/CALENDER/inc.suche_strasse.php",
|
||||
params={"stadt": city_id, "term": self._strasse})
|
||||
r = session.get(
|
||||
"https://www.abfallwirtschaft-vechta.de/CALENDER/inc.suche_strasse.php",
|
||||
params={"stadt": city_id, "term": self._strasse},
|
||||
)
|
||||
r.raise_for_status()
|
||||
street = json.loads(r.text[1:-2])["strassen"][0]
|
||||
session.cookies.set("stadt", str(street["id"]))
|
||||
@@ -74,34 +80,47 @@ class Source:
|
||||
session.cookies.set("abfuhrbezirkpapir", str(street[papier_typ]))
|
||||
session.cookies.set("papier", papier_typ)
|
||||
|
||||
|
||||
args = {
|
||||
"stadt": city_id,
|
||||
"strasse": street["id"],
|
||||
"abfuhrbezirkpapier": street[papier_typ],
|
||||
"jahr": datetime.now().year,
|
||||
"papier": papier_typ,
|
||||
"jahr": jahr,
|
||||
"papier": papier_typ,
|
||||
"trigger": "false",
|
||||
"triggerday": "false",
|
||||
"triggertime": "false",
|
||||
}
|
||||
|
||||
r = session.get(
|
||||
"https://www.abfallwirtschaft-vechta.de/CALENDER/inc.get_calender_ics.php", params=args)
|
||||
"https://www.abfallwirtschaft-vechta.de/CALENDER/inc.get_calender_ics.php",
|
||||
params=args,
|
||||
)
|
||||
r.raise_for_status()
|
||||
r.encoding = "utf-8"
|
||||
|
||||
|
||||
# sometimes has a not ascii UID this would raise an Exception while converting
|
||||
dates = self._ics.convert(r.text.replace("UID:", "NOTUID: "))
|
||||
|
||||
for d in dates:
|
||||
bin_type = d[1].replace("Abfuhrtermin", "").replace(
|
||||
"Erinnerung", "").replace("für", "").strip()
|
||||
|
||||
bin_type = (
|
||||
d[1]
|
||||
.replace("Abfuhrtermin", "")
|
||||
.replace("Erinnerung", "")
|
||||
.replace("für", "")
|
||||
.strip()
|
||||
)
|
||||
|
||||
if f"{bin_type} {str(d[0])}" in string_entries:
|
||||
continue
|
||||
string_entries.append(f"{bin_type} {str(d[0])}")
|
||||
|
||||
collection_entries.append(Collection(d[0], bin_type, ICON_MAP.get(
|
||||
re.sub("[0-9]", "", bin_type).strip().replace(" ", " "))))
|
||||
|
||||
collection_entries.append(
|
||||
Collection(
|
||||
d[0],
|
||||
bin_type,
|
||||
ICON_MAP.get(
|
||||
re.sub("[0-9]", "", bin_type).strip().replace(" ", " ")
|
||||
),
|
||||
)
|
||||
)
|
||||
return collection_entries
|
||||
|
||||
Reference in New Issue
Block a user