A collection of functions fore node.js to acess train shedules, arrivals/departures, station search and ticketinformation from the OEBB(ÖBB)
I had a lot of help help from these great ressources
and a documentation file I found on the web
npm --save install oebb-api
- searchStationsNew
- searchStations
- getJourneys
- getStationBoardData
- getStationBoardDataOptions
- getStationSearchOptions
It returns an promise that resolves to an array of possible stations matching name
const oebb = require('oebb-api');
oebb.searchStationsNew("Wien").then(console.log);
returns
[{ number: 1190100,
longitude: 16372134,
latitude: 48208547,
name: '',
meta: 'Wien' },
{ number: 1290401,
longitude: 16375326,
latitude: 48185507,
name: 'Wien Hbf (U)',
meta: '' },
...
...
...]
searchStation is very similar to searchStationsNew it however can take more options
and returns more information. You can call getStationSearchOptions to get a prefilled options object.
const oebb = require('oebb-api');
var options = oebb.getStationSearchOptions();
options.S="wien h";
oebb.searchStations(options).then(console.log);
It returns an array with matching stations, POIs, etc.
[ { value: 'Wien Hbf (U)',
id: 'A=1@O=Wien Hbf (U)@X=16375326@Y=48185507@U=181@L=001290401@B=1@p=1513853468@',
extId: '001290401',
type: '1',
typeStr: '[Bhf/Hst]',
xcoord: '16375326',
ycoord: '48185507',
state: 'id',
prodClass: '6013',
weight: '32767' },
{ value: 'Wien Meidling',
id: 'A=1@O=Wien Meidling@X=16333211@Y=48174559@U=181@L=001191201@B=1@p=1513853468@',
extId: '001191201',
type: '1',
typeStr: '[Bhf/Hst]',
xcoord: '16333211',
ycoord: '48174559',
state: 'id',
prodClass: '4989',
weight: '32588' },
...
...
...]
Name | description |
---|---|
value: | name of the station |
id | no idea |
extId | used in other queries; same as number (not quite shure if the really are the same all the time) |
type | int representing the type |
typeStr | the type as string |
xcoord | longitude |
ycoord | latitude |
state | no idea |
prodClass | no idea |
weight | I am guessing it represents how close a match the station is to the string |
It returns an object containing the options for searchStations
const oebb = require('oebb-api');
var options = oebb.getStationSearchOptions();
Name | default value | value | description |
---|---|---|---|
REQ0JourneyStopsS0A | 1 | An int between 1 and 255. | It selects the type of station to return e.g. 1 is [Bhf/Hst] |
REQ0JourneyStopsB | 12 | An int greater 0 | the amount of results which are returned |
S | a string | the string to match | |
js | true |
boolean | no idea what it does |
It returns a promise resolving to an object containing arrival or depature information for a specific station. You can get a prefilled options
object, by calling getStationBoardDataOptions
const oebb = require('oebb-api');
var options = oebb.getStationBoardDataOptions();
options.evaId=1191601;//Ottakring (Wien)
oebb.getStationBoardData(options).then(console.log);
returns:
{ headTexts:
[ 'Zeit',
'Fahrt',
'Nach',
'Steig',
'Abfahrten',
'Aktuell',
'Ankunft' ],
stationName: 'Ottakring (Wien)',
stationEvaId: '1191601',
boardType: 'dep',
imgPath: '/img/',
iconProductsSubPath: 'vs_oebb/',
rtInfo: true,
journey:
[ { id: '875171810',
ti: '19:46',
da: '23.12.2017',
pr: 'U3',
st: 'Wien Simmering',
lastStop: 'Wien Simmering Bahnhof (U3)',
ati: '20:12',
tr: '1',
trChg: false,
rt: false,
rta: false },
{ id: '836641815',
ti: '19:46',
da: '23.12.2017',
pr: 'Tram 46',
st: 'Wien Ring/Volkstheater U',
lastStop: 'Wien Dr.-K.-Renner-Ring/Volkstheater (Schleife)',
ati: '20:00',
tr: '',
trChg: ,
rt: { status: null, dlm: '2', dlt: '19:47' , dld:'23.12.2017'},
rta: false },
...
...
...
],
maxJ: 18 }
Name | description |
---|---|
headTexts | headings for arrivals depatures screen |
stationName | name of station |
stationEvaId | Id of station |
boardType | depatures or arrivals (dep/arr) |
imgPath | ? |
iconProductsSubPath | ? |
rtInfo | ? |
maxJ | number of returned entries -1 |
Name | description |
---|---|
id | ? |
ti | arrvial/depature time |
da | arrival/depature date |
pr | name of transport |
st | ? |
lastStop | last stop |
ati | wehn arrivals depature time from first stop ; when depatures expected time to reach last stop |
tr | track identifier |
trChg | did the track change |
it describes the delay or other status if there is one. If there is one it contains an object formated as follows:
Name | description |
---|---|
status | current status; "Ausfall" if canceled |
dlm | how many minutes too late |
dlt | actual arrival time |
dld | actual arrival date |
it is very similar to rt I think it describes the delay for the arrival, but I am not certain.
Name | description |
---|---|
status | current status "Ausfall" if canceled then rt too is canceld and rt.status= "Ausfall" |
dlm | never seen it other than empty |
dlt | never seen it other than empty |
returns prefilled options for getStationBoardData
const oebb = require('oebb-api');
var options = oebb.getStationBoardDataOptions();
Name | default value | values | description |
---|---|---|---|
L | vs_scotty.vs_liveticker | vs_scotty.vs_liveticker | ? |
evaId | empty | integer | Id of station; extId or number from searchStationsNew or searchStations |
dirInput | empty | integer | Id of Station in which transportation is heading; extId or number f from searchStationsNew or searchStations. If it is set only trains which actually stop at the station specified with dirInput are shown |
boardType | dep | dep/arr | depatures or arrivals |
time | current time | HH:MM | time from when to start looking |
productsFilter | 1111111111111111 | binary flags? | selects modes of transportation see below for more information |
additionalTime | 0 | integer | in minute. Is added to time |
maxJourneys | 19 | integer | max of returned stations |
outputMode | tickerDataOnly | tickerDataOnly | ? |
start | yes | yes/no | wheter to start query |
selectDate | period | period/tody | selects mode; if tody dateBegin and dateEnd are ignored. |
dateBegin | current date | String dd.mm.YYYY | start day for lookup ignored if selectDate=today |
dateEnd | current date | String dd.mm.YYYY | end date for lookup ignored if selectDate=today |
slects which modes of transports should be listed
forexample if I set productsFilter
to 0000110000000000 only s-bahn and regionalzüge are shown
Flag number | mode of transport |
---|---|
1 | railjet |
2 | ? |
3 | ec and ice |
4 | nightjet d probably also nightjet en |
5 | regionalzüge |
6 | s-bahn |
7 | Bus |
8 | ? |
9 | subway |
10 | tram |
11 | ? |
12 | ? |
13 | Westbahn |
14 | ? |
15 | ? |
16 | ? |
returns a promise, that resolves to routes from
to
at date
. To add the offers, if they exist, set add_offers
to true
.
add_offers
is by default false.
date
is a node-datetime object. It has to be imported through npm
const oebb = require('oebb-api');
oebb.searchStationsNew("Wien Hbf").then((res)=>{
var from = res[0];
oebb.searchStationsNew("Venezia Santa Lucia").then((res)=>{
var to=res[0];
oebb.getJourneys(from, to, true).then((res)=>{
console.log(res);
});
})
});
####from
and to
they are formated:
from/to = {
number: 1190100,
longitude: 16372134,
latitude: 48208547,
name: 'Wien',
};
This returns for example (connections
describes the journey and offer
contains the information about the price etc.):
(The console output will hide most of it, but it is there)
{
"connections": [
{
"connection": {
"id": "fb8a994b473d2931b32583890559a1dcadd736a0f2016132f6d1628b8b1d68fd",
"from": {
"name": "Wien Hbf",
"esn": 8103000,
"departure": "2017-12-24T06:25:00.000",
"departurePlatform": "7",
"showAsResolvedMetaStation": false
},
"to": {
"name": "Venezia Santa Lucia",
"esn": 8300094,
"arrival": "2017-12-24T14:05:00.000",
"showAsResolvedMetaStation": false
},
"sections": [
{
"from": {
"name": "Wien Hbf",
"esn": 8103000,
"departure": "2017-12-24T06:25:00.000",
"departurePlatform": "7"
},
"to": {
"name": "Venezia Santa Lucia",
"esn": 8300094,
"arrival": "2017-12-24T14:05:00.000"
},
"duration": 27600000,
"category": {
"name": "RJ",
"number": "131",
"displayName": "RJ",
"longName": {
"de": "Railjet",
"en": "Railjet",
"it": "Railjet"
},
"backgroundColor": "#ffffff",
"fontColor": "#222222",
"barColor": "#ab0020",
"place": {
"de": "Bahnsteig",
"en": "Platform",
"it": "Banchina"
},
"assistantIconId": "zugAssistant",
"train": true,
"backgroundColorDisabled": "#F0F0F0",
"fontColorDisabled": "#878787",
"barColorDisabled": "#878787"
},
"type": "journey",
"hasRealtime": false
}
],
"switches": 0,
"duration": 27600000
},
"offer": {
"connectionId": "fb8a994b473d2931b32583890559a1dcadd736a0f2016132f6d1628b8b1d68fd",
"price": 94.6,
"offerError": false,
"firstClass": false,
"availabilityState": "available"
}
},
...
...
...
}
]