muell.py hinzugefügt
This commit is contained in:
		
							parent
							
								
									5c3599565b
								
							
						
					
					
						commit
						69b0311f9f
					
				
							
								
								
									
										149
									
								
								python/muell.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								python/muell.py
									
									
									
									
									
										Normal file
									
								
							@ -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…
	
		Reference in New Issue
	
	Block a user