Gå til innhold

Script for sjekk og varsling av nye karakterer på Studweb


Anbefalte innlegg

Sånn.. lovte å oppdatere sjekkeren til å fungere med endringene i Studweb den siste tiden. Det var heldigvis ikke rare endringene som skulle til..

 

Det er lagt til en privat variabel i Studwebklassen som må settes:

private $shortName = "HiST";

 

Dere finner koden for deres kode bakerst i lenken dere bruker på forsiden av studweb.no.

 

Lenke til kommentar
Videoannonse
Annonse

Bah, typisk!

Har satt på at jeg skal få mail ved nye innlegg i denne tråden, men det har jeg ikke fått! :thumbdown:

 

Så nå har jeg også rettet opp scriptet og skulle hit for å legge det ut... :p

 

Er du sikker på at den ikke finner ut at du allerede har fått karakter i faget hvis du har fått f.eks godkjent øvinger i samme fag (ser du sjekker bare på fagnavnet, tror jeg?)?

 

Legger nå ut min versjon uansett - den viser også hva du har fått karakter i (øving, eksamen, osv):

 

<?php

header('Content-Type: text/html; charset=utf-8');

// Studwebsjekker av kim (krøllalfa) bprog dott no

 

echo "<pre>";

 

// Sjekker tid på året

echo " - Sjekker måned.\n";

if ((date("n") == 5) || (date("n") == 6) || (date("n") == 12) || (date("n") == 1)) {

echo " - Det er enten januar, mai, juni eller desember - fortsetter...\n";

// Sjekker tid på døgnet, siden karakterer bare kommer i arbeidstiden

echo " - Sjekker tid på døgnet.\n";

if (date("G") >= 7 && date("G") <= 19) {

echo " - Det er dagtid - fortsetter... \n";

}

else {

echo " - Det er ikke dagtid - avbryter...\n";

exit;

}

}

else {

echo " - Det er ikke januar, mai, juni eller desember - avbryter...\n";

exit;

}

 

 

$path = "/path/til/Studwebsjekker/";

 

 

require($path.'HTMLFetcher.php');

require($path.'sendSMS.php');

 

try {

// Første argumentet er bane til en skrivbar fil der eksamensresultatene lagres..

// $sw = new Studweb("/tmp/studwebsjekker.txt", "persnr", "pin", "mail", "mobil");

 

$sw->start();

} catch (Exception $e) {

echo "\n".'--- Unntak ---' . "\n";

echo $e->getMessage() ."\n\n";

}

 

