X-Git-Url: http://pere.pagekite.me/gitweb/homepage.git/blobdiff_plain/5cfd343f93deef4804e7450444ef9f75cc14a0ce..cbe978a086acb4e359024e19065dc47278e3a398:/blog/archive/2015/02/index.html diff --git a/blog/archive/2015/02/index.html b/blog/archive/2015/02/index.html index cc046cbd5f..694980a566 100644 --- a/blog/archive/2015/02/index.html +++ b/blog/archive/2015/02/index.html @@ -21,6 +21,129 @@

Entries from February 2015.

+
+
+ En enklere Osloskolehverdag med automatisk sjekk av Fronter +
+
+ 12th February 2015 +
+
+

En stund nå har jeg vært nødt til å forholde meg til +Fronter, en nettløsning +Osloskolen bruker for kontakt mellom hjem og skole. Løsningen +imponerer ikke, og det er lagt opp til at vi foreldre skal logge inn +regelmessig for å se om noe har endret seg. Idéen om å la folk stikke +innom nettsider for å se om det har skjedd endringer er så idiotisk at +jeg har lett etter et alternativ. Fronterløsningen har en innebygget +løsning der en kan abonnere på forsiden (som viser en oppsummering av +det en har tilgang til), og få tilsendt en kopi hver natt, men det +fjerner jo bare behovet for å stikke innom, ikke den idiotiske ideen +om at folk skal huske hvordan nettsiden så ut sist og oppdage hva som +er endret.

+ +

For å gjøre livet enklere har jeg derfor brukt litt tid på å lage +et program som kobler seg opp og sjekker etter endringer automatisk, +slik at jeg kan få beskjed fra datamaskinen når noe endrer seg i +stedet for å forsøke å finne ut av det selv. I går ble scriptet +brukbart, og jeg er dermed klar til å dele det med deg.

+ +

Jeg startet med å skrive programmet i Python, og hadde en versjon +som logget inn og hentet ned enkeltsider fra Fronter. Men +Fronter-websidene suger golfballer gjennom en hangeslange, med +uleselig HTML, flere nivåer av iframes og en struktur på innholdet som +er svært vanskelig å finne ut av, så jeg ga til slutt opp lxml-parsing +med python og forsøkte meg med WWW::Mechanize for Perl som jeg kjente +fra før. I ettertid har jeg oppdaget at WWW:Mechanize også finnes for +python, så jeg kunne antagelig droppet språkbyttet. Men da jeg +oppdaget det hadde jeg kommet så langt med Perl-utgaven, så jeg hoppet +ikke tilbake.

+ +

For å logge inn i Fronter besøker en enten skolens websider eller +den sentrale innlogginsiden https://fronter.com/osloskoler/. +Perl-koden for å logge inn ser slik ut:

+ +
+my $mech = WWW::Mechanize->new();
+$mech->get('https://fronter.com/osloskoler/');
+$mech->submit_form(fields => {
+    username    => $username,
+     password    => $password,
+} );
+
+ +

Neste steg er å få oversikt over hvilke «rom» en har tilgang til. +På vår skole er det rom for skolen, biblioteket, elevrådet, +aktivitetsskolen og klasser der en har unger, og dette vil være +forskjellig fra person til person. Etter å ha romstert rundt i +Fronter-grensesnittet endel kom jeg over en grei HTMl-side med +oversikt over rommene, +https://fronter.com/osloskoler/adm/projects.phtml?mode=displayRoomchooser, +så jeg bruker denne til å hente ut romoversikt med rom-ID.

+ +
+my %room;
+$mech->get('https://fronter.com/osloskoler/adm/projects.phtml?mode=displayRoomchooser');
+for my $link ($mech->links()) {
+    my $url = $link->url();
+    if ($url =~ m%/links/list_files.phtml\?edit=(\d+)$%) {
+        $room{$link->text()} = $1;
+    }
+}
+
+ +

Når en har rom-ID kan en slå opp websiden for rommet, som starter +på +https://fronter.com/osloskoler/contentframeset.phtml?goto_prjid=$ROMID +(der $ROMID byttes ut med rom-ID-tallet). Det gir en side med +iframes, og en må tre nivåer ned i iframes før en får tak i +HTML-informasjonen som vises frem når en ser på det aktuelle rommet. +Her ga jeg opp den robuste parsingen og hardkodet endel URL-er som i +stedet bør spores opp maskinelt. HTML-informasjonen som vises lagres +i en fil etter at sessjons- og innloggs-nøkkel er fjernet og deretter +bruker jeg lynx --dump --nolist for å hente ut en tekstlig +utgave av websiden. Denne tekstlige utgaven sammenlignes med forrige +versjon og oversikt over endringer kan så sendes ut på egnet vis.

+ +

Jeg valgte å bruke git til å holde rede på endringer, så jeg +sjekker inn HTML og tekst-utgaver i git og bruker git til å vise frem +endringene i tekstutgavene. Programvaren for å gjøre dette er testet +på Debian GNU/Linux og kan +lastes +ned fra github. For å bruke det, kjør følgende kommandoer på din +Debian-maskin (forutsetter sudo-tilgang for installasjon av +programvare):

+ +
+sudo apt-get install git lynx-cur libio-prompter-perl libwww-mechanize-perl \
+      libconfig-inifiles-perl
+git clone https://github.com/petterreinholdtsen/fronter-scraper-oslo
+cd fronter-scraper-oslo
+./update-git
+
+ +

Det gjenstår endel, men systemet er allerede nyttig for meg. Jeg +ønsker at systemet også skal laste ned PDF-er og slikt som er lagt ut +for nedlasting på sidene, slik at f.eks. ukeplaner kommer inn i +git-arkivet mitt automatisk og jeg får automatisk beskjed når ny +ukeplan er lagt ut. Kanskje du kan bidra med å få det på plass, eller +kanskje du har andre ting du vil fikse? Jeg tar gjerne imot endringer +og forbedringer. Det er mye som kan gjøres bedre, og scriptet er ikke +veldig robust mot endringer hos nettsidene til Fronter. Jeg regner +dermed med at det vil trengs oppdateringer jevnlig etter hvert som +Fronter-løsningen endrer seg.

+ +
+
+ + + Tags: norsk, web. + + +
+
+
+
Nude body scanner now present on Norwegian airport @@ -1634,7 +1757,7 @@ ser hva dbpedia kan gjøre med innholdet i Wikipedia.

  • January (7)
  • -
  • February (3)
  • +
  • February (4)
  • @@ -1886,7 +2009,7 @@ ser hva dbpedia kan gjøre med innholdet i Wikipedia.

  • multimedia (32)
  • -
  • norsk (259)
  • +
  • norsk (260)
  • nuug (172)
  • @@ -1938,7 +2061,7 @@ ser hva dbpedia kan gjøre med innholdet i Wikipedia.

  • vitenskap (4)
  • -
  • web (34)
  • +
  • web (35)