Skip to content

public-transport/bvg-hafas

Repository files navigation

bvg-hafas

A client for the HAFAS endpoint of Berliner Verkehrsbetriebe (BVG), the largest public transport provider in Berlin. It acts as a consistent and straightforward interface on top of their verbose API.

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

Note: The BVG HAFAS endpoint covers Brandenburg as well.

npm version ISC-licensed support Jannis via GitHub Sponsors chat with Jannis on Twitter

Installing

npm install bvg-hafas

API

Check the docs for hafas-client@6 as well as its BVG-specific customisations.

Usage

import {createBvgHafas} from 'bvg-hafas'

const client = createBvgHafas('my-awesome-program')

As an example, we will search for a route from Berlin Jungfernheide to Tempelhof. To get the station IDs, use locations(query, [opt]).

const journeys = await client.journeys('900020201', '900068201', {
	results: 1,
})
console.log(journeys[0])

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

{
	type: 'journey',
	legs: [ {
		id: '1|62072|0|86|14082018',
		origin: {
			type: 'stop',
			id: '900020201',
			name: 'S+U Jungfernheide',
			location: {
				type: 'location',
				latitude: 52.530273,
				longitude: 13.299064
			},
			products: {
				suburban: true,
				subway: true,
				tram: false,
				bus: true,
				ferry: false,
				express: false,
				regional: true
			}
		},
		departure: '2018-08-14T15:05:00.000+02:00',
		departurePlatform: '6',
		departureDelay: 0,
		destination: {
			type: 'stop',
			id: '900068201',
			name: 'S+U Tempelhof',
			location: {
				type: 'location',
				latitude: 52.470692,
				longitude: 13.385756
			},
			products: { /* … */ }
		},
		arrival: '2018-08-14T15:27:00.000+02:00',
		arrivalPlatform: '2',
		arrivalDelay: 0,
		direction: 'Ringbahn S 42',
		line: {
			type: 'line',
			id: 's42',
			name: 'S42',
			public: true,
			mode: 'train',
			product: 'suburban',
			operator: { /* … */ },
			// …
		},
		cycle: { min: 300, max: 300 }
	} ],
	refreshToken: '…'
}

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.