Dette indlæg er alene udtryk for skribentens egen holdning.

Hobbyprojekt: Twitter-bot

30. maj 2020 kl. 13:374
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Nu skal det jo ikke handle om GDPR alt sammen. Nogen gange får jeg også tid til at kode lidt.

Jeg har brugt et par aftener på at lave en Twitter-bot, @dkhoering, som kvidrer om udkast til love og bekendtgørelser i offentlig høring.

Der afholdes overraskende mange høringer. Emnerne spænder vidt – fra ændring af momsrefusionsbekendtgørelsen over grøn buspulje til regionale busser og øer til ændring af grænseværdier for pesticidrester af stofferne azinphos-methyl, bentazon, dimethomorph.

Meget af det er enormt teknisk. Men uanset om man har interesse og indsigt i buspuljer og pesticidrester eller ej, så er det betagende at følge med i, hvordan lovmøllen maler. Meget af det er ret ukontroversielt og bliver aldrig omtalt i pressen. Men det gør det ikke mindre vigtigt.

Artiklen fortsætter efter annoncen

Virksomheder, interesseorganisationer og borgere med særlig indsigt kan bruge høringerne til at påpege svagheder, som ministerier og styrelser måtte have overset. Men det kræver jo, at man kender til høringens eksistens, og de færreste almindelige mennesker kommer lige forbi Høringsportalen, hvor alle høringer bliver offentliggjort.

Det er så her, min Twitter-bot kommer ind i billedet. Målet er at udbrede kendskabet til høringerne – herunder gøre det lettere for mig selv at følge med – og forhåbentlig motivere flere til at bidrage med nyttig viden.

@dkhoering’s profilside på Twitter

Under motorhjelmen

Jeg kunne genbruge en del af koden fra en anden Twitter-bot, @togtiltiden, som jeg lavede for et par år siden, da DSB gik med planer om at fjerne deres trafikinformation fra Twitter – en beslutning, som dog aldrig blev fløjtet til afgang.

Artiklen fortsætter efter annoncen

Høringsportalen har et Atom-feed, som jeg henter en gang i timen. Selve feedet indeholder dog ikke al relevant information, blandt andet hvilken myndighed der står bag høringen, så den information scraper jeg i stedet fra selve HTML-siden. Det kan virke fristende at parse HTML ved hjælp af regulære udtryk, men man løber hurtigt ind i problemer, så jeg benytter mig i stedet af en HTML-parser og XPath.

Høringerne er ofte navngivet temmelig omstændeligt men dog systematisk, så det er let at afkorte dem. Eksempelvis “Høring over udkast til forslag til lov om ændring af lov om smølfer” koger jeg ned til “Lov om smølfer”. Her er regulære udtryk til gengæld mere velegnede. Hvis navnet stadig er længere end 280 tegn (opgjort på en lidt usædvanlig måde), prøver jeg at forkorte “bekendtgørelse” til “bkg.” og ellers blot beskære teksten.

Jeg gemmer høringerne i en database. Når feedet indeholder en høring, jeg ikke er stødt på før, bliver den postet på Twitter. Hvis høringen allerede findes i databasen men har fået tilføjet et høringsnotat, dvs. en opsummering af de modtagne høringssvar udarbejdet efter svarfristen, bliver der postet en opdatering til det oprindelige tweet.

For hvert ministerium og emneområde har jeg hardkodet en liste af hashtags, som føjes til tweetet. Lad mig gerne vide, hvis jeg har overset nogle relevante tags. Bemærk dog, at hashtagget kun afhænger af ministerium og emneområde og ikke af selve høringens titel eller beskrivelse, så det er ikke altid, de rammer helt plet. Sådan må det være.

For at oprette en app, der kan bruge Twitters API, skal man igennem en manuel godkendelses­proces. Behandlingstiden var fire dage. Profilbilledet har jeg selv bikset sammen i Gimp baseret på et public domain-ikon.

Dit fingeraftryk

Jeg opfordrer dig, kære læser, til at følge med og sætte dit eget fingeraftryk på landets love. Eksempelvis ved at påpege, hvis et lovforslag ikke lever op til de syv krav til digitaliseringsklar lovgivning.

Et eksempel på en høring med en it-vinkel er høringen om det nye system til indsamling af vælgererklæringer, som erstatter det nuværende vælgererklæring.dk. Vi husker nok, at partierne Stram Kurs og Klaus Riskær Pedersen fandt en måde at omgå det gamle system. Det nye system forhindrer den form for snyd, men måske gemmer der sig andre smuthuller? Udfordringen er hermed givet videre. Høringsfristen er 12. juni.

4 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
4
3. juni 2020 kl. 08:39

Hej Kim,

Det ville være fedt, hvis I ville tilføje nogle Open Graph Protocol-tags til siderne, så de fremstår med titel og resume, når man linker til dem fra Twitter, Facebook m.fl. Se fx https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started.

Jeg ved ikke, om den slags ændringer skal godkendes og bevilges i flere instanser, men det tager ikke lang tid, så måske kan I snige opgaven ind ved lejlighed :-)

3
2. juni 2020 kl. 20:35

Hej Christian, Hos Schultz varetager vi vedligehold og udvikling af høringsportalen. Det er en super fed twitterbot du har lavet.

Jeg følger din bot og glæder mig til at følge projektet fremad...

Bedste hilsener Kim (https://github.com/tiede)

2
2. juni 2020 kl. 16:59

Jeg kender ikke til nogen måde at lave koblingen automatisk. Dertil er datakvaliteten på såvel Høringsportalen som Folketingets hjemmeside desværre for “broget”.

1
30. maj 2020 kl. 16:45

Tak for en interessant blogpost. Jeg kiggede selv på Høringsportalen for nogen tid siden i en anden forbindelse hvor jeg forsøgte at koble høringssvar til den endeligt vedtagne lov i Folketinget. Det lykkedes mig ikke at finde en nem måde at koble dette sammen så del gerne hvis det lykkedes dig at gøre dette på en automatisk måde.