Advertisement
-kw

HS Merseburg E-Mail Benachrichtigung bei neuen Noten v2

-kw
Feb 26th, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.55 KB | None | 0 0
  1. <?php
  2.  
  3. //about
  4. /*
  5.     by -kw, 26.02.2016
  6.     v2
  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.     Das Script muss im Verzeichnis eine Datei anlegen können.
  11.     Das Script wird nur im HIS der HS Merseburg funktionieren.
  12.  
  13.     Keine Haftung, Garantie, Gewährleistung und sonstiges. Benutzung auf eigene Gefahr.
  14.     Sensible Daten sollten nicht auf Servern gespeichert werden!
  15.  
  16.     Changelog
  17.     ---------
  18.     v2:
  19.         + Changed: suche nichtmehr alle 0,0, sondern prüfe jede Note einzeln
  20.         + E-Mail mit Fach und Note
  21.         + erkennt nun auch nicht bestandene Prüfungen
  22.  
  23.  */
  24.  
  25. //config
  26. $mailto = ""; // E-Mail Adresse des zu Benachrichtigenden
  27.  
  28. $username = ""; //Rechenzentrum Nutzername
  29. $passwd = ""; //Rechenzentrum Passwort
  30. $matrikelnr = ""; //Matrikelnummer
  31.  
  32.  
  33. //do not change from here
  34. $savefile = "counter.txt";
  35. $cookies = "cookies.txt";
  36. if (!file_exists($cookies)) {
  37.     file_put_contents($cookies, "");
  38. }
  39.  
  40. $noten = array();
  41. $noten_old = array();
  42. $changed_marks = array();
  43. $old_counter = array();
  44. $new_marks = array();
  45. $mailtext = "Aktualisierte Notenübersicht:\n-----------------------------\n\n";
  46.  
  47.  
  48. function execute($ho,$state,$array, $newsess){
  49.     global $cookies;
  50.     $log_hoster = $array;
  51.     $ch = curl_init();
  52.  
  53.     $url = $log_hoster[$ho][0];
  54.     $postdata = $log_hoster[$ho][1];
  55.     $ref = $log_hoster[$ho][2];
  56.  
  57.     curl_setopt($ch, CURLINFO_HEADER_OUT, true);
  58.     curl_setopt($ch, CURLOPT_AUTOREFERER, true );
  59.     curl_setopt($ch, CURLOPT_COOKIE, $cookies);
  60.     curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
  61.     curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
  62.     curl_setopt($ch, CURLOPT_COOKIESESSION, $newsess );
  63.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  64.     curl_setopt($ch, CURLOPT_HEADER, false);
  65.     curl_setopt($ch, CURLOPT_POST, true);
  66.     curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
  67.     curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
  68.     curl_setopt($ch, CURLOPT_REFERER, $ref);
  69.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  70.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  71.     curl_setopt($ch, CURLOPT_URL, $url);
  72.     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  73.     $retu = curl_exec($ch);
  74.     sleep(1);
  75.     return $retu;
  76. }
  77.  
  78. function getsite($zielurl,$postdata = "",$ref ="", $newsess = true){
  79.     $log_hoster = array(
  80.             array($zielurl,$postdata,$ref)
  81.             );
  82.     $temp = execute(0, true, $log_hoster, $newsess);
  83.  
  84.     return $temp;
  85. }
  86.  
  87. //einlogen
  88. $URL = "https://hisqis.hs-merseburg.de/qisserver/rds?state=user&type=1&category=auth.login&startpage=portal.vm";
  89. $seite = getsite($URL, "username=".urlencode($username)."&password=".urlencode($passwd)."&mtknr=".urlencode($matrikelnr)."&submit=%C2%A0Anmelden%C2%A0");
  90.  
  91. //asi (SessionID) finden
  92. $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";
  93. $seite = explode("\n", getsite($URL,"","https://hisqis.hs-merseburg.de/qisserver/", false));
  94. foreach ($seite as $key => $value) {
  95.     if (str_replace("<a href=\"https://hisqis.hs-merseburg.de/qisserver/rds?state=notenspiegel","",$value) != $value) {
  96.         $start = strpos($value, "asi=");
  97.         $cut = substr($value, $start+4);
  98.         $ende = strpos($cut, '"');
  99.         $asi = substr($cut, 0, $ende);
  100.     }
  101. }
  102.  
  103. //Noten abrufen
  104. $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;
  105. $seite = explode("\n", getsite($URL,"","https://hisqis.hs-merseburg.de/qisserver/", false));
  106.  
  107. //Noten zählen
  108. $counter = 0;
  109. for ($i=0; $i < count($seite); $i++) {
  110.     if (str_replace("bestanden", "", $seite[$i]) != $seite[$i] && str_replace("/QIS/images//his_info3.gif","", $seite[$i-3]) != $seite[$i-3]) {
  111.         $counter++;
  112.         $index = trim($seite[$i-11]);
  113.         while (isset($noten[$index])) {
  114.             $index .= "_";
  115.         }
  116.         $noten[$index] = trim($seite[$i-5]);
  117.     }
  118. }
  119.  
  120. //alten Wert lesen/erzeugen
  121. if (file_exists($savefile)) {
  122.     $old_counter = file_get_contents($savefile);
  123.     $old_counter = explode("\n", $old_counter);
  124.     if (count($old_counter) > 0) {
  125.         foreach ($old_counter as $key => $value) {
  126.             $tmparr = explode(" - ", $value);
  127.             if(count($tmparr) > 1)
  128.                 $noten_old[$tmparr[0]] = $tmparr[1];
  129.         }
  130.     }
  131. }else{
  132.     file_put_contents($savefile, "");
  133. }
  134.  
  135. function comparearrays(){
  136.     global $noten, $noten_old, $savefile, $mailtext, $changed_marks, $new_marks;
  137.     $retu = false;
  138.     if (count($noten) > 0) {
  139.         foreach ($noten as $key => $value) {
  140.             if (isset($noten_old[$key])) {
  141.                 if ($noten_old[$key] != $value) {
  142.                     //Note geändert
  143.                     $changed_marks[$key] = $value;
  144.                     $retu = true;
  145.                 }
  146.             }else{
  147.                 //neue Note
  148.                 $new_marks[$key] = $value;
  149.                 $retu = true;
  150.             }
  151.         }
  152.     }
  153.     if ($retu) {
  154.         if (count($changed_marks) > 0) {
  155.             foreach ($changed_marks as $key => $value) {
  156.                 $mailtext .= "Geändert: ".$key." - ".$value."\n";
  157.             }
  158.         }
  159.         if (count($new_marks) > 0) {
  160.             foreach ($new_marks as $key => $value) {
  161.                 $mailtext .= "Neu: ".$key." - ".$value."\n";
  162.             }
  163.         }
  164.         if (count($noten) > 0) {
  165.             file_put_contents($savefile, "");
  166.             foreach ($noten as $key => $value) {
  167.                 file_put_contents($savefile, $key." - ".$value."\n", FILE_APPEND);
  168.             }
  169.         }
  170.     }
  171.     return $retu;
  172. }
  173.  
  174. //Vergleich, ggf. Mail
  175. if (comparearrays()) {
  176.     mail($mailto, "Neue Note(n) online!", $mailtext);
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement