Notenspiegel vom Prüfungsamt abrufen (QIS)
Verfasst: Donnerstag 15. März 2007, 18:15
Diese Klasse kann benutzt werden um von einem QiS Server den Notenspiegel abzurufen. Einige Hochschulen bieten dieses Selbstbedienungssystem an.
Die Klasse ist mit der FH Aachen getestet. Für andere Hochschulen sind evtl. einige Modifikationen nötig.
Als Beispiel, was man mit der Klasse machen kann habe ich quick&dirty ein kleines Sckript geschrieben.
Wenn man das bei jedem Rechnerstart ausführt, wird man über neue Noten informiert.
Die Klasse ist mit der FH Aachen getestet. Für andere Hochschulen sind evtl. einige Modifikationen nötig.
Code: Alles auswählen
#
# usage: import qis
# qis = qis.Qis ('user', 'passwort')
# print qis.get_notenspiegel ()
#
import httplib, urllib, re
def unescape (s):
if '&' not in s:
return s
s = s.replace("<", "<")
s = s.replace(">", ">")
s = s.replace("'", "'")
s = s.replace(""", '"')
s = s.replace(" ", " ")
s = s.replace("&", "&")
return s
class Qis:
def __init__(self, qis_user, qis_password):
conn = httplib.HTTPSConnection ('www.qis.fh-aachen.de')
# Anmeldeseite aufrufen um die Sessionid rauszufinden
conn.request('GET', '/qisserver/rds?state=user&type=0&application=lsf')
response = conn.getresponse()
response.read ()
params_anmeldung = urllib.urlencode ({'username':"%s" % qis_user, 'password': "%s" % qis_password,'submit':'Ok'})
headers_anmeldung = {"Content-type": "application/x-www-form-urlencoded", "Cookie" : "JSESSIONID=%s" % re.search ('JSESSIONID=(.*?);', response.getheader ('Set-Cookie')).group (1)}
# Anmeldung durchfuehren
conn.request ('POST', "/qisserver/rds?state=user&type=1", params_anmeldung, headers_anmeldung)
response = conn.getresponse ()
# Sessionid aktualisieren
header_cookie = {"Cookie" : "JSESSIONID=%s" % re.search ('JSESSIONID=(.*?);', response.getheader ('Set-Cookie')).group (1)}
response.read ()
# Menue abrufen
conn.request ('GET', "/qisserver/rds?state=user&type=0&category=menu.browse&startpage=portal.vm", None, header_cookie)
response = conn.getresponse ()
content = response.read ()
asi = re.search (';asi=(.*?)\"', content).group (1)
# Notenspiegel abrufen
conn.request ('GET', "/qisserver/rds?state=htmlbesch&moduleParameter=Student&menuid=notenspiegel&asi=%s" % asi, None, header_cookie)
response = conn.getresponse ()
self.notenspiegel = response.read ()
# Abmeldung
conn.request ('GET', "/qisserver/rds?state=user&type=4&category=auth.logout&menuid=logout", None, header_cookie)
response = conn.getresponse()
response.read ()
# Verbindung beenden
conn.close ()
def get_notenspiegel (self, output_codec = 'utf8'):
if not self.notenspiegel:
return None
pruefungen = []
a = re.findall ('class=\"posrecords\"(.*?)</tr>', self.notenspiegel, re.S)
for b in a:
pruefung = {}
c = re.findall ('class=\"posrecords\">(.*?)</td>', b, re.S)
pruefung["Fach"] = unicode (unescape (c[0]), "cp1252" ).encode (output_codec)
pruefung["Semester"] = unicode (unescape (c[1]), "cp1252" ).encode (output_codec)
pruefung["Datum"] = unicode (unescape (c[2]), "cp1252" ).encode (output_codec)
pruefung["Note"] = unicode (unescape (c[3]), "cp1252" ).encode (output_codec)
pruefung["Credits"] = unicode (unescape (c[4]), "cp1252" ).encode (output_codec)
pruefung["Status"] = unicode (unescape (c[5]), "cp1252" ).encode (output_codec)
pruefung["Versuch"] = unicode (unescape (c[6]), "cp1252" ).encode (output_codec)
pruefungen.append (pruefung)
return pruefungen
Wenn man das bei jedem Rechnerstart ausführt, wird man über neue Noten informiert.
Code: Alles auswählen
import sys, qis, gtk
check = False
if len (sys.argv) > 1 and sys.argv [1] == "check":
check = True
qis = qis.Qis ('user', 'passwort')
pruefungen = qis.get_notenspiegel ()
anzahl = 0
if check:
try:
fo = file ('anzahl_noten.dat')
anzahl = int (fo.read ())
fo.close ()
except:
pass
if not check or len (pruefungen) > anzahl:
if check:
file ('anzahl_noten.dat', "w").write (str (len (pruefungen)))
text = ""
for pruefung in pruefungen:
if float (pruefung["Note"]) <= 4.0:
text = text + "<span size=\"large\"><i>%s</i></span>\nSemester: %s Datum: %s\nNote: <span foreground=\"green\"><b>%s</b></span> Credits: %s\nStatus: %s Versuch: %s \n\n" % (pruefung["Fach"],pruefung["Semester"],pruefung["Datum"],pruefung["Note"],pruefung["Credits"],pruefung["Status"],pruefung["Versuch"])
else:
text = text + "<span size=\"large\"><i>%s</i></span>\nSemester: %s Datum: %s\nNote: <span foreground=\"red\"><b>%s</b></span> Credits: %s\nStatus: %s Versuch: %s \n\n" % (pruefung["Fach"],pruefung["Semester"],pruefung["Datum"],pruefung["Note"],pruefung["Credits"],pruefung["Status"],pruefung["Versuch"])
mbox = gtk.MessageDialog (None, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, text)
mbox.set_markup (text)
try:
response = mbox.run()
finally:
mbox.hide()
mbox.destroy()