mirror of
https://github.com/sascha-hemi/hacs_waste_collection_schedule.git
synced 2026-03-21 00:04:11 +01:00
adding tonnenleerung_de
This commit is contained in:
@@ -926,6 +926,9 @@ Waste collection schedules in the following formats and countries are supported.
|
||||
- [TBR Remscheid](/doc/source/muellmax_de.md) / tbr-info.de
|
||||
- [TBV Velbert](/doc/source/tbv_velbert_de.md) / tbv-velbert.de
|
||||
- [Technischer Betriebsdienst Reutlingen](/doc/ics/tbr_reutlingen_de.md) / tbr-reutlingen.de
|
||||
- [tonnenleerung.de LK Aichach-Friedberg + Neuburg-Schrobenhausen](/doc/source/tonnenleerung_de.md) / tonnenleerung.de
|
||||
- [tonnenleerung.de LK Aichach-Friedberg + Neuburg-Schrobenhausen](/doc/source/tonnenleerung_de.md) / tonnenleerung.de/aic-fdb
|
||||
- [tonnenleerung.de LK Aichach-Friedberg + Neuburg-Schrobenhausen](/doc/source/tonnenleerung_de.md) / tonnenleerung.de/nd-sob
|
||||
- [Tuttlingen](/doc/source/app_abfallplus_de.md) / Abfall+ App: abfallwecker
|
||||
- [Tuttlingen](/doc/source/app_abfallplus_de.md) / Abfall+ App: unterallgaeu
|
||||
- [Tübingen](/doc/source/app_abfallplus_de.md) / Abfall+ App: app
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
import json
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
from waste_collection_schedule import Collection # type: ignore[attr-defined]
|
||||
|
||||
TITLE = "tonnenleerung.de LK Aichach-Friedberg + Neuburg-Schrobenhausen"
|
||||
DESCRIPTION = (
|
||||
"Source for tonnenleerung.de LK Aichach-Friedberg + Neuburg-Schrobenhausen."
|
||||
)
|
||||
URL = "https://tonnenleerung.de"
|
||||
TEST_CASES = {
|
||||
"nd-sob/neuburg-donau/abbevillestrasse/": {
|
||||
"url": "nd-sob/neuburg-donau/abbevillestrasse/"
|
||||
},
|
||||
"aic-fdb/affing/": {"url": "https://tonnenleerung.de/aic-fdb/affing"},
|
||||
"nd-sob/schrobenhausen/albertus-magnus-weg/": {
|
||||
"url": "/nd-sob/schrobenhausen/albertus-magnus-weg/"
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
ICON_MAP = {
|
||||
"grau4": "mdi:trash-can",
|
||||
"grau": "mdi:trash-can",
|
||||
"Bio": "mdi:leaf",
|
||||
"blau": "mdi:package-variant",
|
||||
"gelb": "mdi:recycle",
|
||||
}
|
||||
|
||||
|
||||
API_URL = "https://tonnenleerung.de/{url}"
|
||||
|
||||
EXTRA_INFO = [
|
||||
{
|
||||
"name": "LK Aichach-Friedberg",
|
||||
"url": "https://tonnenleerung.de/aic-fdb/",
|
||||
},
|
||||
{
|
||||
"name": "LK Neuburg-Schrobenhausen",
|
||||
"url": "https://tonnenleerung.de/nd-sob/",
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
# Array names included in the html file
|
||||
ARRAY_NAMES = ["blauArray", "gelbArray", "grauArray", "braunArray", "grau4Array"]
|
||||
|
||||
REGEX_TEMPLATE = r"{array_name}\s?=\s?\[[,\"\-\d]*\]"
|
||||
|
||||
# Array names to names shown on the frontend
|
||||
NAME_2_TYPE = {
|
||||
"blauArray": "blau",
|
||||
"gelbArray": "gelb",
|
||||
"grauArray": "grau",
|
||||
"braunArray": "Bio",
|
||||
"grau4Array": "grau4",
|
||||
}
|
||||
|
||||
|
||||
class Source:
|
||||
def __init__(self, url: str):
|
||||
self._url: str = url
|
||||
if "tonnenleerung.de" in self._url:
|
||||
self._url = self._url.split("tonnenleerung.de")[1]
|
||||
if self._url.startswith("/"):
|
||||
self._url = self._url[1:]
|
||||
|
||||
def fetch(self):
|
||||
# get json file
|
||||
r = requests.get(API_URL.format(url=self._url))
|
||||
r.raise_for_status()
|
||||
|
||||
entries = []
|
||||
|
||||
for array_name in ARRAY_NAMES:
|
||||
array = re.search(REGEX_TEMPLATE.format(array_name=array_name), r.text)
|
||||
if not array:
|
||||
continue
|
||||
bin_type = NAME_2_TYPE[array_name]
|
||||
dates = json.loads(array.group(0).split("=")[1])
|
||||
for date_str in dates:
|
||||
date = datetime.strptime(date_str, "%Y-%m-%d").date()
|
||||
icon = ICON_MAP.get(bin_type) # Collection icon
|
||||
|
||||
entries.append(Collection(date=date, t=bin_type, icon=icon))
|
||||
return entries
|
||||
46
doc/source/tonnenleerung_de.md
Normal file
46
doc/source/tonnenleerung_de.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# tonnenleerung.de LK Aichach-Friedberg + Neuburg-Schrobenhausen
|
||||
|
||||
Support for schedules provided by [tonnenleerung.de LK Aichach-Friedberg + Neuburg-Schrobenhausen](https://tonnenleerung.de), serving LK Aichach-Friedberg + Neuburg-Schrobenhausen, Germany.
|
||||
|
||||
## Configuration via configuration.yaml
|
||||
|
||||
```yaml
|
||||
waste_collection_schedule:
|
||||
sources:
|
||||
- name: tonnenleerung_de
|
||||
args:
|
||||
url: URL
|
||||
|
||||
```
|
||||
|
||||
### Configuration Variables
|
||||
|
||||
**url**
|
||||
*(String) (required)*
|
||||
|
||||
## Example
|
||||
|
||||
```yaml
|
||||
waste_collection_schedule:
|
||||
sources:
|
||||
- name: tonnenleerung_de
|
||||
args:
|
||||
url: nd-sob/neuburg-donau/abbevillestrasse/
|
||||
|
||||
```
|
||||
|
||||
should work with full ULR as well.
|
||||
|
||||
```yaml
|
||||
waste_collection_schedule:
|
||||
sources:
|
||||
- name: tonnenleerung_de
|
||||
args:
|
||||
url: https://tonnenleerung.de/aic-fdb/affing
|
||||
```
|
||||
|
||||
## How to get the source argument
|
||||
|
||||
Go to [https://tonnenleerung.de](https://tonnenleerung.de) and search your address. Use the url after https://tonnenleerung.de/ url parameter.
|
||||
|
||||
e.g https://tonnenleerung.de/nd-sob/neuburg-donau/abbevillestrasse/ -> nd-sob/neuburg-donau/abbevillestrasse/
|
||||
Reference in New Issue
Block a user