Skip to content

#2 Getting API Data

Rick Groot edited this page Nov 12, 2020 · 1 revision

Research

Als eerst ben ik begonnen met wat onderzoek doen. Van de Volkskrant heb ik een aantal datasets gekregen waar ik mee kan werken, die te maken hebben met allemaal verschillende soorten parkeerdata. De datasets zijn hier te vinden.

Interesting things

In de datasets heb ik een aantal interessante onderwerpen gevonden. Er is veel locatie data beschikbaar, deze zitten in verschillende datasets en is misschien leuk om samen te voegen. Er zijn locaties van bijvoorbeeld P&R terreinen en parkeergarages beschikbaar, met daarbij het aantal plekken.

Interessante datasets:

  • GEO PenR
  • GEO Parkeer Garages
  • GEO Carpool
  • Open Data Parkeren: SPECIFICATIES PARKEERGEBIED (capacity & mx vehicle height)
  • Open Data Parkeren: GEBRUIKSDOEL (interessante Usage ID's)
  • Open Data Parkeren: PARKING TOEGANG (openingstijden parkeergelegenheden)
  • Open Data Parkeren: SPECIFICATIES PARKEERGEBIED (max vehicle height)

Possible topics

Met mijn support group heb ik een mindmap gemaakt, zodat alle mogelijke onderwerpen bekend zijn. Hieruit kan ik een aantal onderzoeksvragen opstellen:

  • Met welke auto's kan je wel en niet parkeren in verschillende parkeergarages in Nederland?
  • Is het binnen de stad makkelijker om een oplaadpunt te vinden of buiten de stad?
  • In wat voor gebieden liggen de grootste parkeerplaatsen in Nederland?
  • Waar kan ik de hele dag parkeren buiten de stad?
  • Hoe zit het met de parkeergelegenheid in het weekend buiten de stad?

Github and code start

Aan het begin van dit project heb ik mijn github repo gelinkt aan mijn eigen laptop, zodat ik bestanden kan editen en gebruik kan maken van git. Daarna heb ik NPM geïnstalleerd in die map zodat ik packages kan installeren en gebruiken. Vervolgens ben ik verder gegaan met onderzoek naar de API van de datasets.

Getting the data

Om de juiste data te krijgen moet ik gebruik maken van een API. De documentatie gebruikt jQuery, maar dat ga ik niet gebruiken omdat ik met node aan de gang wil gaan. Om nu verbinding te maken met de API gebruik ik fetch(), en ook async functions.

const fetch = require('node-fetch'); //requires fetch library for node.js
const endpoint = 'https://opendata.rdw.nl/resource/b3us-f26s.json?$limit=90000'; //specificaties parkeergebied dataset
const endpoint2 = 'https://opendata.rdw.nl/resource/t5pc-eb34.json?$limit=90000'; //GEO Parkeer Garages dataset

Om de data te krijgen van de links heb ik een functie aangemaakt. Deze functie wacht tot de functie getData() is uitgevoerd. Daarna worden pas de then functions uitgevoerd.

getData(endpoint) //calls function getData with API link
    .then(result => { //only continues when data is fetched
        return result.json()   //puts result into JSON
    })
    .then(RDWData => {
        const filteredDataObjects = filterObjectValue(RDWData, selectedColumn); //callsfilterObject with data and column ID

        return filteredDataObjects;
    })

De getData function voert een fetch() uit. Dit houd in dat de functie de JSON data ophaalt vanuit de API. Deze functie wordt aangeroepen bovenaan het vorige codeblok, en er wordt een parameter meegegeven. De parameter is de link naar de API waaruit de data opgehaald moet worden en heb ik endpoint genoemd, deze endpoint staat als globale variabele bovenaan mijn document.

getData(endpoint)
    .then(see code.above => 0 )

function getData(url) {
    return fetch(url); //fetches data from API url
}

Met deze code kan ik de data ophalen. Wanneer ik nog een endpoint ga gebruiken kan ik dezelfde getData() functie gebruiken, omdat deze los staat. De volgende stap bij mijn data is de juiste data filteren.

Filtering data objects

Bij de dataset wil ik objecten kunnen filteren. Dit doe ik door een functie aan te roepen vanuit de then method.

const filteredDataObjects2 = filterObjectName(RDWData, selectedColumn2);

Deze call geef ik de RDWData mee, wat de JSON is van mijn opgehaalde data. Ook geef ik een kolomnaam mee, die gedefinieerd staat eerder in het document. Vervolgens gaat deze functie de data filteren op basis van een bepaalde waarde in een kolom:

function filterObjectName(dataArray, key) {
    return dataArray.filter(item => item[key] === 'GARAGEP'); //returns only objects with key-value 'GARAGEP'
}

Deze functie geeft alleen de objecten terug die in de gespecificeerde kolom de waarde "GARAGEP" hebben. Kort gezegd filtert deze functie alle parkeergarages uit de dataset.

Clone this wiki locally