|
|
|
#!/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: <hier die ID der Gruppe/ des Teilnhemers eintragen>
|
|
|
|
kommune: 2601
|
|
|
|
strasse: 2146
|
|
|
|
pathBot: '~/bin/YMBot'
|
|
|
|
tgBotOwner: <hier DEINE Telegram-ID eintragen>
|
|
|
|
'''
|
|
|
|
|
|
|
|
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"<input .*?name=.*? value=.*?/>", 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
|
|
|
|
|
|
|
|
def read_file(jahr):
|
|
|
|
''' Liest Daten aus muell<jahr>.csv und liefert ggf. Ergebnis zurück'''
|
|
|
|
|
|
|
|
antwort_liste = None
|
|
|
|
try:
|
|
|
|
f = open(f'muell{jahr}.csv', 'rb')
|
|
|
|
antwort = str(f.read())
|
|
|
|
antwort_liste = antwort[antwort.find('Biom'):].strip("'").replace('\\n', '\n').split('\n')
|
|
|
|
except FileNotFoundError:
|
|
|
|
pass
|
|
|
|
|
|
|
|
return antwort_liste
|
|
|
|
|
|
|
|
# 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',
|
|
|
|
]
|
|
|
|
|
|
|
|
# __main__
|
|
|
|
antwort_liste = read_file(current_year)
|
|
|
|
if antwort_liste == None:
|
|
|
|
# Keine vernünftigen Daten, ergo mal gucken, was die Webseite ergibt
|
|
|
|
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)
|
|
|
|
f = open(f'muell{current_year}.csv', 'wb')
|
|
|
|
f.write(content)
|
|
|
|
f.close()
|
|
|
|
antwort_liste = antwort[antwort.find('Biom'):].strip("'").replace('\\n', '\n').split('\n')
|
|
|
|
|
|
|
|
daten = set(antwort_liste)
|
|
|
|
|
|
|
|
for datum in daten:
|
|
|
|
tomorrow = (datetime.now() + timedelta(1)).strftime('%d.%m.%Y')
|
|
|
|
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
|