nerrixde / DSBApi

API für die in Deutschland verbreitete DSBmobile App für Vertretungspläne an Bildungseinrichtungen
GNU General Public License v3.0
35 stars 6 forks source link
api dsb dsbapi dsbmobile hacktoberfest python vertretungsplan

DSBApi

⚠️ Unzuverlässig. Es scheinen Bugs vermehrt aufzutreten. Maintainer gesucht (#24)

Eine API für die DSBMobile Vertretungsplan-Lösung, welche viele Schulen benutzen.

Bei Problemen und/oder Fragen, gerne ein "Issue" eröffnen.

Installation:

pip install dsbapipy oder manuell: pip install git+https://github.com/nerrixDE/DSBApi.git#egg=dsbapipy

Datensatz:

JSON Liste an Arrays. Ein Array sieht so aus:

Key Value Notiz
type Vertretung Art des Eintrags
class 5D Klasse
lesson 12 Schulstunde
room R404 (Neuer) Raum
new_subject M-GK1 Neuer Kurs
subject IF-LK4 Ursprüngliches Fach / Kurs
new_teacher NEUM Neuer Lehrer
teacher BIMM Ursprünglicher Lehrer
date 01.01.2019 Datum
day Montag Wochentag
updated 02.02.2019 12:13 Letztes Update

Hinweise zum Key "class"

Der key "class" wird speziell behandelt, indem der Inhalt der Schulklasse bei der Zeichenfolge "," geteilt wird. Diese Teilung wird verwendet um bei kombinierten Klasseneinträgen, die Daten für jede Klasse einzeln aufzusplitten.

Implementierung:

Beispiel 1

import dsbapi

dsbclient = dsbapipy.DSBApi("benutzername", "passwort")
entries = dsbclient.fetch_entries()

for s in range(len(entries)):
  for i in range(len(entries[s])):
    print(entries[s][i]["date"])

Beispiel 2: Anderes Tabellenformat

Schulen sind relativ frei in der Gestaltung Ihrer Datensätze. Daher kann der oben beschriebene Standard wiefolgt überschrieben werden:

import dsbapi

ownFields = ['class','lesson','new_subject','room','subject','new_teacher','type','text']

dsbclient = dsbapipy.DSBApi("benutzername", "passwort", tablemapper=ownFields)
entries = dsbclient.fetch_entries()

for s in range(len(entries)):
  for i in range(len(entries[s])):
    print(entries[s][i]["date"])

Beispiel 3: Nützliches Beispiel

Ein real-world Beispiel:

import dsbapi as dsbapipy
import json
import datetime

days = ["Montag","Dienstag","Mittwoch","Donnerstag","Freitag", "Samstag","Sonntag"]
klasse = "10b
ownFields = ['class','lesson','new_subject','room','subject','new_teacher','type','text']
dsbclient = dsbapipy.DSBApi("benutzername", "passwort", tablemapper=ownFields)
entries  dsbclient.fetch_entries()
final = []

for s in range(len(entries)):
    for i in range(len(entries[s])):
        day = days[datetime.datetime.today().weekday() +1]
        if entries[s][i]["class"] == klasse:
            if entries[s][i]["day"] == day:
                lesson = entries[s][i]["lesson"]
                subject = entries[s][i]["new_subject"]
                teacher = entries[s][i]["room"]
                oldsubject = entries[s][i]["subject"]
                room = entries[s][i]["new_teacher"]
                vertreter = entries[s][i]["type"]
                text = entries[s][i]["text"]
                final.append({"lesson":lesson, "new_subject": subject, "room":room, "old_subject":oldsubject, "teacher":teacher, "type":vertreter, "text":text})

message = f"Am {day} gibt es {str(len(final))} Einträge. "
for s in final:
    message += f"In der {s['lesson']}. Stunde hast du {s['new_subject']} mit {s['teacher']} in {s['room']}. "
print(message)