Oovee, all rights reserved. 2016 ©

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

copy
copy

		document.getElementById("setApiKey").onclick = function() {
				//Set API Key for use in header
				api_key = document.getElementById("Api_Key").value;
				alert("Api Key registered");
			};
											

Voorbeeld

Input: ApiKey

Button

Set

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

copy
copy

		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

Input: Town

Input: Stop

Button

Execute
Vertrek Lijn Richting

Line

Geeft een Lijn ID terug, deze kan gebruikt worden om de haltes per lijn op te vragen.

Code

copy
copy

		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

Input: Linenumber

Input: Agency

Button

Execute
Lijn ID Lijn Nummer Lijn Naam Vervoerder

Lines

Lines maakt het mogelijk alle lijnen te doorzoeken per vervoerder of per lijnnummer.

Code

copy
copy

		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

Input: Agency

Button

Execute
Agency Lijn Lijn naam

Schedule

Geeft de (geplande, statische) dienstregeling per dag, per specifieke haltenaam.

Code

copy
copy

		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

Input: Date

Input: ScheduleStop

Button

Execute
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

copy
copy

		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

Input: Date

Input: LineId

Button

Execute
Shape ID Lijn ID Lijn Lijn naam Richting
Kaart

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

copy
copy

		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

Input: Stopname

Button

Execute
Stop Naam Type 'Schedule Name' Plaats Longitude Latitude Similar Stops

Voorbeeld: _nametown

Input: Stopname

Input: Town

Button

Execute
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

copy
copy

		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

Input: Station

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

copy
copy

		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);
			});
		};	
											

Voorbeeld: _geo

Input: Latitude

Input: Longitude

Input: Distance

Voorbeeld: _name

Input: Location Name