From 69b0311f9faf3d60e4e42bb1346e58c5f0a971dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hauke=20Z=C3=BChl?= Date: Fri, 30 Apr 2021 12:46:06 +0200 Subject: [PATCH] =?UTF-8?q?muell.py=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/muell.py | 149 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 python/muell.py diff --git a/python/muell.py b/python/muell.py new file mode 100644 index 0000000..ba19ee9 --- /dev/null +++ b/python/muell.py @@ -0,0 +1,149 @@ +#!/usr/bin/python + +''' +Um die Werte für kommune und strasse zu erfahren, rufe https://www.egst.de/de/abfallabholung/ per +Browser auf und ermittle die gesendeten Daten in der Entwicklerkonsole deines Browsers. + +Die Angaben hier im Skript stehen für Hörstel als Kommune und Im Wiesengrund als Strasse + +Um die Daten an Telegram zu senden, musst du dir ein Skript/Programm schreiben, dass die API +von Telegram verwendet und Daten an dich oder deine Gruppe senden kann! + +Beispiel für eine Konfigurationsdatei: +tgReceiver: +kommune: 2601 +strasse: 2146 +pathBot: '~/bin/YMBot' +tgBotOwner: +''' + +import re +import requests +import httplib2 +import urllib +import yaml + +from datetime import datetime, timedelta +from pathlib import Path + +# Funktionen +def get_index_positions(list_of_elems, element): + ''' Returns the indexes of all occurrences of give element in + the list- listOfElements ''' + index_pos_list = [] + for i in range(len(list_of_elems)): + if list_of_elems[i] == element: + index_pos_list.append(i) + + return index_pos_list + +def readConfig(): + ''' Liest ~/.muell.yaml und speichert Daten in Dictionary ''' + + home = Path.home() # home ist ohne / am Ende! + config = {} + with open(f'{home}/.muell.yaml', 'r') as config_file: + config = yaml.load(config_file, Loader = yaml.FullLoader) + + return config + +def init(key, modus, host, headers): + ''' Initialisiert das System und sucht entsprechende Daten heraus ''' + + url = f'https://{host}/?key={key}&modus={modus}&waction=init' + http = httplib2.Http() + (resp, content) = http.request(url, "POST", headers = headers, body = urllib.parse.urlencode(postdata)) + # print(content) + result = re.findall(r"", str(content)) + + datum = result[1].split(' ') + + name = None + value = None + for i in datum: + i = i.split('=') + if i[0] == 'name': + name = i[1][1:-1] + if i[0] == 'value': + value = i[1][1:-1] + + return name, value + +# Variablen +key = 'e21758b9c711463552fb9c70ac7d4273' +modus = 'd6c5855a62cf32a4dadbc2831f0f295f' + +host = 'api.abfall.io' + +url = f'https://{host}/?key={key}&modus={modus}&waction=export_csv' +export_als = f"{{'action':'{url}','target':''}}" + +current_year = datetime.today().year +zeitraum = f'{current_year}0101-{current_year}1231' + +postdata = { + 'f_id_abfalltyp_0': '50', + 'f_id_abfalltyp_1': '161', + 'f_id_abfalltyp_2': '53', + 'f_id_abfalltyp_3': '187', + 'f_id_abfalltyp_4': '169', + 'f_abfallarten_index_max': '5', + 'f_abfallarten': '50,161,53,187,169', + 'f_zeitraum': zeitraum, + 'f_export_als': export_als, +} + +headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; x68_64; x64; rv:88.0) Gecko/20100101 Firefox/88.0', + 'Content-Type': 'application/x-www-form-urlencoded', +} + +muell_arten = [ + 'Biomüll', + 'Gelbe Tonne', + 'Restmüll', + 'Papiermüll', + 'Schadstoffmobil', +] + +tomorrow = (datetime.now() + timedelta(1)).strftime('%d.%m.%Y') + +# __main__ +config = readConfig() +postdata['f_id_kommune'] = config['kommune'] +postdata['f_id_strasse'] = config['strasse'] + +(name, value) = init(key, modus, host, headers) +if name != None and value != None: + postdata[name] = value + +http = httplib2.Http() +(resp, content) = http.request(url, "POST", headers = headers, body = urllib.parse.urlencode(postdata)) + +antwort = str(content) +antwort_liste = antwort[antwort.find('Biom'):].strip("'").replace('\\n', '\n').split('\n') + +if antwort_liste[0] == '': + # Keine vernünftigen Daten, ergo mal gucken, was in der Datei steht + try: + f = open('muell.csv', 'rb') + antwort = str(f.read()) + antwort_liste = antwort[antwort.find('Biom'):].strip("'").replace('\\n', '\n').split('\n') + except FileNotFoundError: + pass + +daten = set(antwort_liste) + +for datum in daten: + datum = datum.split(';') + l_muell = get_index_positions(datum, tomorrow) + if len(l_muell) > 0: + wird = 'wird' if len(l_muell) < 2 else 'werden' + tonnen = [] + for i in l_muell: + tonnen.append(muell_arten[i]) + + if len(tonnen) > 0: + tonnen = ' und '.join(tonnen) + print(f'Morgen {wird} {tonnen} abgeholt') + break