Browse Source

muell.py hinzugefügt

develop
Hauke Zühl 3 years ago
parent
commit
69b0311f9f
  1. 149
      python/muell.py

149
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: <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
# 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
Loading…
Cancel
Save