NS api - hij is er!
Al enige tijd gingen er geruchten dat er een NS treinreizigers-api zou komen. Voor mijn Android-app SnelTrein deed ik wat onderzoek naar de concurrentie. Daartoe gebruikte ik mijn Desire Z op mijn eigen wifi accesspoint, via een oude hub verbonden naar de router. Door de computer daarna aan de hub te koppelen is het mogelijk het netwerkverkeer vanaf de telefoon af te luisteren (ik deed dat op mijn Ubuntu machine met WireShark). Wat blijkt:
- SnelTrein gebruikt m.ns.nl (dat wist ik natuurlijk al)
- ActuTrein gebruikt treinfan.waarisdetrein.nl
- TreinTijden lite gebruikt m.ns.nl
- NS ReisPlanner Xtra gebruikt webservices.ns.nl
Als u nu naar http://webservices.ns.nl/ gaat dient u een wachtwoord in te voeren. Helaas voor de NS gebruikt hun applicatie geen https, waardoor het wachtwoord dat de Android applicatie gebruikt ook af te luisteren is. De gebruikersnaam "android" en wachtwoord "mvdzig" worden open en bloot verstuurd en zijn ook gewoon bruikbaar vanuit uw browser.
Vervolgens kunt u een XML bestand downloaden url's als:
Dat dit handig is hoef ik u niet te vertellen. Enigszins jammer is wel dat ik een parser heb geschreven om alle informatie van de normale m.ns.nl website te lezen, en dat kostte wel even tijd.
Is er ergens iets van een WSDL te vinden?
ReplyDeleteNS gaat dit waarschijnlijk niet fijn vinden. Ze kunnen om dit tegen te gaan ten minste 2 dingen doen:
ReplyDelete- een nieuwe versie uitbrengen van NS ReisPlanner Xtra, met een nieuw wachtwoord (en https...) en vervolgens na een tijd de oude versie uitrangeren
- of, simpeler, filteren op bijvoorbeeld User-Agent om wel erg simpele scripts de deur te wijzen.
Daarom: zou je kunnen aangeven of de Android-applicatie nog specifieke headers meestuurt in de http requests?
Dit was al een maand bekend hier: http://websvn.chozo.nl/filedetails.php?repname=dump&path=%2FPython%2Fnsdat.py
ReplyDeleteBeetje jammer dat NS alsnog niet de gegevens geeft die waarisdetrein wel geeft: treinnummers ;-)
ReplyDeleteHahah, heerlijk dit. De app van Connexxion is de volgende opdracht? ;-) Lastig om nu via 9292 te werken...
ReplyDelete@Jannick
ReplyDeleteWerkt op basis van longitude and latitude (als ik het goed heb):
http://mobiel.9292ov.nl/KML.asp?FeedTypeID=32705&MyLat=52.4547&MyLon=6.00244
Lijst:
http://mobiel.9292ov.nl/app_webservices/stations.aspx?action=getlist
Versie nummer:
http://m.9292ov.nl/app_webservices/stations.aspx?action=getversion
Zo zie je maar weer dat dit geen prestatie is.
@Frank
ReplyDeleteNee vast niet, alleen intern bij NS.
@Anon nr 1
Voorlopig geen tijd voor, misschien over een paar weken.
@Anon nr 2
Ja die vond ik ook toen ik het wachtwoord opzocht bij google ;) Had het nog niet eerder gehoord en was voor mij dus niet bekend.
@Anon nr 3
Dat vind ik ook een groot gemis, ik wil alleen de maker van waarisdetrein niet belasten met de queries van mijn app.
@Niels Kootstra
Ah interessant, dat kan ik misschien wel gebruiken in mijn app. Het is inderdaad niet echt een prestatie en ik weet ook niet waarom mensen er zo moeilijk over doen. Het was alleen nogal slordig van de ns om het over http te doen.
Bovendien waren er berichten uitgekomen zoals deze: http://www.emerce.nl/nieuws/de-ns-geeft-reisdata-vrij . Verder bleef het stil, en ik denk dus dat de api best wel eens vrijgegeven zou kunnen worden.
Ik had dit inderdaad twee maanden geleden al achterhaald en op internet gezet, zoals gezegd paar reacties hierboven. ;)
ReplyDeleteIk hoop alleen niet dat deze publicatie (gezien het nu ook op Tweakers staat) leidt tot een betere beveiliging aan de kant van NS...
Waarom het überhaupt beveiligd is ontgaat me ook, trouwens.
@Koen, ha ik had jouw site gevonden toen ik op het wachtwoord zocht. Het lijkt erop dat de NS de data gaat vrijgeven over niet al te lange tijd: http://www.emerce.nl/nieuws/de-ns-geeft-reisdata-vrij
ReplyDelete@Jouke
ReplyDeleteBegrijp ik goed dat je, door gebruik te maken van de 9292 stations locatie api en NS reisinformatie api een App wil proberen te maken welke automatisch voor het dichtstbijzijnde station de reisinformatie geeft.
Zou een erg mooie App zijn denk ik!
Eventueel dat combineren met een route planner welke de kortste loop route naar het station kan berekenen en eventueel ook gebruik kan maken van Bus, Tram, enz... maakt een mooie OV reis planner!!!
Zo een planner, is voor vele partijen interessant denk ik!? Misschien kun je er met een beetje geluk nog wel ondersteuning/geld voor krijgen vanuit de overheid oid.
@Rharmsen
ReplyDeleteVoorlopig houd ik het bij treinen, maar zit wel te denken om gebruik te maken van gps locatie om zo het dichtstbijzijnde station te vinden.
De app die ik heb gemaakt heet overigens SnelTrein en is te vinden in de Android Market.
NS heeft nu een API:
ReplyDeletehttp://www.ns.nl/cs/Satellite/reizigers/api
@Anon
ReplyDeleteZag het vanmiddag inderdaad. Beetje jammer van de limiet van 50.000 requests per dag. Ben wel benieuwd of ze de oorspronkelijke publicatie-datum vervroegd hebben door de publicatie.
@Jouke
ReplyDeleteHeb sinds vandaag 'pas' een Android telefoon.
Gelijk net de App geinstalleerd.
Ziet er goed uit, en werkt veel beter dan de 9292, NS Reisplanner Xtra of andere vergelijkbare Apps die ik wel eens geprobeerd heb.
Optie om dichts bijzijnde station automatisch te 'laten' zou een erg mooie aanvulling zijn.
dat staat op stapel ;) Evenals het gebruik van de NS api nu die is vrijgegeven.
ReplyDeleteWat ik kan bedenken is dat we als programmeurs eigenlijk zelf een reisplannert moeten bouwen. Waarin we de data van de ns manipuleren of overnemen, weet niet of het legaal is en het is een shitload aan werk, maar als we zelf die api kunnen bouwen en gratis beschikbaar te stellen... zou je kunnen zeggen dat je een soort reisplanner lite hebt gebouwd, onderhouden door 1 database en wat slim programmeerwerk. Lijkt me niet een hele lastige klus om eerlijk te zijn. Wie ziet er heugenis in dit project, en wie zou het leuk vinden om zoiets te bouwen, mail dan even naar info@ikoen.nl en we kunnen eens kijken of we een look-a-like kunnen bouwen en verspreiden. Ik weet dat we niet voor de 2e keer het wiel uit moeten vinden, maar als er zoveel gezeik ontstaat rondom het gebruik van de ns api en de regeltjes die ns er aan stelt, beter zelf doen.
ReplyDeleteWaar heb je dan bijvoorbeeld last van bij de NS planner? Er is overigens al een alternatief: treinfan.waarisdetrein.nl.
ReplyDeleteVerder heb je natuurlijk ook nog de Somda API en de 9292ov api: http://goo.gl/g7Tls
ReplyDelete