Home

Awesome

slovenske-zeleznice

JavaScript client for the Slovenian 🇸🇮 Slovenske železnice (SŽ) railway API. Inofficial, using endpoints. Ask them for permission before using this module in production.

npm version Build Status Greenkeeper badge fpti-js version chat on gitter

Installation

npm install --save slovenske-zeleznice

Usage

const sz = require('slovenske-zeleznice')

The slovenske-zeleznice module conforms to the FPTI-JS 0.3.2 standard for JavaScript public transportation modules and exposes the following methods:

MethodFeature descriptionFPTI-JS 0.3.2
stations.all([opt])All stations of the network, such as Ljubljana or Maribor✅ yes
journeys(origin, destination, [opt])Journeys between stations✅ yes
legStopovers(legId)All stopovers for a leg (all stations the train passes on that leg)❌ no

stations.all([opt])

Get all stations of the network, such as Ljubljana or Maribor. See this method in the FPTI-JS 0.3.2 spec.

Supported Options

There currently aren't any supported options for this method, but this might change in a future release.

Example

const sz = require('slovenske-zeleznice')
const stationStream = sz.stations.all()

stationStream.on('data', item => {
    // item is an FPTF station object
    console.log(item)
})
{
    type: "station",
    id: "42357",
    name: "Ljubljana Brinje"
}

journeys(origin, destination, [opt])

Find journeys between stations. See this method in the FPTI-JS 0.3.2 spec.

Supported Options

AttributeDescriptionFPTI-specValue typeDefault
whenJourney date, synonym to departureAfterDatenew Date()
departureAfterList journeys with a departure (first leg) after this dateDatenew Date()
resultsMax. number of results returnedNumbernull
intervalResults for how many minutes after when/departureAfterNumbernull
transfersMax. number of transfersNumbernull

Note that, unless opt.interval is specified, the module will return journeys that start after when/departureAfter, but before the beginning of the following calendar day in Europe/Ljubljana time zone.

Example

const ljubljana = '42300'
const maribor = { // FPTF station
	type: 'station',
	id: '43400'
	// …
}
sz.journeys(ljubljana, maribor, { when: new Date('2019-06-27T05:00:00+0200'), transfers: 0 }).then(…)
{
    type: "journey",
    id: "2004###2019-06-27###42300###43400",
    info: "Timetable valid from 9. Dec. 2018 do 14. Dec. 2019.",
    legs: [
        {
            origin: {
                type: "station",
                id: "42300",
                name: "Ljubljana"
            },
            destination: {
                type: "station",
                id: "43400",
                name: "Maribor"
            },
            departure: "2019-06-27T10:50:00.000+02:00",
            arrival: "2019-06-27T13:35:00.000+02:00",
            mode: "train",
            public: true,
            line: {
                type: "line",
                id: "2004",
                name: "LPV 2004",
                number: "2004",
                product: "LPV",
                mode: "train",
                public: true,
                operator: {
                    type: "operator",
                    id: "sž",
                    name: "Slovenske železnice",
                    url: "http://www.slo-zeleznice.si"
                }
            },
            operator: {
                type: "operator",
                id: "sž",
                name: "Slovenske železnice",
                url: "http://www.slo-zeleznice.si"
            },
            bicycle: true,
            wifi: false,
            id: "2004###2019-06-27###42300###43400"
        }
    ],
    price: {
        amount: 9.56,
        currency: "EUR"
    }
}

legStopovers(legId)

All stopovers for a given leg (all stations the train passes on that leg). Obtain a legId using the journeys(origin, destination, [opt]) method. Returns a Promise that resolves in a list of stopovers.

Example

const legId = '2004###2019-06-27###42300###43400' // taken from the journeys example above
sz.legStopovers(legId).then(…)
[
    {
        type: "stopover",
        stop: {
            type: "station",
            id: "42300",
            name: "Ljubljana"
        },
        departure: "2019-06-27T10:50:00.000+02:00",
        arrival: null
    },
    {
        type: "stopover",
        stop: {
            type: "station",
            id: "42212",
            name: "Ljubljana Polje"
        },
        departure: "2019-06-27T10:56:00.000+02:00",
        arrival: "2019-06-27T10:55:00.000+02:00"
    },
    // …
    {
        type: "stopover",
        stop: {
            type: "station",
            id: "43304",
            name: "Maribor Tezno"
        },
        departure: "2019-06-27T13:32:00.000+02:00",
        arrival: "2019-06-27T13:31:00.000+02:00"
    },
    {
        type: "stopover",
        stop: {
            type: "station",
            id: "43400",
            name: "Maribor"
        },
        departure: null,
        arrival: "2019-06-27T13:35:00.000+02:00"
    }
]

Contributing

If you found a bug or want to propose a feature, feel free to visit the issues page.