iRail API / scraper
Clone or download
Bertware Update composer.json
Update MongoDb dependency
Latest commit ab7c3eb Oct 13, 2018
Failed to load latest commit information.
api Apply StyleCI patch Oct 3, 2018
includes Applied StyleCI patch Sep 19, 2017
occupancy Added more feedback to start script on CLI Aug 16, 2016
src Applied fixes from StyleCI Jun 26, 2016
tests Applied fixes from StyleCI Jun 26, 2016
.env.example Additional merge changes Jul 24, 2016
.gitignore Make sure that the composer.json is ignore, otherwise developers that… Jul 27, 2016 Fixed #56, #55, #54 Dec 17, 2015 Clean up unused files, enhanced and removed unmaintained NS… Aug 30, 2015 Update readme for better installation instructions Feb 7, 2018
composer.json Update composer.json Oct 13, 2018
phpunit.xml added dotenv Jul 9, 2015
robots.txt pulled in Quentins commit Aug 28, 2011


License AGPL-3.0 Join the chat at

iRail supports digital creativity concerning mobility in Belgium. This is an attempt to make the railway time schedules in Belgium easily available for anyone.

Our main site consists of a very easy mobile website to look up time schedules using our own API.

Native applications using the iRail API and created or supported by the iRail team are named BeTrains and RailerApp.

All information can be found on our blog at

API Documentation

API Documentation can be found at

Installation for development purposes

note: you'll also need to have nodejs, composer and PHP curl extension installed on your system

  • Step 1: Clone this repo
  • Step 2: If you don't need the occupancy functionality, you can remove the mongodb/mongodb requirement from the composer file. You can now run composer install. If you'd like to have support for the occupancy scores, read below on how to setup mongo before proceeding to run composer install.
  • Step 3: Make sure storage is writable: chmod 777 storage
  • Step 4: Run your test server: php -S localhost:8008 -t api
  • Step 5: Enjoy your own iRail API at http://localhost:8008/connections.php?from=Gent%20Sint%20Pieters&to=Antwerp

MongoDB / Spitsgids setup

Optional: if you want to set up the iRail API with occupancy scores you will need to set up a MongoDB database:

  • Install MongoDB
  • Install the MongoDB module for PHP: pecl install mongodb Make sure PHP loads the module: the conf.d folder for your PHP installation should contain a file with contents in order to load the module. Both the CLI and web version need this, as Composer will run from the CLI
  • Add MongoDB environment variables: cp .env.example .env (If your MongoDB URL is different or you want another database name you can change this file)
  • Import the data (the structural.csv file) in MongoDB: mongoimport -d irail -c structural --type csv --file occupancy/data/structural.csv --headerline
  • Run the startscript to push structural data to the occupancy table: php occupancy/scripts/startscript.php
  • Once the startscript has ran, the task of pushing strutural data to the occupancy table should be automated: crontab -e => 30 3 * * * php $PATH_TO_IRAIL_FOLDER/occupancy/scripts/cronjob.php
  • Enjoy the occupancy scores in all the GET requests. Read the docs on how to post occupancy data.

Imporant: If you plan on using spitsgids in a production environment, don't forget to add indices. Most queries check either the connection (routes, liveboards endpoints) or vehicle field (vehicle endpoint). Example indices can be found below.

  • For queries on vehicles: db.occupancy.createIndex({vehicle: 1}) or db.occupancy.createIndex({date: -1, vehicle: 1})
  • For queries on connections: db.occupancy.createIndex({connection: 1})

Improving performance

Optional: you can improve performance by using APCu. APCu in-memory caching will automaticly be used when the APCu extension is available. When installed, every request to the NMBS will be cached for 15 seconds.

Update stations list

Stations are updated through the irail/stations composer package. Just perform a composer update in the root of the project.

More links