In deze datablog voor Accountability Hack 2017 gaan we in op een bijzondere databron: de nieuwe API van de Tweede Kamer. Bijzonder, omdat het een nieuw ontwikkelde bron is, en voor Accountability Hack 2017 in het bijzonder, omdat het de locatie is waar de hackathon op 9 juni plaats zal vinden.
De API biedt toegang tot openbare parlementaire data, zoals gegevens over kamerleden, vergaderingen, vaste commissies en fractiemedewerkers. Dit is een typisch voorbeeld van open data voor de toegankelijkheid van de politiek, en staat dan ook al jaren op het wensenlijstje van veel mensen die er mee bezig zijn.
Open Tweede Kamer Data
Op opendata.tweedekamer.nl is een open data portaal, waar de nieuwe API het belangrijkste onderdeel van is. Verder zijn er wat onderdelen op dit platform die bedoeld zijn om vorm te geven aan een community rondom deze data. Voor deze datablog gaan we in op de API, in het bijzonder de OData-eindpoint. Voor Accountability Hack 2017, op 9 juni, zal de API vanuit de Tweede Kamer toegankelijk zijn. Voor een eigen plek op de IP whitelist is het op dit moment nog nodig om je aan te melden via opendata.tweedekamer.nl/ – dit kan met minimale persoonsgegevens. Voor deze datablog linken we naar de API, maar toegang is voor een beter begrip wel van belang. Als je geïnteresseerd bent in verdere toepassingen, meld je vooral alvast aan.
Endpoints
Het Open Data Portaal kent de volgende manieren van verbinden:
End-point | End-point | IP Whitelist | Login |
OData | /OData/v1/ | JA | NEE |
REST | /REST/Feed | JA | JA |
SOAP | /SOAP/ | JA | JA |
– Ontsluiting | /SOAP/Ontsluiting-v1 | JA | JA |
– Zoeken * | /SOAP/Zoeken-v1 | JA | JA |
Contract | /Contract/ | JA | NEE |
* later dit jaar beschikbaar
OData
Omdat het een grote hoeveelheid gestructureerde data betreft, waarvoor kennis over de werking van de Tweede Kamer nodig is, gaan we voor deze datablog niet met een enkele visualisatie aan de slag. In plaats daarvan verkennen we stapsgewijs een aantal elementen in de database om gevoel te krijgen voor zowel de inhoud als de structuur van de data.
Hierbij maken we gebruik van het OData-endpoint, gestructureerd volgens het Open Data Protocol. Deze geeft respons in XML-formaat, hoe dat eruit ziet wordt hieronder duidelijk.
Er zijn vervolgens vele ingangen te vinden, met enige inhoudelijke overlap. Voor alle 60, zie gegevensmagazijn.tweedekamer.nl/OData/v1/, of gegevensmagazijn.tweedekamer.nl/OData/v1/$metadata voor metadata. Voor nu beginnen we bij de commissies.
Commissies
Via /OData/v1/Commissie krijgen we een overzicht van de eerste 50 commissies. Aan het einde van de resultaten staat een link om, door middel van paginering, de volgende serie resultaten uit te vragen. Die geeft resultaat wat verder qua structuur identiek is, en biedt de mogelijkheid om (in dit geval met een totaal van 5 pagina’s) de rest verder uit te vragen. Voor nu volstaat een enkel voorbeeld, van de vaste commissie voor Buitenlandse Zaken. Daarvan zien we onder andere de volgende properties:
Id | 2006e15a-3db4-4f11-8827-33882a29fa56 |
Soort | Dienst Commissieondersteuning Internationaal en Ruimtelijk |
Afkorting | BUZA |
NaamNL | Vaste commissie voor Buitenlandse Zaken |
NaamEN | Foreign Affairs |
NaamWebNL | Buitenlandse Zaken |
NaamWebEN | Foreign Affairs |
Inhoudsopgave | Vaste commissies |
DatumActief | null |
DatumInactief | null |
Het id kan eveneens gebruikt worden om deze informatie op te vragen, via een directe URL die ook meegegeven wordt in het resultaat. /OData/v1/Commissie(guid’2006e15a-3db4-4f11-8827-33882a29fa56′).
Personen
Van hier gaan we over naar personen, via OData/v1/Persoon. Daarvoor gebruiken we de ingang van de hierboven genoemde commissie, via de afkorting. Via de afkorting hierboven, BUZA kunnen we alle personen vinden die in deze commissie plaatsnemen: /OData/v1/Persoon?$expand=VastCommissielid, VastCommissielid/Commissie&$filter=VastCommissielid/any(aa: aa/Commissie/Afkorting eq ‘BUZA’ and aa/VastTotEnMet eq null)&$orderby=Achternaam.
Dat levert een resultaat op van 25 personen. De eerste daarvan (gesorteerd op achternaam) is Thierry Baudet, waarvan we o.a. gegevens krijgen over de commissies waarin hij plaatsneemt. Daarvan krijgen we dezelfde resultaten als hierboven (naam, afkorting, soort, etc.), en dat levert het volgende lijstje op:
- Algemene commissie voor Buitenlandse Handel en Ontwikkelingssamenwerking
- Vaste commissie voor Volksgezondheid, Welzijn en Sport
- Vaste commissie voor Economische Zaken
- Vaste commissie voor Buitenlandse Zaken
- Vaste commissie voor Onderwijs, Cultuur en Wetenschap
- Vaste commissie voor Infrastructuur en Milieu
- Vaste commissie voor Financiën
- Vaste commissie voor Europese Zaken
Daarnaast de persoonsgegevens, wat het volgende overzicht geeft:
Id | 71f17e34-dafa-4f07-a4ce-43f368b31966 |
Titels | Mr. Dr. |
Initialen | T.H.P. |
Tussenvoegsel | null |
Achternaam | Baudet |
Voornamen | Thierry Henri Philippe |
Roepnaam | Thierry |
Geslacht | man |
Geboortedatum | 1983-01-28T00:00:00 |
Geboorteplaats | Heemstede |
Geboorteland | Nederland |
Overlijdensdatum | null |
Overlijdensplaats | null |
Verdere informatie per persoon
Een voordeel van de opzet van de data in dit geval is dat dezelfde data op verschillende manieren op te vragen is. Als we bijvoorbeeld van Thierry Baudet weer meer informatie opvragen kan dat via https://gegevensmagazijn.tweedekamer.nl/OData/v1/Persoon?$filter=Achternaam eq ‘Baudet’ – in dit geval omdat het een unieke achternaam is, hetzelfde resultaat als via de eigenlijke unieke identifier id. Specifiekere informatie is vervolgens uit te vragen door de modifier $expand=VerslagSpreker toe te voegen. Dat levert hetzelfde resultaat, maar met uitgebreidere informatie over voor elke instantie van VerslagSpreker. Die informatie is zelf ook weer te bereiken via https://gegevensmagazijn.tweedekamer.nl/OData/v1/VerslagSpreker, met alle nodige modifiers.
Kamervragentracker.nl
In opdracht van de Tweede Kamer heeft Open State Foundation een eerste toepassing gemaakt als showcase voor de Tweede Kamer API. Op Kamervragentracker.nl worden alle kamervragen uit de API getoond en gekoppeld aan de antwoorden – als die er zijn.
De meest in het oog springende functionaliteit van de Kamervragentracker is de zoekfunctie, waardoor een gebruiker gericht op thema’s kan zoeken. Zoals bijvoorbeeld kamervragen over PGB, Groningen of op basis van een genoemde bron als NRC. Daarnaast is het ook mogelijk om statistieken op hoog niveau te bekijken.
De data wordt via de REST-eindpoint als JSON-feed van de Tweede Kamer API binnengehaald, maar Kamervragentracker.nl biedt de eigen data vervolgens ook weer via een eigen API aan. Deze biedt ten opzichte van de Tweede Kamer API één belangrijke functie: een koppeling tussen kamervragen en de antwoorden die hier bij horen. Dit was ook de grootste uitdaging bij het ontwikkelen van Kamervragentracker.nl, omdat kamervragen en antwoorden in de oorspronkelijke data niet aan elkaar gekoppeld zijn. Dit is gebeurd op basis van tekst-analyse van de titels en teksten uit beide feeds.
Verdere mogelijkheden
Voor deze datablog hebben we ons beperkt tot een paar korte blikken in de data via het OData-endpoint. Dit is bedoeld om een snel eerste overzicht te bieden in het type informatie dat hier beschikbaar is. Voor andere toepassingen kan de REST-eindpoint een betere aanvliegroute zijn, daar is Kamervragentracker.nl een goed voorbeeld van. Op Accountability Hack op 9 juni zullen er ook medewerkers beschikbaar zijn om uitleg te geven over de API, maar ga zelf vooral alvast op onderzoek uit.
Meedoen?
Op 9 juni 2017 vindt Accountability Hack plaats. Tijdens deze hackathon gaan we met open data geldstromen en prestaties van de overheid in kaart brengen. Doe je mee? Aanmelden kan hier.