Hoofdcategorieën
Device Settings

NS geeft 'reisadvies'-api vrij

Door Arnoud Wokke, vrijdag 1 april 2011 09:38
Submitter: kaneter, views: 28.836

De Nederlandse Spoorwegen hebben hun api vrijgegeven. Daardoor kunnen ontwikkelaars applicaties maken die gebruikmaken van gegevens van de NS, zoals vertrektijden, storingen en de locatie van stations.

De NS heeft wel een maximum ingesteld voor het aantal requests dat mag worden gedaan: 50.000 per dag, zo blijkt uit de documentatie. "Respecteer de servercapaciteit van NS; probeer goed om te gaan met de capaciteit die u geboden wordt. Als NS misbruik vermoedt, kunt u direct worden afgesloten", zo schrijft de vervoerder. Ontwikkelaars moeten toegang vragen tot de api om er gebruik van te kunnen maken.

Deze week ontdekte een ontwikkelaar al hoe hij toegang kon krijgen tot gegevens uit de api; de eigen applicatie van de NS bleek de url aan te spreken en inloggegevens onversleuteld te versturen. Andere ontwikkelaars maakten applicaties door de gegevens van de mobiele site van de NS te plukken. Het is onbekend of die ontwikkelaars nu overgaan op gegevens uit de api.

Volgende 10:20 Sony bevestigt 205 ontslagen en schrapt The Agency
Vorige 08:31 Hercules presenteert goedkope netbooks
Advertentie

Reacties

«  1  2  3  »

Ik begrijp niet helemaal wat het voordeel is om de api te gebruiken t.o.v. de oude methode. Kan iemand dit uitleggen? :)

Als je gegevens van de site afplukt, en misschien automatisch door scipts of zo te laten doen, dan loopt het verkeer naar de site hoger op dan waarschijnlijk verwacht is, en kan daardoor problematisch worden.

Daarnaast sturen services veel minder informatie door dan complete html pagina's, dus is er minder netwerk verkeer.

En een service api kan apart ge'sized' worden, zodat deze beter afgestemd kan worden op het gebruik.

Welke 'oude' methode bedoel je? Een API zoals NS die nu heeft vrijgegeven is voor ontwikkelaars erg handig omdat ze dan de rauwe data kunnen opvragen en verwerken in een applicatie. Bijvoorbeeld: je maakt een app die de route van een trein intekent op een kaart. Met de API kun je dan alle tussenstations opvragen en de coördinaten van die stations.

Apps als Trein werken als een soort custom browser: ze halen de gewone website op, strippen alle data daaruit en verwerken die dan in een eigen interface. Dat is erg omslachtig: meer dataverkeer en de app werkt niet meer als NS haar website aanpast. Deze API geeft XML-berichten terug in een gedocumenteerd formaat. Betrouwbaarder dus en minder dataverkeer/processing time.

Voorheen vroeg je op de achtergrond informatie op van de mobiele site van de NS. Een app deed dus eigenlijk alsof hij een gebruiker was die de mobiele site bezocht. En uit het antwoord dat dan terug kwam, plukte de app de juiste stukjes informatie.

Hieraan kleven een aantal belangrijke nadelen:

- Als de NS de opbouw / layout van de mobiele site verandert, kan het zijn dat je app opeens niet meer werkt. Voorbeeld: als je app zoekt naar een div-element dat 'resultaat' heet, en dat element heet opeens 'result' dan is het de vraag of je de informatie nog kunt vinden.

- Een html-pagina bevat meer informatie dan enkel de reis-data. Een webservice stuurt als het goed is de informatie zo beknopt mogelijk door. Dat scheelt dus kilobytes. Iets wat belangrijk is als je je info over een brakke 3g-verbinding ophaalt.

- Een html-pagina bevat meer informatie dan enkel de reis-data. Een webservice stuurt als het goed is de informatie zo beknopt mogelijk door. Dat scheelt dus kilobytes. Iets wat belangrijk is als je je info over een brakke 3g-verbinding ophaalt.
Dit klopt natuurlijk niet helemaal (klopt wel natuurlijk alleen het 3g stukje niet). Ze halen deze gegevens niet realtime van de NS Site.
Ze "pikken" bergen informatie in 1 x en stoppen dat in een lokale database. In deze database stoppen ze vaak ook nog eens de gegevens van bijv Connexions om een overzicht te krijgen.

