- <item>
- <title>En enklere Osloskolehverdag med automatisk sjekk av Fronter</title>
- <link>http://people.skolelinux.org/pere/blog/En_enklere_Osloskolehverdag_med_automatisk_sjekk_av_Fronter.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/En_enklere_Osloskolehverdag_med_automatisk_sjekk_av_Fronter.html</guid>
- <pubDate>Thu, 12 Feb 2015 10:30:00 +0100</pubDate>
- <description><p>En stund nå har jeg vært nødt til å forholde meg til
-<a href="https://fronter.com/osloskoler/">Fronter</a>, 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.</p>
-
-<p>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.</p>
-
-<p>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 hageslange, 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.</p>
-
-<p>For å logge inn i Fronter besøker en enten skolens websider eller
-den sentrale innloggingsiden <tt>https://fronter.com/osloskoler/</tt>.
-Perl-koden for å logge inn ser slik ut:</p>
-
-<pre>
-my $mech = WWW::Mechanize->new();
-$mech->get('https://fronter.com/osloskoler/');
-$mech->submit_form(fields => {
- username => $username,
- password => $password,
-} );
-</pre>
-
-<p>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,
-<tt>https://fronter.com/osloskoler/adm/projects.phtml?mode=displayRoomchooser</tt>,
-så jeg bruker denne til å hente ut romoversikt med rom-ID.</p>
-
-<pre>
-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;
- }
-}
-</pre>
-
-<p>Når en har rom-ID kan en slå opp websiden for rommet, som starter
-på
-<tt>https://fronter.com/osloskoler/contentframeset.phtml?goto_prjid=$ROMID</tt>
-(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 økt- og innloggings-nøkkel er fjernet og deretter
-bruker jeg <tt>lynx --dump --nolist</tt> 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.</p>
-
-<p>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
-<a href="https://github.com/petterreinholdtsen/fronter-scraper-oslo">lastes
-ned fra github</a>.</p>
-
-<p>For å bruke dette selv, kjør følgende kommandoer på din
-Debian-maskin (forutsetter sudo-tilgang for installasjon av
-programvare):</p>
-
-<pre>
-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
-</pre>
-
-<p>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.</p>
-</description>
- </item>
-