1 Title: En enklere Osloskolehverdag med automatisk sjekk av Fronter
5 <p>En stund nå har jeg vært nødt til å forholde meg til
6 <a href="https://fronter.com/osloskoler/">Fronter</a>, en nettløsning
7 Osloskolen bruker for kontakt mellom hjem og skole. Løsningen
8 imponerer ikke, og det er lagt opp til at vi foreldre skal logge inn
9 regelmessig for å se om noe har endret seg. Idéen om å la folk stikke
10 innom nettsider for å se om det har skjedd endringer er så idiotisk at
11 jeg har lett etter et alternativ. Fronterløsningen har en innebygget
12 løsning der en kan abonnere på forsiden (som viser en oppsummering av
13 det en har tilgang til), og få tilsendt en kopi hver natt, men det
14 fjerner jo bare behovet for å stikke innom, ikke den idiotiske ideen
15 om at folk skal huske hvordan nettsiden så ut sist og oppdage hva som
18 <p>For å gjøre livet enklere har jeg derfor brukt litt tid på å lage
19 et program som kobler seg opp og sjekker etter endringer automatisk,
20 slik at jeg kan få beskjed fra datamaskinen når noe endrer seg i
21 stedet for å forsøke å finne ut av det selv. I går ble scriptet
22 brukbart, og jeg er dermed klar til å dele det med deg.</p>
24 <p>Jeg startet med å skrive programmet i Python, og hadde en versjon
25 som logget inn og hentet ned enkeltsider fra Fronter. Men
26 Fronter-websidene suger golfballer gjennom en hageslange, med
27 uleselig HTML, flere nivåer av iframes og en struktur på innholdet som
28 er svært vanskelig å finne ut av, så jeg ga til slutt opp lxml-parsing
29 med Python og forsøkte meg med WWW::Mechanize for Perl som jeg kjente
30 fra før. I ettertid har jeg oppdaget at WWW:Mechanize også finnes for
31 Python, så jeg kunne antagelig droppet språkbyttet. Men da jeg
32 oppdaget det hadde jeg kommet så langt med Perl-utgaven, så jeg hoppet
35 <p>For å logge inn i Fronter besøker en enten skolens websider eller
36 den sentrale innloggingsiden <tt>https://fronter.com/osloskoler/</tt>.
37 Perl-koden for å logge inn ser slik ut:</p>
40 my $mech = WWW::Mechanize->new();
41 $mech->get('https://fronter.com/osloskoler/');
42 $mech->submit_form(fields => {
43 username => $username,
44 password => $password,
48 <p>Neste steg er å få oversikt over hvilke «rom» en har tilgang til.
49 På vår skole er det rom for skolen, biblioteket, elevrådet,
50 aktivitetsskolen og klasser der en har unger, og dette vil være
51 forskjellig fra person til person. Etter å ha romstert rundt i
52 Fronter-grensesnittet endel kom jeg over en grei HTML-side med
53 oversikt over rommene,
54 <tt>https://fronter.com/osloskoler/adm/projects.phtml?mode=displayRoomchooser</tt>,
55 så jeg bruker denne til å hente ut romoversikt med rom-ID.</p>
59 $mech->get('https://fronter.com/osloskoler/adm/projects.phtml?mode=displayRoomchooser');
60 for my $link ($mech->links()) {
61 my $url = $link->url();
62 if ($url =~ m%/links/list_files.phtml\?edit=(\d+)$%) {
63 $room{$link->text()} = $1;
68 <p>Når en har rom-ID kan en slå opp websiden for rommet, som starter
70 <tt>https://fronter.com/osloskoler/contentframeset.phtml?goto_prjid=$ROMID</tt>
71 (der $ROMID byttes ut med rom-ID-tallet). Det gir en side med
72 iframes, og en må tre nivåer ned i iframes før en får tak i
73 HTML-informasjonen som vises frem når en ser på det aktuelle rommet.
74 Her ga jeg opp den robuste parsingen og hardkodet endel URL-er som i
75 stedet bør spores opp maskinelt. HTML-informasjonen som vises lagres
76 i en fil etter at økt- og innloggings-nøkkel er fjernet og deretter
77 bruker jeg <tt>lynx --dump --nolist</tt> for å hente ut en tekstlig
78 utgave av websiden. Denne tekstlige utgaven sammenlignes med forrige
79 versjon og oversikt over endringer kan så sendes ut på egnet vis.</p>
81 <p>Jeg valgte å bruke git til å holde rede på endringer, så jeg
82 sjekker inn HTML og tekst-utgaver i git og bruker git til å vise frem
83 endringene i tekstutgavene. Programvaren for å gjøre dette er testet
84 på Debian GNU/Linux og kan
85 <a href="https://github.com/petterreinholdtsen/fronter-scraper-oslo">lastes
86 ned fra github</a>.</p>
88 <p>For å bruke dette selv, kjør følgende kommandoer på din
89 Debian-maskin (forutsetter sudo-tilgang for installasjon av
93 sudo apt-get install git lynx-cur libio-prompter-perl libwww-mechanize-perl \
94 libconfig-inifiles-perl
95 git clone https://github.com/petterreinholdtsen/fronter-scraper-oslo
96 cd fronter-scraper-oslo
100 <p>Det gjenstår endel, men systemet er allerede nyttig for meg. Jeg
101 ønsker at systemet også skal laste ned PDF-er og slikt som er lagt ut
102 for nedlasting på sidene, slik at f.eks. ukeplaner kommer inn i
103 git-arkivet mitt automatisk og jeg får automatisk beskjed når ny
104 ukeplan er lagt ut. Kanskje du kan bidra med å få det på plass, eller
105 kanskje du har andre ting du vil fikse? Jeg tar gjerne imot endringer
106 og forbedringer. Det er mye som kan gjøres bedre, og scriptet er ikke
107 veldig robust mot endringer hos nettsidene til Fronter. Jeg regner
108 dermed med at det vil trengs oppdateringer jevnlig etter hvert som
109 Fronter-løsningen endrer seg.</p>