Dit kan je dus heel gemakkelijk publiceren naar mobiele telefoons of wat dan ook (iets wat bijv 9292ov.nl al doet)

Je eerste Argument is mij laatst toevallig nog overkomen toen ik 15.000 product plaatjes wilde downloaden vanaf een website :P vrij irritant... Ze hadden exact mijn eerste referentie punt aangepast waardoor het ik hele script opnieuw moet uitvinden (geen documentatie) :P

Note: De app van de NS werkt wel ideaal... Je kan de vertragingen per minuut uitlezen. Vermoed alleen dat dit niet mogelijk zal worden via de API (aangezien die 50k request dan wel heel snel gehaald worden)

[Reactie gewijzigd door Mellow Jack op vrijdag 1 april 2011 10:22]


Ze halen deze gegevens niet realtime van de NS Site. Ze "pikken" bergen informatie in 1 x en stoppen dat in een lokale database.
Ik kan me dat niet voorstellen. Dan zou je dus ALLE reizen van ALLE stations in Nederland vooraf moeten ophalen?? Dat lukt je nooit. Veel te veel mogelijkheden. Bovendien heb je dan geen actuele spoorwijzigingen, vertragingen e.d.

Volgens mij is het echt wel zo dat als jij intikt 'Amsterdam naar Utrecht' dat hij op dat moment naar NS gaat om te vragen hoe de reisschema's zijn van Amsterdam naar Utrecht.

in principe natuurlijk niet, want je hebt ook gewoon de standaard tijden etc.
de vertragingen van 5 minuten zul je idd beter kunnen negeren, maar je kunt je prima afvragen hoeveel treinen er per dag rijden. lees: van begin tot eind is één trein, ongeacht het aantal stops. als je zo'n opvraag actie dus cashed lees:

trein 232663 vertraging 20min dan weet je dat elke route ongeacht van waar naar waar. die over dat traject wil, hier last mee gaat krijgen.

dus als je slim bent vraag je bij de ns vooral treinen op en niet zozeer routes...

En HOE vraag je die treinen op? De API heeft geen 'vraag alle treinen op' mogelijkheid, enkel 'vraag een advies op'.

Daarbij is het schema van de NS veel te ingewikkeld om op die manier zelf even na te bootsen. Treinen veranderen van nummer, worden gesplitst of samengevoegd, enzovoort. Dit is echt te complex om zelf te gaan interpreteren en dan een advies te geven.

Als je me niet gelooft, vergelijk dan de output van een app zoals Trein eens met de NS site. Dan zul je zien dat het precies matcht qua aangeboden informatie en dat is niet toevallig, beide baseren zich immers op dezelfde actuele NS informatie.

Ik vraag me af hoe Trein precies werkt eigenlijk. Wat me opviel toen ik nog de eerste generatie iPhone had (zonder 3G dus) was dat deze app echt enorm snel was. Vaak binnen enkele seconden waren de actuele vertrektijden ververst. Dit spreekt jouw redenering tegen dat Trein enkel de website van de NS parset.

Iemand een idee?

Ik denk dat dat komt omdat de netwerken toen nog niet zo vol zaten.

Vraag het Dennis die de app gemaakt heeft. Het haalt alles gewoon van de NS site hoor. Er zijn op een gegeven moment zelfs updates van die app geweest omdat de NS de mobiele site had aangepast.

Aantal voordelen. Bij de 'oude methode' haalt een app of service op de achtergrond HTML pagina's op bij de NS en daaruit worden de gegevens geëxtraheerd. Hierbij komt flink wat overbodige informatie mee, krijg je niet perse de informatie terug die je nodig hebt, het is een hoop werk om deze informatie uit de HTML te halen en als de NS een klein dingetje verandert aan de site dan is je applicatie waarschijnlijk stuk of onbetrouwbaar.

Met een API voorkom je al die problemen, je kan de NS exact vragen wat je wilt, je krijgt waarschijnlijk sneller antwoord en de antwoorden blijven hetzelfde. Verder is het ook veel makkelijker in het gebruik dan form submissions nabouwen en informatie tussen een hoop HTML uit peuteren.

Maar super dat de NS deze informatie nu beschikbaar maakt! Toe Trein.app net uit was leek het erop dat ze het liefst op hun eigen data bleven zitten, om de een of andere reden zijn ze nu toch over stag gegaan. Super!

