Folketinget ændrer somme tider deres hjemmeside, og det betyder somme tider at Folkets Tings scraper stopper med at virke. For det tilfælde at nogen skulle være interesseret i at bruge Folkest Ting i forbindelse med det forestående folketingsvalg, er scraperen nu opdateret så den virker med den seneste version af Folketingets hjemmeside.
Derudover er data-api’et flyttet fra data.folketsting.dk/service.svc/$metadata til folketsting.dk/data/service.svc/$metadata. Ændringen blev primært indført for at gøre det lettere at hoste Folkets Ting på AppHarbor.
Den sidste nyskabelse er at Udvalgsrejser nu fremgår af Folkets Ting og af folketingsmedlemmnernes profiler. Jeg scrapede rejseaktivitet mens jeg stadig arbejde på Ekstra Bladet, men jeg kan desværre ikke finde de ellers udemærkede artikler der kom ud af det.
Kildekoden til Folkets Ting er lagt på GitHub og kan frit videredistribueres under GNU GPL v.3 licensen. Der har faktisk aldrig rigtigt været gode grunde til at gemme koden væk. I starten tror jeg at jeg var bekymret for at nogen skulle kopiere konceptet, senere har det været et spørgsmål om vi ikke har haft tid til at pudse koden af og frigive den.
Der er tale om et eksport at det Git-repositorie vi har brugt til udviklingen indtil nu. Historikken indgår således ikke, primært fordi den indeholder gamle passwords og koder til diverse eksterne tjenester, sekundært fordi commit-beskederne sommetider indeholder uhøviske referencer til kønsdele m.m..
Hvis du vil i gang med at arbejde med kildekoden til Folkets Ting skal du (hvis du ikke allerede har dem) installere Visual Studio 2010 og SQL Server 2008 R2 Express, begge gratis tilgængelige. Du får også brug for Git, msysgit virker udemærket på Windows. GitHub har en god installationsguide. Med det på plads kan du clone repositoriet til din egen maskine. Opret en database og kør scriptene i dbscripts folderen for at oprette de nødvendige tabeller og tilføje nødvendig data.
Du kan kigge på koden i Visual Studio ved at åbne TTF.sln filen (jeg kaldte oprindeligt Folkets Ting for “Ting til Folket”, deraf forkortelsen). Folkets Ting består af følgende projekter:
- FT.Web: Det primære website kodet i ASP.NET MVC.
- FT.DB: Primær database-interaktion via LinqtoSQL. Indeholder desuden diverse model-valideringskode.
- FT.Model: Repositories der fisker data ud af databasen.
- FT.Scraper: Koden der henter data fra Folketingets hjemmeside (“screen-scraperen”). Koden håndterer al kompleksiteten og retarderetheden ved ft.dk. Der bor drager i den. Jeg undskylder på forhånd.
- FT.Search: Kode der wrapper søgning via Solr — ikke aktivt på sitet for tiden.
- FT.ODataApi: Kode der driver Folkets Ting’s data API.
- FT.Data: Entity Framework database-wrapper som API’et bruger.
- Feedreader: Henter blog-posts til visning på forsiden.
Hvis du laver ændringer som du synes skal med på folketsting.dk, så push koden med dine ændringer til dit eget repo på GitHub og send et pull-request — så lover jeg at kigge på det. Jeg vedligeholder en privat release-branch med database-connection strings og andet godt. Hvis der kommer brugbare ændringer merger jeg dem ind og pusher til AppHarbor, hvor Folkets Ting nu er hostet.
Efter tre ugers nedetid er både folketsting.dk og data.folketsting.dk (API’et) oppe igen. Indtil lige før Jul har Folkets Ting kørt på to rack-servere jeg fandt i en skraldespand på Ekstra Bladet (du kan se et billede af dem spændt på min baggagebærer). De var placeret i et serverrum som IT-Universitetet stiller gratis stiller til rådighed for studerende. Før Jul bad ITU mig om at flytte serverne — et meget rimeligt forlangende taget i betragtning at jeg fik min kandidatgrad i sensommeren.
Jeg er i mellemtiden kommet med på AppHarbor-holdet. AppHarbor’s mission er at gøre drift og opdatering af .NET websites smertefrit og det er oplagt at Folkets Ting skal køre på platformen. AppHarbor involverede imidlertid også at flytte til Silicon Valley. Det, sammen med at vi skulle lancere AppHarbor, gjorde at jeg først har fået sat Folkets Ting op nu. Jeg beklager meget den lange nedetid.
Det gode er at AppHarbor gør det let og ligetil at opdatere Folkets Ting, så med lidt held kan der komme flere features snart. Det er i øvrigt de gode folk i IT&Telestyrelsen der via “Offentlige Data i Spil” sponsorerer flyttet til AppHarbor. Tak for det!
Jeg er i gang med at flytte Folkets Ting fra servere på IT-Universitet til AppHarbor.com. Det kommer til at give nedetid på et par dage, jeg beklager meget.
Jeg har lige lagt lille opdatering af API’et op. Opdateringen fixer en dum bug i håndteringen af API-keys som betød at nytilmeldte brugere sommetider ikke kunne bruge API’et. Opdateringen indfører også en begrænsning der gør at max 100 elementer kan returneres ved hvert API-kald. Denne begrænsning er for at undgå at serveren skal bygge kæmpe svar, f.eks. med tusindvis af paragraf 20 spørgsmål. For at få de næste 100 elementer af en given type bruges ’skip’ (altså “spring de første 100 over”): http://folketsting.dk/data/Service.svc/P20Question/?$orderby=P20QuestionId&skip=100&apikey=7mRWp6WmTzsbAkMwvHxy
Det er pænest (men i dette tilfælde ikke strengt påkrævet) at angive en ordning så alle er enige om fra hvilken ende man starter når elementer skal springes over.
For snart 14 dage siden fik Folkets Ting et API. Lanceringen var en smule hektisk fordi jeg skulle til bryllup i Italien. Da Mikkel fra Version2 ringede svarede jeg på hans spørgsmål fra lufthavnen. Interessant nok ringede Mikkel også til Folketinget for at høre hvad de mener om det hele.
Fordi jeg havde travlt er det eneste eksempel alt for kompliceret. Her er nogle mindre komplicerede eksempler (ADVARSEL, XML):
- Alle politikere: http://folketsting.dk/data/service.svc/Politician/?apikey=7mRWp6WmTzsbAkMwvHxy
- Alle politikere, kun fornavn og efternavn: http://folketsting.dk/data/Service.svc/Politician/?$select=Firstname,Lastname&apikey=7mRWp6WmTzsbAkMwvHxy (“select” betyder at man kun vil have nogle bestemte kolonner)
- Ida Auken: http://folketsting.dk/data/Service.svc/Politician(1198)/?apikey=7mRWp6WmTzsbAkMwvHxy (Ida’s ID i Folkets Tings database er 1198 — det kunne man se i det første resultat)
- Alle §20-spørgsmål: http://folketsting.dk/data/Service.svc/P20Question/?apikey=7mRWp6WmTzsbAkMwvHxy
- Alle Ida Aukens §20-spørgsmål: http://folketsting.dk/data/Service.svc/Politician(1198)/?$expand=P20Question&apikey=7mRWp6WmTzsbAkMwvHxy (“expand” betyder at man får lov at se vedhæftede entiteter)
Husk at skifte apikey ud med din egen key hvis du bruger eksemplerne. Du kan få en helt gratis her. Som udgangspunkt leverer API’et atomar odata-xml, men det kan også lave json ved at proppe en “format=json” parameter i url’en.
Eksemplet med udvalgsrejserne er faktisk et eksempel på data i API’et som ikke kan ses på folketsting.dk. Der er andre eksempler på sådan hemmelig data som vi scraper men ikke eksponerer via websitet. F.eks. er alle lovene kategoriseret efter Folketingets kategori-system, men af datamodeleringsårsager hænger kategorierne ikke ordentligt sammen med lovene.
- Alle kategorierne: http://folketsting.dk/data/Service.svc/Category/?apikey=7mRWp6WmTzsbAkMwvHxy
- Alting i kategori forsvar: http://folketsting.dk/data/Service.svc/Category(89)/ItemCategory/?&apikey=7mRWp6WmTzsbAkMwvHxy (“ItemId” refererer i dette tilfælde til love)
- En af lovene i forsvarskategorien: http://folketsting.dk/data/Service.svc/Law(484)/?&apikey=7mRWp6WmTzsbAkMwvHxy
Der er forskellige andre problemer med den måde API’et er lavet på. F.eks. ville jeg rigtig gerne proppe billed-url’er i politiker-resultaterne, men som man kan se af dette Stackoverflow-spørgsmål er det ikke rigtigt muligt (svaret virker ikke). Hvis man kigger i Ida Aukens data kan man se at hun har tilknyttet et billede med id 287. Folkets Ting kan rendere et billede med det id sådan her: http://folketsting.dk/filer/billeder/idaauken/287. Folkets Ting kan endda skalere billedet for dig: http://folketsting.dk/filer/billeder/skaleret/idaauken/287?width=25&height=25. “idaauken” delen af url’en styrer hvad filen kommer til at hedde hvis den downloades (script-kiddies der forsøger at injekte bras kommer over knæet).
Jeg kommer i øvrigt snarest til snarest at sætte en maximum pagesize på 100 for at undgå at generere for store resultater. Ønsker man flere resultater kan de fås ved at page sig videre.
God fornøjelse med API’et og skriv endelig til friism+ftapi@gmail.com hvis der opstår problemer.
Sommer-2009 versionen af Folkets Ting inkludere information om §20 spørgsmål, de spørgsmål folketingsmedlemmer kan stille til regeringens ministre. Den feature blev vi desværre nød til at sløjfe da Folketinget fik ny hjemmeside. Den nye hjemmeside indeholder nemlig ikke svar på spørgsmål i klar-tekst, men som pdf’er eller Word dokumenter. Det er vigtigt for mig at understrege det er genialt at det offentlige frigiver dokumenter af alle slags, også pdf’er. Når det er sagt, så er pdf- og word-formaterne enhver screen-scrapers værste fjende, meget værre end login-systemer eller skramlet html faktisk.
Svarerne martrede mig længe, og jeg prøvede faktisk at lave en parser der kunne skille dokumenterne ad. Desværre bruger hvert ministerium deres egen dokumenttemplate når de skal skrive svar for deres minister, så jeg skulle stort set skrive en parser for hvert ministerium. Til opdateringen af Folkets Ting strakte jeg derfor våben og lod Scribd stå for svar-dokumenterne. Resultatet kan f.eks. ses på spørgsmål Om sikkerheden ved brug af NemID.dk. Løsningen er ikke særlig perfekt: Scribd har somme tider problemer med at behandle dokumenter fra Folketinget (skriv gerne hvis du finder spørgsmål med problemer), vores søgning kan ikke søge i svarerne (dette kunne nok løses med mere arbejde) og det er heller ikke rigtigt muligt at kommentere dem.
De relevante informationer er tilgængelige via API’et således at svardokumenter også kan benyttes af API-brugere.
Med opdateringen har politiker-profiler også fået word clouds. F.eks. kan det ses på Ida Aukens profil at hun for nyligt har talt meget om “partikler”, “miljøklagenævnet”, “grænseværdier” og “filtre”. Det hænger meget godt sammen med at Ida er miljøordfører for Socialistisk Folkeparti. Skyerne genereres ved at tage en klump af politikerens seneste taler, strippe fyldord ud (f.eks. “og”) og tælle forekomsten af hver ord. Google Visualization Toolkit har en dims der kan rendere en word cloud baseret på denne data.
Så har Folkets Ting fået et API! Yay. API’et er noget jeg har lovet siden Offentlige Data i Spil Konferencen i februar 2010, og jeg er glad for endelig at have Folkets Ting-delen færdigt.
Teknisk er der tale om en service der leverer data efter OData protokollen. Det er noget Microsoft står for, men der findes client-libraries til de fleste programmeringssprog. Der er endda et Excel-plugin der kan trække data fra en OData service. Services kan levere både XML og JSON, så det er muligt at lave rene browser-mashups. API’et kan sende metadata om det data der eksponeres (se f.eks. XML der kommer ud her: http://folketsting.dk/data/Service.svc/$metadata), så det er i et vist omfang selv-dokumenterende. Hvis der er noget du er i tvivl om, er du meget velkommen til at skrive til friism+ftapi@gmail.com.
Opdatering: Jeg har skrevet en blog-post med flere eksempler på brug af API’et.
Jeg har lavet en Google Maps mashup der giver dig mulighed for at udforske de ti mest rejsende Folketingspolitikeres rejser. De to relevante API-kald ser sådan her ud:
http://folketsting.dk/data/Service.svc/Politician/?$expand=CommitteeTripParticipant&$select=Firstname,Lastname,PoliticianId,CommitteeTripParticipant/CommitteeTripId&$format=json&$callback=render&callback=render&apikey=[APIKEY]
http://folketsting.dk/data/Service.svc/CommitteeTrip/?$expand=CommitteeTripParticipant,CommitteeTripDestination&$select=Purpose,ActualExpenses,Budget,NonPolParticipants,CommitteeTripId,Place,CommitteeTripParticipant/CommitteeTripParticipantId,CommitteeTripDestination/Lat,CommitteeTripDestination/Lng,CommitteeTripDestination/PlaceNameName&$format=json&$callback=callback1&callback=callback1&apikey=[APIKEY]
Det første kald henter alle politikere samt information om hvilke rejser de har været med på. Det andet kald henter alle udvalgsrejser inkl. udgifter og destinationer. Informationerne bliver kombineret og lagt på kort. Du kan se resultatet her og bede din browser vise dig kildekode.
Læg mærke til at kald til API’et kræver en API-key. Keys kan genereres frit og gratis på Folkets Ting, og der er ingen begrænsninger i brug af API’et. Nøglen giver dog Folkets Ting mulighed for midlertidigt at lukke for adgang for brugere der laver mere API-trafik end vi kan håndtere.
Det data som API’et publicerer kommer (hovedsageligt) fra Folketingets hjemmeside på ft.dk. Det fremgår af deres side om copyright at de fleste af teksterne ikke er genstand for ophavsret. Dog er vi i tvivl om status af f.eks. tale-referater. Folkets Ting kan ikke rigtig hjælpe med jura, du bliver nød til selv at kontakte Folketinget for at høre om den brug af data du påtænker er OK. I parentes bemærket, har vi aldrig spurgt om lov til at lave Folkets Ting websitet, og Folketinget har aldrig brokket sig.
Hvis du bruger data fra Folkets Ting er du meget velkommen til at nævne os eller give os et link, men det er ikke et krav.
Som bekendt vandt Folkets Ting kr. 100.000 til brug for udviklingen af API’er. Vi har ikke brugt nogen af pengene endnu, men vi forventer snarest at bruge nogen af dem på at udskrive en lille konkurrence om hvem der bedst kan genbruge de nye data på snedige måder.
Til #ODIS konferencen lovede jeg også adgang til kommunal og regional data svarende til hvad Folkets Ting disponerer over. Det projekt er jeg slet ikke gået i gang med endnu, så I må, indtil videre, stille jeg tilfredse med hvad der kommer ud af Folketinget.
Jeg glæder mig utrolig meget til at se hvad I kan få ud af API’et!
Sidste efterår slog Folketinget en stilling som CMS-udvikler og data-integrator op. Stillingsopslaget findes stadig. Jeg passede profilen udemærket og besluttede mig — for sjov — at søge stillingen. De sidste to afsnit i min ansøgning lød som følger:
Jeg har personligt udtænkt og implementeret folketsting.dk, der hugger parlamentarisk data fra Folketingets hjemmeside og bruger det til at lave en bedre side. På Folkets Ting kan vælgere effektivt overvåge politikerne (bl.a. via aktivitetsgrafer) og tale igen hvis de har noget på hjerte. Jeg har brugt data til at skrive om f.eks. rejseudgifter, verdens længste §20 spørgsmål og hvem der talte mest i folketingssalen (se bloggen: folketsting.wordpress.com). Jeg har præsenteret Folkets Ting på Reboot 11 og er inviteret til at holde foredrag på New Media Days til november. Mit arbejde med Folkets Ting har givet mig stor indsigt i Folketingets arbejdsgange og hjemmesidestruktur samt i hvilke udfordringer man står overfor i forhold til legacysystemer og webstandarder.
Jeg søger stillingen i Folketingets IT-afdeling for at få adgang til kodebasen til folketinget.dk og til Folketingets driftsservere. Denne adgang vil jeg bruge til om aftenen — når de øvrige ansatte er gået hjem — at rette de fejl der for nuværende hindrer tilfredsstillende screen-scraping af data fra hjemmesiden. Mest presserende er at §20 spørgsmål ikke længere vises med de emne-kategorier der findes i TingDok, at det ikke fremgår af et tale-referat om det er 1. udgave (kladde) eller 2. udgave (endelig) og at dokumenter som f.eks. høringssvar publiceres som fuldstændig uparselige PNG billeder. Jeg vil også arbejde på få alle sider på folketinget.dk til at validere pr. W3Cs standarder. Når jeg — i min fritid — har bragt disse ting i orden, vil jeg implementere et data-API, så alle danskere kan få glæde af de data Folketinget akkummulerer. Jeg vil bruge adgang til Folketingets produktionsmiljøer til at lancere API’et uden IT-afdelingens viden eller godkendelse.
Jeg modtog en høflig tak for ansøgningen, men blev af en eller anden årsag aldrig kaldt til samtale…
Hvis du kigger på folketsting.dk lige nu, så kigger du på den nye version af sitet. “Men det ligner det gamle bras!” hører jeg dig sige — og jeg giver dig ret: De fleste ændringer er at finde bag kulisserne.
Den største opgave har været at omskrive den robot (“scraper”), der hver nat henter data fra Folketingets nye hjemmeside. Nogle ting er ikke ændret synderligt på den nye sider, men meget indhold vises helt anderledes og robotten skulle stort set skrives forfra. Den nye robot henter allerede lidt mere lov-data end den gamle og jeg regner med at udvide den yderligere. §20 spørgsmål er dog en anden sag, mere om det senere.
En anden betydelig ændring i den nye version er at Rune Sørensen har erstattet SQL Server Full Text Indexing med Lucene/Solr som Folkets Tings søgemotor. Solr giver mulighed for sofistikerede faceterede søgninger og andre labre ting. Der forestår stadig lidt arbejde med interfacet, men jeg synes allerede vi er meget bedre end Folketinget: Søgninger med flere ord tager ofte over 40 sekunder på Folketingets hjemmeside — på Folkets Ting svarer vi med det samme. Nu er det selvfølgelig ikke særlig svært at gøre noget bedre end Folketinget og vi regner da heller ikke med at hvile på laurbærene. Jeg prøver at lokke Rune til at skrive en blogpost om planerne for endnu bedre søgning snarest.
Skriv en kommentar eller brug Feedback-tab’en hvis du finder fejl eller har forslag til Folkets Ting.

