Het is helaas nog altijd in Nederland moeilijk voor ontwikkelaars om toegang te krijgen tot webservies die gratis informatie geven over openbaar vervoer.

De NS kwam een tijd geleden eindelijk met een eigen API, maar deze is nog altijd in bèta stadium en informatie is nog niet volledig. Zo is er geen overzicht op te vragen van de dienstregeling van één bepaalde trein, bijvoorbeeld op basis van ritnummer.
De Somda API, die o.a. gebruikt wordt in de iPhone app trein, biedt deze informatie over dienstregelingen per trein wel. De Somda API is vrij te gebruiken, echter niet voor commerciële doeleinden.

Aan de NS API is verder jammer dat er alleen XML als output beschikbaar is, en niet het lichtere JSON. Tenslotte protesteert de stylist in mij heel erg bij inconsistent taalgebruik in de XML: Nederlands in de vertrektijden feed, en Engels in de overige gedeeltes van de NS API.

Als alternatief is er openOV. Openov is een heel mooi initiatief om data van vervoerders samen te brengen en toegankelijk te maken op een open manier. Het project is nog volop in ontwikkeling. En misschien daardoor nog niet altijd even bruikbaar. Zo is de documentatie nog rommelig en te specifiek voor ontwikkelaars die zich niet willen verdiepen in de achterliggende techniek. Er wordt zonder algemene inleiding veelvuldig gestrooid met termen als koppelvlakken, BISON en PubSub. Verder is openOV een verzameling van verschillende deelprojecten, waarbij een duidelijk overzicht op één plek ontbreekt. Zo is er documentatie voor de : KV78Turbo REST API (met documentatie), een project pagina, een Google Group, ruwe data voor die die-hards, en een NS API zonder documentatie.

Ondanks deze kritiek hoop ik dat ontwikkeling aan het project door blijft gaan, en zal leiden tot een voor iedereen toegankelijke REST interface, waarmee gemakkelijk actuele vertrektijden en dienstregelen van al het OV in Nederland opgevraagd kan worden. Het begin is er in elk geval, met de KV78Turbo API.

Dan is er nog 9292ov met hun open data initiatief. Opzich mooi, dat men zich ten doel stelt om data openbaar te maken via downloadbare datacollecties. Maar waar het meeste behoefte aan is onder bouwers van apps – een API waarmee dynamische data kan worden opgevraagd – ontbreekt het nog steeds. Ondanks aankondigingen in 2011 dat dit snel zou gaan gebeuren.

Er is stiekem echter wel een REST API beschikbaar die wordt gebruikt door de mobiele app van 9292ov.nl. Met een HTTP debugger als Charles kan je de calls naar https://api.9292.nl/0.1/ eenvoudig achterhalen. Je moet dan alleen nog wat instellen om communicatie via SSL te decoderen.

Maar helaas wordt deze API niet officieel ter beschikking gesteld aan het grote publiek. Hopelijk komt hier snel verandering in!

Update 25.03.2014 Bovenstaande API is inmiddels op Github uitgebreid gedocumenteerd! Knap gedaan. github.com/timvanelsloo/9292-api-spec.

In de tussentijd ben ik aan het experimenteren met de NS API in een Windows WPF applicatie met Metro interface. (zie post over Metro en WPF voor meer informatie).

Deze app is hier te downloaden

Windows 8 style apps in WPF

November 9th, 2012

After building my first Windows 8 store app (using XAML and C#), I wondered whether it is doable to build desktop apps in the same style, without WINRT classes.
Since I preferred using XAML and C#, WPF was the application framework of choice.

Second step, how to build a Windows 8-style UI (formally known as Metro UI) without building my own controls form scratch?
Turns out there is an excellent solution for this: the mahapps.metro UI kit. Mahapps does the styling of common controls for you, and packs some Windows 8 specific controls, like a Panorama (sideways scrolling) view.

Last step was including Windows 8 components that make life as a programmer easier:

  • Asynchronous Programming with Async and Await, via Async Targeting Pack.
  • ASP.NET Web API. NuGet: `Install-Package Microsoft.AspNet.WebApi`.

Result is a personal reference app. What it does it simple: show current departure times for any bus stop and train station in the Netherlands, using the 9292ov (non-official) JSON API.