mirror of
https://codeberg.org/herrthees/ODW-Abfallkalender-Bot-Demo.git
synced 2025-08-01 16:17:34 +00:00
76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
import locale
|
|
from datetime import datetime, timedelta
|
|
from random import choice
|
|
|
|
import requests
|
|
|
|
# Morgiges Datum für API-Abfrage und der Name des Wochentags in Deutsch
|
|
# Sprache auf Deutsch setzen, für die Namen der Wochentage
|
|
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
|
|
|
|
# Einen Tag auf das heutige Datum addieren in der UTC-Zeitangabe
|
|
utcMorgen = datetime.today()+timedelta(days=1)
|
|
|
|
# Das UTC-Datum im Format für die Open-Data-API, z.B. 2022-07-13
|
|
morgen = utcMorgen.strftime('%Y-%m-%d')
|
|
|
|
# Der Wochentagname von morgen
|
|
morgenWochentag = utcMorgen.strftime('%A')
|
|
|
|
# Gimmick: Eine Liste mit Sätzen
|
|
# für die Einleitung der Abfallkalender-Ausgabe
|
|
introSaetze = [
|
|
'Leute, denkt morgen an die Müllabfuhr: ',
|
|
'Morgen ist ' + morgenWochentag+', für die Müllabfuhr in Würzburg heißt das: ',
|
|
'Der Abfallkalender für morgen, ' + morgenWochentag+': ',
|
|
'Wer ist am ' + morgenWochentag+' beim Müll mit was dran?'
|
|
]
|
|
|
|
# Variablen initialisieren
|
|
ausgabe = ''
|
|
stadtteil = {}
|
|
stadtteilListe = set
|
|
|
|
# Daten für morgen vom Open-Data-Portal holen und in JSON umwandeln
|
|
# Siehe https://opendata.wuerzburg.de/explore/dataset/abfallkalender-wuerzburg/information/
|
|
abfallkalenderApiUrl = 'https://opendata.wuerzburg.de/api/records/1.0/search/?dataset=abfallkalender-wuerzburg&q=start='+morgen+'&rows=99'
|
|
apiAntwort = requests.get(abfallkalenderApiUrl)
|
|
abfallkalender = apiAntwort.json()
|
|
|
|
# Zu Testzwecken: Gibt das Dictionary aus
|
|
print (abfallkalender)
|
|
|
|
# Gibt es Daten für den morgigen Tag (Samstag und Sonntag nicht)
|
|
if len(abfallkalender['records']) > 0:
|
|
|
|
# Daten neu struktierien:
|
|
# Dictionary mit Stadtteilname als Schlüssel und einer Liste der Abfallart,
|
|
# die morgen dort geholt wird
|
|
for orte in abfallkalender['records']:
|
|
try:
|
|
stadtteil[orte['fields']['stadtteil_name']].append(
|
|
orte['fields']['kategorie'])
|
|
except KeyError:
|
|
stadtteil[orte['fields']['stadtteil_name']] = []
|
|
stadtteil[orte['fields']['stadtteil_name']].append(
|
|
orte['fields']['kategorie'])
|
|
|
|
# Ausgabe zusammenbasteln:
|
|
for (aktuellerStadtteil, abfallart) in stadtteil.items():
|
|
ausgabe += aktuellerStadtteil+': '
|
|
# mehr als eine Abfallart? Dann mit Kommans und Und verknüfpfen
|
|
if len(abfallart) > 1:
|
|
ausgabe += ', '.join(abfallart[:-1])+' und '+abfallart[-1]+"\n"
|
|
# sonst die eine Abfallart anhängen
|
|
else:
|
|
ausgabe += abfallart[0]+"\n"
|
|
|
|
# Zufällig einen Einleitungssatz auswählen und der Ausgabe voranstellen.
|
|
ausgabe = choice(introSaetze)+'\n\n'+ausgabe
|
|
|
|
# Die Ausgabe
|
|
print(ausgabe)
|
|
|
|
# Wenn es keine Daten für den morgigen Tag gibt
|
|
else:
|
|
print('Morgen keine Termine im Abfallkalender.')
|