class Studweb {

 

// -- Start config -- //

 

private $linkAdr = "/as/WebObjects/studentweb2?inst=HiST";

 

// Sett inn passordet hos ung1881.no her

private $ungUsername = "user";

private $ungPassword = "pass";

 

// Bane til skrivbar mappe for cookies

private $cookiePath = "/tmp/";

 

// -- Slutt config -- //

 

private $path;

private $pnr;

private $pin;

private $mail;

private $mobil;

 

private $separator = "<--separator-->";

private $oldData = array();

 

public function __construct($path, $pnr, $pin, $mail, $mobil) {

 

$this->path = $path;

$this->pin = $pin;

$this->pnr = $pnr;

$this->mail = $mail;

$this->mobil = $mobil;

 

$lines = file($this->path);

if (isset($lines) && count($lines) > 0) {

 

$this->oldData = $lines;

//foreach($lines as $line) {

//$parts = split($this->separator, $line);

//$this->oldData[] = array("eksamen" => $parts[0], "hva" => $parts[1], "karakter" => $parts[2]);

//}

 

}

 

 

}

 

public function start() {

 

try {

 

echo " - Initierer script.\n";

$fetcher = new HTMLFetcher("https://www.studweb.no");

$fetcher->setCookieFile($this->cookiePath);

 

// Fetch the first page

echo " - Går til ".$this->linkAdr.".\n";

$loginpage = $fetcher->fetchPage($this->linkAdr);

// $loginpage = $startpage->pushLinkNamed($this->linkName);

 

// Fetch the login page

echo " - Initierer loginform.\n";

$conditions = new HTMLConditions("form");

$conditions->needAttribute("action", "/as/WebObjects/studentweb2.woa/wa/login");

$conditions->needAttribute("name", "fnrForm");

 

// Get and fill out the correct form

$loginform = $loginpage->getForm($conditions);

$loginform->setFieldValue("fodselsnr", $this->pnr);

$loginform->setFieldValue("pinkode", $this->pin);

$loginform->removeField("pinmail");

 

echo " > Sender loginform.\n";

$infopage = $loginform->submit();

 

// Fetch the "innsyn" page

echo " < Laster innsyn siden.\n";

$innsynpage = $infopage->pushLinkNamed(" Innsyn");

 

// Fetch the wanted page

echo " < Laster siden med eksamensresultatene.\n";

$karakterside = $innsynpage->pushLinkNamed(" Resultater");

 

echo " - Henter ut karakterdata.\n";

$htmlconditions = new HTMLConditions("table");

$htmlconditions->needAttribute("width", "95%");

$htmlconditions->needAttribute("cellspacing", "2");

$htmlconditions->needAttribute("cellpadding", "2");

$htmlconditions->needAttribute("border", "0");

 

$tableconditions = new HTMLTableConditions();

$tableconditions->setNumberOfCols(10);

 

$table = $karakterside->getTable($htmlconditions, $tableconditions);

 

echo " - Ser etter nye resultater.\n";

$tab = $table->getTableRows();

$filedata = '';

$nyttRes = false;

foreach ($tab as $row) {

 

if (count($row) < 8) continue;

 

if (!empty($row["Emnenavn"]["text"])) {

$eksamen = $row["Emnenavn"]["text"];

}

 

if (!empty($row["Emnenavn"]["text"])) {

$hva = "sluttkarakter";

}

else {

$hva = strtolower($row["Vurdering"]["text"]);

}

$karakter = $row["Resultat"]["text"];

$thisFileData = $eksamen . $this->separator . $hva . $this->separator . $karakter . "\n";

$filedata .= $thisFileData;

 

// Sjekker om det er et nytt resultat

$ny = true;

if (in_array($thisFileData, $this->oldData)) {

$ny = false;

$break;

}

 

if ($ny) {

echo " * Nytt eksamensresultat! $karakter på $hva i $eksamen\n";

echo " > Mailer resultatene til ".$this->mail.".\n";

$meldingMail = "Du fikk en $karakter på $hva i faget $eksamen!\n - Studwebsjekkeren!";

$meldingSMS = "Du fikk en $karakter i faget $eksamen!\n - Studwebsjekkeren!";

mail($this->mail, "Karakter i ".$eksamen."!", $meldingMail, "From: Studweb-sjekker <[email protected]>");

$nyttRes = true;

 

echo " > Sender sms til ".$this->mobil."\n";

$sms = new SMSsender($this->ungUsername, $this->ungPassword, $this->cookiePath);

$smsres = $sms->sendSMS($this->mobil, $meldingSMS);

echo ($smsres) ? " + Melding sendt\n" : " ! Kunne ikke sende SMS: " . var_dump($sms->hentSessionLogg()) . "\n";

 

}

}

 

if ($nyttRes) {

echo " > Skriver nye resultat til fil.\n";

$fp = fopen($this->path, "w");

$res = fwrite($fp, $filedata);

fclose($fp);

 

echo ($res) ? " - Data skrevet til fil.\n" : " x Kunne ikke skrive data til fil!!\n";

 

 

 

} else {

echo " - Ingen nye karakterdata.\n";

}

 

echo " - Logger ut \n";

$infopage->pushLinkNamed(" Logg ut");

echo "Bye!\n</pre>";

 

} catch (Exception $e) {

if (isset($innsynpage)) {

echo " - Feil oppstod, logger ut \n";

$infopage->pushLinkNamed(" Logg ut");

}

echo "\n".'--- Unntak ---' . "\n";

//echo $e;

echo $e->getMessage() ."\n\n";

}

 

}

 

}

 

?>

 

 

Lenke til kommentar
Er du sikker på at den ikke finner ut at du allerede har fått karakter i faget hvis du har fått f.eks godkjent øvinger i samme fag (ser du sjekker bare på fagnavnet, tror jeg?)?

 

Godt mulig det er noe der..

 

Oppdatering: Ser ut som mer fornuftig formatering av det. En annen bivirkning av måten jeg har lagret det på er at den ikke oppdager at "nye obligatoriske øvinger" har blitt lagt til.. Uten at det egentlig er interessant.

Endret av Kimble
Lenke til kommentar
  • 4 uker senere...
  • 10 måneder senere...
  • 5 år senere...

Og fem år senere ... om noen fremdeles er interessert i bli varslet automatisk om karakterene sine er det altså fremdeles mulig. Jeg har også laget et skript, vel vitende om Sindre Froyns enkle Python script, men uvitende om alle de andre variantene som jeg fant i kveld (i hvert fall tre forskjellige i 2008/2009!). Tenkte at noe litt mer brukervennlig, testet, og "polert" enn det jeg hadde sett kunne være på sin plass, men Tobias V Langhoff pythonskript er både mer mer robust og har flere nyttefunksjoner. Men ingen av disse (inkl. mitt) - heller ikke php-skriptet i denne tråden - er perfekte eller har alle funksjoner de andre har. Hardkoding av strenger, manglende tester og dokumentasjon, etc

 

Nå er i hvert fall både mitt og Tobias' skript på GitHub, så det skal være enkelt å bidra med forbedringer og rettinger uten lenkeråte!

 

Mangler i mitt skript

  • Logikk for å funke på tvers av institusjonene (som i phpskriptet).

  • Et bedre alternativ enn tekstparsing på nøkkelord for å finne lenkene hadde også vært fint. Brekker for lett når institusjonene endrer tekstene.

  • SMS-forsendelse via Netcom og Telenors (gratis) tjenester

  • Daemonisering (finnes i Tobias skript)

  • Konfigurasjon av kommersielle sms-gatewayer

Endret av 8086
  • Liker 2
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...