public-transport / vbb-hafas

A JavaScript client for Berlin & Brandenburg public transport HAFAS API.
https://github.com/public-transport/vbb-hafas
ISC License
32 stars 4 forks source link
api berlin bvg search transit transport vbb

vbb-hafas

A client for the Berlin & Brandenburg public transport service (VBB). It acts as a consistent and straightforward interface on top of a verbose API.

This project is actually a thin wrapper around hafas-client@6. Its docs document the API in general.

Note: You may not want to query the VBB API by yourself. vbb-client is an API-compatible client for vbb-rest, my wrapper API. It also works in the browser.

npm version build status ISC-licensed minimum Node.js version support Jannis via GitHub Sponsors chat with Jannis on Twitter

Installing

npm install vbb-hafas

API

Check the docs for hafas-client as well as its VBB-specific customisations.

Usage

const createHafas = require('vbb-hafas')

const hafas = createHafas('my-awesome-program')

As an example, we will search for a journey from Berlin Hauptbahnhof to Berlin Charlottenburg. To get the station IDs, use vbb-stations.

hafas.journeys('900000003201', '900000024101', {results: 1})
.then((journeys) => console.log(journeys[0]))
.catch(console.error)

The output will be an array of journey objects in the Friendly Public Transport Format 1.2.1 format:

[ {
    legs: [ {
        tripId: '1|50420|0|86|25122017',
        direction: 'Brandenburg, Hbf',
        line: {
            type: 'line',
            id: '10',
            name: 'RE1',
            public: true,
            mode: 'train',
            product: 'regional',
            symbol: 'RE',
            nr: 1,
            metro: false,
            express: true,
            night: false,
            class: 64,
            productCode: 6,
            operator: {
                type: 'operator',
                id: 'db-regio-ag',
                name: 'DB Regio AG'
            }
        },

        origin: {
            type: 'station',
            id: '900000003201',
            name: 'S+U Berlin Hauptbahnhof',
            location: {
                type: 'location',
                latitude: 52.52585,
                longitude: 13.368928
            },
            products: {
                suburban: true,
                subway: true,
                tram: true,
                bus: true,
                ferry: false,
                express: true,
                regional: true
            }
        },
        departure: '2017-12-26T00:41:00.000+01:00',
        plannedDeparture: '2017-12-26T00:41:00.000+01:00',
        departureDelay: 0,
        departurePlatform: '14',
        plannedDeparturePlatform: '13',

        destination: {
            type: 'station',
            id: '900000024101',
            name: 'S Charlottenburg',
            location: {
                type: 'location',
                latitude: 52.504806,
                longitude: 13.303846
            },
            products: {
                suburban: true,
                subway: false,
                tram: false,
                bus: true,
                ferry: false,
                express: false,
                regional: true
            }
        },
        arrival: '2017-12-26T00:50:00.000+01:00',
        plannedArrival: '2017-12-26T00:50:00.000+01:00',
        arrivalDelay: null,
        arrivalPlatform: '4',
        plannedArrivalPlatform: '4'
    } ],

    // all these are from the first leg
    origin: {
        type: 'station',
        id: '900000003201',
        name: 'S+U Berlin Hauptbahnhof'
        // …
    },
    departure: '2017-12-26T00:41:00.000+01:00',
    plannedDeparture: '2017-12-26T00:41:00.000+01:00',
    departureDelay: 0,
    departurePlatform: '14',
    plannedDeparturePlatform: '13',

    // all these are from the last leg
    destination: {
        type: 'station',
        id: '900000024101',
        name: 'S Charlottenburg'
        // …
    },
    arrival: '2017-12-26T00:50:00.000+01:00',
    plannedArrival: '2017-12-26T00:50:00.000+01:00',
    arrivalDelay: null,
    arrivalPlatform: '4',
    plannedArrivalPlatform: '4'

    // …
} ]

Transfer information for journeys

vbb-hafas will try to add transfer information from vbb-change-positions if you pass transferInfo: true as an option.

If it identifies a known transfer, the previous leg will have a bestArrivalPosition and the next leg will have a departurePosition, indicating the optimal transfer between both platforms. Check out the markup in vbb-change-positions for more details.

Related

Check hafas-client's related projects.

Contributing

If you have a question, found a bug or want to propose a feature, have a look at the issues page.