ODW-Abfallkalender-Bot-Demo/abfallkalender.py

71 lines
2.6 KiB
Python
Raw Normal View History

2022-07-15 01:23:31 +02:00
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
2022-07-15 09:00:12 +02:00
# Sprache auf Deutsch setzen, für die Namen der Wochentage
2022-07-15 01:23:31 +02:00
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
2022-07-15 09:00:12 +02:00
# Einen Tag auf das heutige Datum addieren
2022-07-15 01:23:31 +02:00
utcMorgen = datetime.today()+timedelta(days=1)
2022-07-15 09:00:12 +02:00
# Das Datum im Format für die Open-Data-API, z.B. 2022-07-13
2022-07-15 01:23:31 +02:00
morgen = utcMorgen.strftime('%Y-%m-%d')
2022-07-15 09:00:12 +02:00
# Der Wochentagname von morgen
2022-07-15 01:23:31 +02:00
morgenWochentag = utcMorgen.strftime('%A')
2022-07-15 09:14:40 +02:00
# Gimmick: Eine Liste mit Sätzen
2022-07-15 01:23:31 +02:00
# für die Einleitung der Abfallkalender-Ausgabe
introSaetze = [
'Leute, denkt morgen an die Müllabfuhr: ',
2022-07-15 09:14:40 +02:00
'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?'
2022-07-15 01:23:31 +02:00
]
# Variablen initialisieren
ausgabe = ''
2022-07-15 09:14:40 +02:00
stadtteil = {}
2022-07-15 01:23:31 +02:00
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/
2022-07-15 09:14:40 +02:00
abfallkalenderApiUrl = 'https://opendata.wuerzburg.de/api/records/1.0/search/?dataset=abfallkalender-wuerzburg&q=start='+morgen+'&rows=99'
2022-07-15 01:23:31 +02:00
apiAntwort = requests.get(abfallkalenderApiUrl)
abfallkalender = apiAntwort.json()
# Gibt es Daten für den morgigen Tag (Samstag und Sonntag nicht)
if len(abfallkalender['records']) > 0:
# Daten neu struktierien:
2022-07-15 09:14:40 +02:00
# Dictionary mit Stadtteilname als Schlüssel und einer Liste der Abfallart,
2022-07-15 01:23:31 +02:00
# die morgen dort geholt wird
2022-07-15 09:14:40 +02:00
for orte in abfallkalender['records']:
2022-07-15 01:23:31 +02:00
try:
2022-07-15 09:14:40 +02:00
stadtteil[orte['fields']['stadtteil_name']].append(
orte['fields']['kategorie'])
2022-07-15 01:23:31 +02:00
except KeyError:
2022-07-15 09:14:40 +02:00
stadtteil[orte['fields']['stadtteil_name']] = []
stadtteil[orte['fields']['stadtteil_name']].append(
orte['fields']['kategorie'])
2022-07-15 01:23:31 +02:00
# Ausgabe zusammenbasteln:
2022-07-15 09:14:40 +02:00
for (aktuellerStadtteil, abfallart) in stadtteil.items():
2022-07-15 01:23:31 +02:00
ausgabe += aktuellerStadtteil+': '
# mehr als eine Abfallart? Dann mit Kommans und Und verknüfpfen
2022-07-15 09:14:40 +02:00
if len(abfallart) > 1:
ausgabe += ', '.join(abfallart[:-1])+' und '+abfallart[-1]+"\n"
2022-07-15 01:23:31 +02:00
# sonst die eine Abfallart anhängen
else:
2022-07-15 09:14:40 +02:00
ausgabe += abfallart[0]
2022-07-15 01:23:31 +02:00
# Zufällig einen Einleitungssatz auswählen und der Ausgabe voranstellen.
2022-07-15 09:14:40 +02:00
ausgabe = choice(introSaetze)+'\n\n'+ausgabe
2022-07-15 01:23:31 +02:00
# Die Ausgabe
2022-07-15 09:14:40 +02:00
print(ausgabe)
# Wenn es keine Daten für den morgigen Tag gibt
else:
2022-07-15 09:14:40 +02:00
print('Morgen keine Termine im Abfallkalender.')