JavaScript client for the South Korean ๐ฐ๐ท korail railway API. Inofficial, using korail endpoints. Ask them for permission before using this module in production.
This module conforms to the FPTI-JS 0.3.2
standard for JavaScript public transportation modules.
npm install korail
const korail = require('korail')
The korail
module conforms to the FPTI-JS 0.3.2
standard for JavaScript public transportation modules and exposes the following methods:
Method | Feature description | FPTI-JS 0.3.2 |
---|---|---|
stations.all([opt]) |
All stations of the Korail network, such as ์์ธ , ๋ถ์ฐ or ๋ชฉํฌ |
โ yes |
journeys(origin, destination, [opt]) |
Journeys between stations | โ yes |
tripStopovers(tripId) |
All stopovers for a trip (all stations a given train passes) | โ no |
Get all stations of the Korail network, such as ์์ธ
, ๋ถ์ฐ
or ๋ชฉํฌ
. See this method in the FPTI-JS 0.3.2
spec.
There currently aren't any supported options for this method, but this might change in a future release.
const korail = require('korail')
const stationStream = korail.stations.all()
stationStream.on('data', item => {
// item is an FPTF station object
console.log(item)
})
{
type: "station",
id: "0001",
name: "์์ธ",
location: {
type: "location",
longitude: 126.9708191,
latitude: 37.551856
},
group: "7",
major: "1"
}
Find journeys between stations. See this method in the FPTI-JS 0.3.2
spec.
Attribute | Description | FPTI-spec | Value type | Default |
---|---|---|---|---|
when |
Journey date, synonym to departureAfter |
โ | Date |
new Date() |
departureAfter |
List journeys with a departure (first leg) after this date | โ | Date |
new Date() |
results |
Max. number of results returned | โ | Number |
null |
interval |
Results for how many minutes after when /departureAfter |
โ | Number |
null |
transfers |
Max. number of transfers | โ | Number |
null |
product |
Filter journey for specific train type | โ | Enum (String ) |
KTX , ์๋ง์ , ๋ฌด๊ถํ (includes ๋๋ฆฌ๋ก), ์ฒญ์ถ |
Please note that this module fetches a list of stations using the stations.all()
method upon initialization, which takes about 3-4 seconds.
const seoul = '0001' // station id
const busan = { // FPTF station
type: 'station',
id: '0020'
// โฆ
}
korail.journeys(seoul, busan, { when: new Date('2019-06-27T05:00:00+0200'), product: 'KTX', transfers: 0 }).then(โฆ)
{
type: "journey",
id: "0001-2019-06-27t12-00-00-000-09-00-0020-2019-06-27t14-42-00-000-09-00-ktx-127",
legs: [
{
origin: {
type: "station",
id: "0001",
name: "์์ธ",
location: {
type: "location",
longitude: 126.9708191,
latitude: 37.551856
},
group: "7",
major: "1"
},
destination: {
type: "station",
id: "0020",
name: "๋ถ์ฐ",
location: {
type: "location",
longitude: 129.0415717,
latitude: 35.1150906
},
group: "6",
major: "21"
},
departure: "2019-06-27T12:00:00.000+09:00",
arrival: "2019-06-27T14:42:00.000+09:00",
mode: "train",
public: true,
operator: {
type: "operator",
id: "korail",
name: "korail",
url: "https://www.letskorail.com"
},
line: {
type: "line",
id: "127",
name: "KTX 127",
product: {
id: "100",
name: "KTX"
},
mode: "train",
operator: {
type: "operator",
id: "korail",
name: "korail",
url: "https://www.letskorail.com"
}
},
tripId: "127###20190627"
}
],
price: {
amount: 59800,
currency: "KRW"
}
}
All stopovers for a given trip (all stations a given train passes). Obtain a tripId
using the journeys(origin, destination, [opt])
method. Returns a Promise
that resolves in a list of stopovers.
const tripId = '127###20190627' // taken from the journeys example above
korail.tripStopovers(tripId).then(โฆ)
[
{
type: "stopover",
stop: {
type: "station",
id: "0001",
name: "์์ธ"
},
arrival: null,
departure: "2019-06-27T12:00:00.000+09:00"
},
{
type: "stopover",
stop: {
type: "station",
id: "0501",
name: "๊ด๋ช
"
},
arrival: "2019-06-27T12:15:00.000+09:00",
departure: "2019-06-27T12:16:00.000+09:00"
},
{
type: "stopover",
stop: {
type: "station",
id: "0502",
name: "์ฒ์์์ฐ"
},
arrival: "2019-06-27T12:37:00.000+09:00",
departure: "2019-06-27T12:39:00.000+09:00"
},
// โฆ
{
type: "stopover",
stop: {
type: "station",
id: "0020",
name: "๋ถ์ฐ"
},
arrival: "2019-06-27T14:42:00.000+09:00",
departure: null
}
]
If you found a bug or want to propose a feature, feel free to visit the issues page.