korail

Client for the South Korean korail railway API.

Usage no npm install needed!

<script type="module">
  import korail from 'https://cdn.skypack.dev/korail';
</script>

README

korail

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 version Build Status Greenkeeper badge license fpti-js version chat on gitter

Installation

npm install korail

Usage

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

stations.all([opt])

Get all stations of the Korail network, such as μ„œμšΈ, λΆ€μ‚° or λͺ©ν¬. 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 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"
}

journeys(origin, destination, [opt])

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

Supported Options

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.

Example

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"
    }
}

tripStopovers(tripId)

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.

Example

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
    }
]

Contributing

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