-kw

HS Merseburg E-Mail Benachrichtigung bei neuen Noten

-kw
Feb 21st, 2016
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.40 KB | None | 0 0
  1. <?php
  2.  
  3. //about
  4. /*
  5.     by -kw, 21.02.2016
  6.     v1.0
  7.     Dieses Script sollte etwa einmal die Stunde per Cron aufgerufen werden.
  8.     Es sucht im HIS nach neuen Noten und sendet euch dann ggf. eine E-Mail.
  9.  
  10.     Streng genommen sucht es nicht nach neuen Noten, sondern prüft, ob sich die Anzahl der Dummy-Noten verändert hat.
  11.     Jede angemeldete und geprüfte aber noch nicht bewertete Prüfung wird mit der Note 0,0 eingetragen.
  12.     Das Script zählt diese "Noten" und vergleicht die Anzahl bei jedem Durchlauf. Hat sich etwas geändert, sendet es eine Mail.
  13.  
  14.     Das Script muss im Verzeichnis eine Datei anlegen können.
  15.     Das Script wird nur im HIS der HS Merseburg funktionieren.
  16.  
  17.     Keine Haftung, Garantie, Gewährleistung und sonstiges. Benutzung auf eigene Gefahr.
  18.     Sensible Daten sollten nicht auf Servern gespeichert werden!
  19.  
  20.  */
  21.  
  22. //config
  23. $mailto = ""; // E-Mail Adresse des zu Benachrichtigenden
  24.  
  25. $username = ""; //Rechenzentrum Nutzername
  26. $passwd = ""; //Rechenzentrum Passwort
  27. $matrikelnr = ""; //Matrikelnummer
  28.  
  29.  
  30. //do not change from here
  31. $cookies = "cookies.txt";
  32. if (!file_exists($cookies)) {
  33.     file_put_contents($cookies, "");
  34. }
  35.  
  36.  
  37. function execute($ho,$state,$array, $newsess){
  38.     global $cookies;
  39.     $log_hoster = $array;
  40.     $ch = curl_init();
  41.  
  42.     $url = $log_hoster[$ho][0];
  43.     $postdata = $log_hoster[$ho][1];
  44.     $ref = $log_hoster[$ho][2];
  45.  
  46.     curl_setopt($ch, CURLINFO_HEADER_OUT, true);
  47.     curl_setopt($ch, CURLOPT_AUTOREFERER, true );
  48.     curl_setopt($ch, CURLOPT_COOKIE, $cookies);
  49.     curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
  50.     curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
  51.     curl_setopt($ch, CURLOPT_COOKIESESSION, $newsess );
  52.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  53.     curl_setopt($ch, CURLOPT_HEADER, false);
  54.     curl_setopt($ch, CURLOPT_POST, true);
  55.     curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
  56.     curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
  57.     curl_setopt($ch, CURLOPT_REFERER, $ref);
  58.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  59.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  60.     curl_setopt($ch, CURLOPT_URL, $url);
  61.     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  62.     $retu = curl_exec($ch);
  63.     sleep(1);
  64.     return $retu;
  65. }
  66.  
  67. function getsite($zielurl,$postdata = "",$ref ="", $newsess = true){
  68.     $log_hoster = array(
  69.             array($zielurl,$postdata,$ref)
  70.             );
  71.     $temp = execute(0, true, $log_hoster, $newsess);
  72.  
  73.     return $temp;
  74. }
  75.  
  76. //einlogen
  77. $URL = "https://hisqis.hs-merseburg.de/qisserver/rds?state=user&type=1&category=auth.login&startpage=portal.vm";
  78. $seite = getsite($URL, "username=".urlencode($username)."&password=".urlencode($passwd)."&mtknr=".urlencode($matrikelnr)."&submit=%C2%A0Anmelden%C2%A0");
  79.  
  80. //asi (SessionID) finden
  81. $URL = "https://hisqis.hs-merseburg.de/qisserver/rds?state=change&type=1&moduleParameter=studyPOSMenu&nextdir=change&next=menu.vm&subdir=applications&xml=menu&purge=y&navigationPosition=functions%2CstudyPOSMenu&breadcrumb=studyPOSMenu&topitem=functions&subitem=studyPOSMenu";
  82. $seite = explode("\n", getsite($URL,base64_decode($base_data),"https://hisqis.hs-merseburg.de/qisserver/", false));
  83. foreach ($seite as $key => $value) {
  84.     if (str_replace("<a href=\"https://hisqis.hs-merseburg.de/qisserver/rds?state=notenspiegel","",$value) != $value) {
  85.         $start = strpos($value, "asi=");
  86.         $cut = substr($value, $start+4);
  87.         $ende = strpos($cut, '"');
  88.         $asi = substr($cut, 0, $ende);
  89.     }
  90. }
  91.  
  92. //Noten abrufen
  93. $URL = "https://hisqis.hs-merseburg.de/qisserver/rds?state=notenspiegelStudent&next=list.vm&nextdir=qispos/notenspiegel/student&createInfos=Y&struct=auswahlBaum&nodeID=auswahlBaum%7Cabschluss%3Aabschl%3D84%2Cstgnr%3D1&expand=0&asi=".$asi;
  94. $seite = explode("\n", getsite($URL,"","https://hisqis.hs-merseburg.de/qisserver/", false));
  95.  
  96. //0,0 zählen
  97. $counter = 0;
  98. for ($i=0; $i < count($seite); $i++) {
  99.     if (trim($seite[$i]) == "0,0" && trim($seite[$i-1]) == '<td class="qis_konto" valign="top" align="right">') {
  100.         $counter++;
  101.     }
  102. }
  103.  
  104. //alten Wert lesen/erzeugen
  105. if (file_exists("counter.txt")) {
  106.     $old_counter = file_get_contents("counter.txt");
  107.     if (isset($old_counter[0])) {
  108.         $old_counter = intval($old_counter[0]);
  109.     }else{
  110.         $old_counter = 0;
  111.     }
  112. }else{
  113.     file_put_contents("counter.txt", "0");
  114.     $old_counter = 0;
  115. }
  116.  
  117. //Vergleich, ggf. Mail
  118. if ($old_counter != $counter) {
  119.     mail($mailto, "Neue Note(n) online!", "Im HIS hat sich gerade etwas getan! :)");
  120.     file_put_contents("counter.txt", $counter);
  121. }
Add Comment
Please, Sign In to add comment