Edit: spuit 11 :+

[Reactie gewijzigd door bartvb op vrijdag 1 april 2011 09:49]


Ik vraag me af hoe de App 'trein' dit dan al die tijd gedaan heeft.

Screenscrapen

Een officiele API is maar 1 van de vele manieren natuurlijk, de HTML ophalen en alle waardes die je wilt er uit halen kan bijv ook. Of misschien is er wel een RSS-feeds beschikbaar...

Via de mobiele versie van NS, zo doet de TreinTijden van Android het ook.

http://m.ns.nl/planner.action

[Reactie gewijzigd door AiChan op vrijdag 1 april 2011 16:23]


Hoe werd dat voorheen gedaan dan, want er zijn al wel wat apps voor de iphone die deze gegevens gebruiken ('Trein' bijvoorbeeld).

Waarschijnlijk direct van de site gescraped. Als je het als mens kunt lezen kun je ook een app schrijven die de data eruit vist.

Ze hadden ook niet echt veel andere keuzes nadat eerder deze week een ontwikkelaar toegang had gekregen.

Een api maak je niet voor de lol. ze waren dit al lang van plan.

Hun API bestond voor hun eigen software tools, ik betwijfel of ze echt de boel vrij wilden geven (wellicht op langer termijn). Als ze dat (nog) niet van plan waren, dan kudos voor de NS, het is namelijk een goede reactie.

Even los van de vraag of dit niet een 1 april grap is ;).

Nee, ik kan bevestigen dat dit geen 1 april grap zou zijn.
Daarvoor is deze te goed opgezet. Het zij behoorlijk stom zijn dat straks opeens 100 sites zie die er gebruik van maken terwijl er opeens '1 april' op het scherm wordt getoverd door een respons van de NS api.

Ik heb het zelf uitgetest en het ziet er voortreffelijk uit. Alle data klopt voor zover.

op 1-12-2010 was al bekend dat ze het wilden gaan doen, nadat ze eerder hadden gezegd dat ze er niets in zagen.

Ze hadden wel degelijk keuze. Ze stuurden de login onversleuteld mee. Dat hadden ze eenvoudig aan kunnen passen. Misschien had dat een paar dagen of een week geduurd, maar ze hadden het af kunnen sluiten.

Ze hadden wel degelijk keuze. Ze stuurden de login onversleuteld mee. Dat hadden ze eenvoudig aan kunnen passen. Misschien had dat een paar dagen of een week geduurd, maar ze hadden het af kunnen sluiten.
Sure, maar dan gaat een slimme jongen die app wel debuggen en kom je alsnog het user id en password tegen.

Och och wat een gebeun weer en ontwikkelaars moeten respect hebben voor de door de NS verleende diensten?

Die app slurpt en parst de mobiele versie van de site; m.ns.nl.

Fijn dat ze het eindelijk beschikbaar stellen. Helaas resulteert de pagina waar het formulier tot aanmelding staat in een Error 500.
edit: Enkele keren refreshen schijnt het probleem op te lossen.

[Reactie gewijzigd door Joshua op vrijdag 1 april 2011 09:44]


Oudere applicaties gebruikten waarschijnlijk een eigen database of een gekochte database van de NS.

Nu kunnen echt alle werkzaamheden en vertragingen direct meegenomen worden, wat natuurlijk voordeel geeft.

Een nadeel is het zeer beperkte aantal requests per applicatie dat de NS bied. Ik vermoed dat hier binnen niet al te lang een betaalmodel voor opgezet gaat worden.

Eh nee, gewoon scrapen van de mobiele website.

Ik vermoed dat het voorheen lukte met HTTP requests, als het ware was de app een kleine browser die delen van de ns.nl website uitpluiste en de resultaten toonde. Een API zal natuurlijk stukken handiger en effecienter zijn!

Overigens werkt de dienst niet betrouwbaar; ik krijg bij m'n 2e valide request al meldingen over SOAP errors...
«  1  2  3  »

Op dit item kan niet meer gereageerd worden.

Volgende 10:20 Sony bevestigt 205 ontslagen en schrapt The Agency
Vorige 08:31 Hercules presenteert goedkope netbooks
VNU Media logo Hosted by True

© 1998 - 2012 Tweakers.net B.V. - Alle rechten voorbehouden - Contact - Jouw privacy - Algemene Voorwaarden

Uitgever van:

Website van het jaar 2011