Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import bs4 as bs
- import requests
- import json
- import time
- from itertools import groupby
- class DsbException(Exception):
- pass
- class InvalidKeyException(DsbException):
- pass
- def timetable(table):
- if table["timetablegroupname"] == "VP morgen mobile":
- return True
- else:
- return False
- def login():
- user = '266761'
- password = 'vp201617'
- key_url = f'https://iphone.dsbcontrol.de/(S(olrkigwsbotu2b1j2zjnqbso))/iPhoneService.svc/DSB/authid/{user}/{password}'
- key = requests.get(key_url).json()
- if key == '00000000-0000-0000-0000-000000000000':
- raise InvalidKeyException("Invalid Key received from dsbcontrol")
- table_url = f'https://iphone.dsbcontrol.de/(S(wfyybef2cruzx3kmopg21u2u))/iPhoneService.svc/DSB/timetables/{key}'
- tables = requests.get(table_url).json()
- return tables
- def soup(tables):
- vertretungspläne = [] #html codes aller vertretungspläne des "VP morgen"
- tablelist = list(filter(timetable, tables)) # Liste aller Listen des "VP morgen"
- for i in tablelist:
- timetabledate = i["timetabledate"]
- r = requests.get(i["timetableurl"])
- vertretungspläne.append(bs.BeautifulSoup(r.content, "lxml"))
- return vertretungspläne, timetabledate
- def inhalt(vertretungspläne):
- vpinhalt = []
- for i in vertretungspläne:
- table_rows = i.find_all('tr')
- rows = []
- for tr in table_rows:
- td = tr.find_all('td')
- columns = []
- for b in td:
- data = b.text.split()
- columns.append(data)
- rows.append(columns)
- vpinhalt.extend(rows)
- return vpinhalt
- def gruppierung(vpinhalt):
- klassen = []
- infos = []
- itera = groupby(vpinhalt, key=lambda x: len(x) <= 2)
- next(itera)
- for i, group in itera:
- if i:
- klassen.append(list(group))
- else:
- infos.append(list(group))
- return klassen, infos
- def sortierung(klassen, infos, zielklasse):
- for i, info in zip(klassen, infos):
- if i[-1][-1][0] == zielklasse:
- return info
- return None
- def date(vertretungspläne):
- date = vertretungspläne[0].find('div', class_='mon_title').text.split()
- datum = (f"Am {date[1]} den {date[0]}")
- return datum
- def nachrichten(info, datum):
- newsliste = []
- for i in info:
- op = i[0][0]
- kurs = i[3][0]
- raum = i[6][0]
- stunde = i[1]
- if len(stunde) <= 2:
- stunde = i[1][0]
- elif len(stunde) == 3:
- stunde = i[1][0] + i[1][1] + i[1][2]
- if op == "Raumtausch":
- raum_alt = raum[:3]
- raum_neu = raum[4:7]
- news = f'{datum} ist der Kurs "{kurs}" in der {stunde}. Stunde anstatt im Raum {raum_alt} nun im {raum_neu}!'
- elif op == "Entfall":
- news = f'{datum} fällt der Kurs "{kurs}" in der {stunde}. Stunde aus!'
- elif op == "Vertretung":
- news = f'{datum} wird der Kurs "{kurs}" in der {stunde}. Stunde im Raum {raum} vertreten!'
- elif op == "Betreuung":
- news = f'{datum} wird der Kurs "{kurs}" in der {stunde}. Stunde betreut!'
- elif op == "Verlegung":
- news = f'{datum} steht eine Kursverlegung an! Bitte auf den DSB schauen und gegebenenfalls beim zuständigen Lehrer erkundigen!'
- elif op == "Tausch":
- news = f'{datum} steht ein Kurstausch an! Bitte auf den DSB schauen und gegebenenfalls beim zuständigen Lehrer erkundigen!'
- else:
- news = f'Achtung! {datum} steht eine dem DSB-Analyseprogramm unbekannte Änderung an! Bitte auf den DSB schauen und gegebenenfalls beim zuständigen Lehrer erkundigen!'
- newsliste.append(news)
- return newsliste
- def main():
- zielklasse = "10A"
- tables = login()
- vertretungspläne, timetabledate = soup(tables) #html codes aller vertretungspläne des "VP morgen" und Änderungsdatum
- vpinhalt = inhalt(vertretungspläne) #Inhalt aller Vertretungspläne des "VP morgen"
- klassen, infos = gruppierung(vpinhalt) #Inhalt gruppiert nach Klassen und Infos (infos[0] enthält die infos von klassen[0])
- info = sortierung(klassen, infos, zielklasse) #VP Info zur Zielklasse (Wenn kein Inhalt: None)
- datum = date(vertretungspläne) #Generiert Satz zum Datum des "VP morgen"
- newsliste = nachrichten(info, datum) #Generiert Sätze zu den jeweiligen NEWS des VP der Zielklasse und speichert diese in einer Liste
- print(newsliste)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement