Headers en API-Keys
Voor iedere applicatie die gebruikmaakt van deze API is een API-Key vereist, deze dient bij iedere aanroep in de header "X-Vertrektijd-Client-Api-Key" meegegeven te worden. Deze API-Key wordt gebruikt voor moderatie en controle doeleinden, daarnaast worden applicatiespecifieke instellingen op basis van deze API-Key toegepast. Onderstaand voorbeeld declareert een API-Key als header voor de daaropvolgende voorbeelden. Het aanvragen en registreren van een applicatie en het aanmaken van een API-Key lees je in de Quickstart guide.
Code
document.getElementById("setApiKey").onclick = function() {
//Set API Key for use in header
api_key = document.getElementById("Api_Key").value;
alert("Api Key registered");
};
Voorbeeld
Departures
Endpoint departures geeft toegang tot alle actuele vertrekinformatie in Nederland. Aanroepen kan op vier verschillende manieren. Hieronder hebben wij de '_nametown' route uitgewerkt tot een bondig overzicht van vertrekkende lijnen.
Code
document.getElementById("getDepartures").onclick = function() {
var town = document.getElementById("Town").value;
var stop = document.getElementById("Stop").value;
client.departures.getDeparturesByNameTown({"X-Vertrektijd-Client-Api-Key":api_key, "town":town, "stop":stop}, function(result){
//For this example we take the Bus, Tram, Metro, Ferry results only
result.obj.BTMF.forEach(function(entry){
//iterate over each departure
entry.Departures.forEach(function(entry){
var tableRow = "<tr><td;>" + Get_Time(entry.ExpectedDeparture) + "</td><td>" + entry.TransportType + " " + entry.LineNumber + "</td><td>" + entry.Destination + "</td></tr>";
document.getElementById("departuresTable").innerHTML += tableRow;
});
});
});
};
Voorbeeld
Vertrek | Lijn | Richting |
---|
Line
Geeft een Lijn ID terug, deze kan gebruikt worden om de haltes per lijn op te vragen.
Code
document.getElementById("getLine").onclick = function() {
var lineNumber = document.getElementById("lineNumber").value;
var Agency = document.getElementById("Agency").value;
client.line.getLineByLinenr({"X-Vertrektijd-Client-Api-Key":api_key, "linenr":lineNumber, "agency":Agency}, function(result){
//iterate over each line
result.obj.forEach(function(entry){
var tableRow = "<tr><td><a id='" + entry.LineName + "' onclick = 'getLineStops(this.innerHTML, this.id)'>" + entry.LineId + "</a></td><td>" + entry.LineNumber + "</td><td> " + entry.LineName + "</td><td>" + entry.Agency + "</td></tr>";
document.getElementById("lineTable").innerHTML += tableRow;
})
});
};
function getLineStops(lineId, LineName){
document.getElementById("outb").innerHTML = "";
document.getElementById("inb").innerHTML = "";
var namePart = LineName.split(" - ");
var dir_inb = namePart[0];
var dir_outb = namePart[1];
var inb_list = "<li class='step'><h4 class='step-title step-header'>Richting: "+ dir_inb +"</h4></li>";
var outb_list = "<li class='step'><h4 class='step-title step-header'>Richting: "+ dir_outb +"</h4></li>";
client.line.getStopsByLineid({"X-Vertrektijd-Client-Api-Key":api_key, "lineid":lineId}, function(result){
var data = result.data;
var pdata = JSON.parse(data);
for(var dir in pdata){
pdata[dir].forEach(function(entry){
if(dir == 'Inbound'){
var listInb = "<li class='step'><span class='step-number'>" + entry.Sequence + "</span><h4 class='step-title'>"+ entry.ScheduleName +"</h4></li>"
inb_list += listInb;
}else{
var listOutb = "<li class='step'><span class='step-number'>" + entry.Sequence + "</span><h4 class='step-title'>"+ entry.ScheduleName +"</h4></li>"
outb_list += listOutb;
}
});
}
document.getElementById("inb").innerHTML += inb_list;
document.getElementById("outb").innerHTML += outb_list;
});
}
Voorbeeld
Lijn ID | Lijn Nummer | Lijn Naam | Vervoerder |
---|
Lines
Lines maakt het mogelijk alle lijnen te doorzoeken per vervoerder of per lijnnummer.
Code
document.getElementById("getLines").onclick = function() {
var agency = document.getElementById("agency").value;
client.lines.getLinesByAgency({"X-Vertrektijd-Client-Api-Key":api_key, "agency":agency}, function(result){
result.obj.forEach(function(entry){
var tableRow ="<tr><td>" + entry.Agency + "</td><td>" + entry.TransportType + ' ' + entry.LineNumber + "</td><td> " + entry.LineName + "</td></tr>";
document.getElementById("linesTable").innerHTML += tableRow;
})
});
};
Voorbeeld
Agency | Lijn | Lijn naam |
---|
Schedule
Geeft de (geplande, statische) dienstregeling per dag, per specifieke haltenaam.
Code
document.getElementById("getSchedule").onclick = function() {
var scheduleDate = document.getElementById("scheduleDate").value;
var scheduleStop = document.getElementById("scheduleStop").value;
client.schedule.getScheduleBySchedulename({"X-Vertrektijd-Client-Api-Key":api_key, "date":scheduleDate, "schedule_stop":scheduleStop}, function(result){
result.obj.BTMF.forEach(function(entry){
entry.Departures.forEach(function(entry){
var tableRow = "<tr><td>" + Get_Date(entry.Date) + "</td><td>" + entry.PlannedDeparture + "</td><td>" + entry.LineNumber + "</td><td>" + entry.LineName + "</td><td>" + entry.Destination + "</td><td>" + entry.Agency + "</td></tr>";
document.getElementById("scheduleTable").innerHTML += tableRow;
});
});
});
};
Voorbeeld
Datum | Vertrek | Lijn | Lijn naam | Richting | Vervoerder |
---|
Shapes
Per datum kan per Lijnnummer & Vervoerder combinatie of Lijn ID een Shape ID worden opgevraagd. Met een Shape ID kan een shape worden opgevraagd.
Code
document.getElementById("getShapes").onclick = function() {
var date = document.getElementById("date").value;
var lineId = document.getElementById("lineId").value;
client.shapes.getShapeIdByLineid({"X-Vertrektijd-Client-Api-Key":api_key, "date": date, "lineid":lineId}, function(result){
result.obj.forEach(function(entry){
var tableRow = "<tr><td><a onclick='getShape(this.innerHTML)'>" + entry.ShapeId + "</a></td><td>" + entry.LineId + "</td>;<td>" + entry.LineNumber + "</td>;<td>" + entry.LineName + "</td><td>" + entry.Direction + "</td></tr>";
document.getElementById("shapesTable").innerHTML += tableRow;
});
});
};
function getShape(shapeid){
client.shapes.getShapeById({"X-Vertrektijd-Client-Api-Key":api_key, "shape_id": shapeid}, function(result){
var path = [];
result.obj.forEach(function(entry){
var point = [entry.Latitude, entry.Longitude];
path.push(point);
});
map_1.setCenter(result.obj[0].Latitude, result.obj[0].Longitude);
map_1.drawPolyline({
path: path,
strokeColor: '#131540',
strokeOpacity: 0.6,
strokeWeight: 6
});
});
}
Voorbeeld
Shape ID | Lijn ID | Lijn | Lijn naam | Richting |
---|
Shape
Stop
Endpoint voor het zoeken van een halte, zoek op: haltenaam, plaats/naam combinatie, locatie (lat/lng + distance in KM). Zoeken op enkel een naam is fuzzy. De resultaten zijn aangevuld met nabijgelegen haltes waarvan de naam geheel of deels overeenkomt, of hier erg op lijkt. Beschouw deze "similars" als suggesties om de eindgebruiker op weg te helpen of verbreed de scope van de op te halen (actuele) vertrektijden.
Code
document.getElementById("getStopname").onclick = function() {
var stopName = document.getElementById("stopName").value;
client.stop.getStopByName({"X-Vertrektijd-Client-Api-Key":api_key, "stop":stopName}, function(result){
result.obj.forEach(function(entry){
var tableRow = "<tr><td>" + entry.StopName + "</td><td>" + entry.Type + "</td><td>" + entry.ScheduleName + "</td><td>" + entry.Town + "</td><td>" + entry.Longitude + "</td><td>" + entry.Latitude + "</td><td>" + entry.SimilarStops + "</td></tr>";
document.getElementById("stopTable").innerHTML += tableRow;
});
});
};
document.getElementById("getStopnametown").onclick = function() {
var stopName = document.getElementById("stopNameTown").value;
var stopTown = document.getElementById("stopTown").value;
client.stop.getStopByNameTown({"X-Vertrektijd-Client-Api-Key":api_key, "stop":stopName, "town":stopTown}, function(result){
result.obj.forEach(function(entry){
var tableRow = "<tr><td>" + entry.StopName + "</td><td>" + entry.StopCode + "</td><td>" + entry.Type + "</td><td>" + entry.ScheduleName + "</td><td>" + entry.Town + "</td><td>" + entry.Longitude + "</td><td>" + entry.Latitude + "</td><td>" + entry.SimilarStops + "</td></tr>";
document.getElementById("stopTable").innerHTML += tableRow;
});
});
};
Voorbeeld: _name
Stop Naam | Type | 'Schedule Name' | Plaats | Longitude | Latitude | Similar Stops |
---|
Voorbeeld: _nametown
Stop Naam | Stopcode | Type | 'Schedule Name' | Plaats | Longitude | Latitude | Similar Stops |
---|
NS-Proxy
Om zoveel mogelijk bronnen van reisinformatie vanaf één punt beschikbaar te stellen is in versie 1.2.0 de NS-Proxy live gezet. Hiermee is de NS-API direct bevraagbaar via de Vertrektijd.Info API. Groot voordeel is dat de NS-API daarmee direct in je applicatie (client-side) integreerbaar is, onder gebruik van één en dezelfde API-Key. Om hiervan gebruik te maken is per applicatie registratie van je NS-API Credentials vereist, hiervoor gebruik je de Admin API, zie hiervoor de Swagger Admin Docs. De Vertrektijd.Info API gebruikt altijd de door jouw geregistreerde credentials voor iedere NS-Proxy request, hierbij wordt er miniem gecached (TTL < 30 sec) en zijn de door NS gestelde Rate Limits van toepassing. Er is getracht het gebruik van de NS-API 1-op-1 naar de NS-Proxy over te hevelen, voor de integratie van de NS-Proxy in jouw applicatie verwijzen we je naar de Swagger Client Docs en de NS-API website.
Code
document.getElementById("getNsDepartures").onclick = function() {
var nsStation = document.getElementById("nsStation").value;
client.ns.getDepartures({"X-Vertrektijd-Client-Api-Key":api_key, "station":nsStation}, function(result){
printNsDepartures(result.obj);
});
};
Voorbeeld: NS Departures
Vertrektijd | Richting | Spoor | Treinsoort |
---|
OV-Bike
Endpoint voor het zoeken van OV-Fiets locaties, zoek op: Locatienaam, StopCode van het dichtstbijzijnde treinstation, locatie (lat/lng + distance in KM).
Code
document.getElementById("getBikeGeo").onclick = function() {
var lat = document.getElementById("lat").value;
var lng = document.getElementById("lng").value;
var dist = document.getElementById("dist").value;
client.ovbike.getOvBikesByGeo({"X-Vertrektijd-Client-Api-Key":api_key, "latitude":lat, "longitude":lng, "distance":dist }, function(result){
printOvbikes(result.obj);
});
};
document.getElementById("getBikeLocation").onclick = function() {
var locationName = document.getElementById("locationName").value;
client.ovbike.getOvBikesByName({"X-Vertrektijd-Client-Api-Key":api_key, "location_name":locationName}, function(result){
printOvbikes(result.obj);
});
};