Skip to main content

Korail(www.letskorail.com) wrapper for Python

Project description

PyPi version PyPi downloads PyPi status PyPi license

Korail (www.letskorail.com) wrapper for Python.

This project was inspired from korail of devxoul.

Documentation

The documentation is available at here

Installing

To install korail2, simply:

$ pip install korail2

Or, you can use:

$ easy_install korail2

Or, you can also install manually:

$ git clone git://github.com/carpedm20/korail2.git
$ cd korail2
$ python setup.py install

Using

1. Login

First, you need to create a Korail object.

>>> from korail2 import *
>>> korail = Korail("12345678", YOUR_PASSWORD) # with membership number
>>> korail = Korail("carpedm20@gmail.com", YOUR_PASSWORD) # with email
>>> korail = Korail("010-9964-xxxx", YOUR_PASSWORD) # with phone number

If you do not want login automatically,

>>> korail = Korail("12345678", YOUR_PASSWORD, auto_login=False)
>>> korail.login()
True

When you want change ID using existing object,

>>> korail.login(ANOTHER_ID, ANOTHER_PASSWORD)
True

2. Search train

You can search train schedules search_train and search_train_allday methods.

  • search_train returns 10 results max. Faster than search_train_allday.

  • search_train_allday returns all results after the time.

  • search_train_allday uses search_train repeatedly.

search_train and search_train_allday methods take these arguments:

  • dep : A departure station in Korean ex) ‘서울’

  • arr : A arrival station in Korean ex) ‘부산’

  • date : (optional) A departure date in yyyyMMdd format

  • time : (optional) A departure time in hhmmss format

  • train_type: (optional) A type of train. You can use constants of TrainType class here. default value is TrainType.ALL.

    • 00: TrainType.KTX - KTX

    • 01: TrainType.SAEMAEUL - 새마을호

    • 02: TrainType.MUGUNGHWA - 무궁화호

    • 03: TrainType.TONGGEUN - 통근열차

    • 04: TrainType.NURIRO - 누리로

    • 05: TrainType.ALL - 전체

    • 06: TrainType.AIRPORT - 공항직통

    • 07: TrainType.KTX_SANCHEON - KTX-산천

    • 08: TrainType.ITX_SAEMAEUL - ITX-새마을

    • 09: TrainType.ITX_CHEONGCHUN - ITX-청춘

  • (optional) passengers=None : List of Passenger Objects. None means 1 AdultPassenger.

  • (optional) include_no_seats=False : When True, a result includes trains which has no seats.

Below is a sample usage of search_train:

>>> dep = '서울'
>>> arr = '동대구'
>>> date = '20140815'
>>> time = '144000'
>>> trains = korail.search_train(dep, arr, date, time)
[[KTX] 8 3, 서울~부산(11:00~13:42) 특실,일반실 예약가능,
 [ITX-새마을] 8 3, 서울~부산(11:04~16:00) 일반실 예약가능,
 [KTX] 8 3, 서울~부산(12:00~14:43) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(12:30~15:13) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(12:40~15:45) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(12:55~15:26) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(13:00~15:37) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(13:10~15:58) 특실,일반실 예약가능]

When you want to see sold-out trains.

>>> trains = korail.search_train(dep, arr, date, time, include_no_seats=True)
[[KTX] 8 3, 서울~부산(11:00~13:42) 특실,일반실 예약가능,
 [ITX-새마을] 8 3, 서울~부산(11:04~16:00) 일반실 예약가능,
 [무궁화호] 8 3, 서울~부산(11:08~16:54) 입석 역발매중,
 [ITX-새마을] 8 3, 서울~부산(11:50~16:50) 입석 역발매중,
 [KTX] 8 3, 서울~부산(12:00~14:43) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(12:30~15:13) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(12:40~15:45) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(12:55~15:26) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(13:00~15:37) 특실,일반실 예약가능,
 [KTX] 8 3, 서울~부산(13:10~15:58) 특실,일반실 예약가능]

2-1. About passengers argument

passengers is a list(or tuple) of Passeger Objects. By this, you can search for multiple passengers. There are 3 types of Passengers now, AdultPassenger, ChildPassenger and SeniorPassenger.

# for 1 adult, 1 child
>>> psgrs = [AdultPassenger(), ChildPassenger()]

# for 2 adults, 1 child
>>> psgrs = [AdultPassenger(2), ChildPassenger(1)]
# ditto. They are being added each other by same group.
>>> psgrs = [AdultPassenger(), AdultPassenger(), ChildPassenger()]

# for 2 adults, 1 child, 1 senior
>>> psgrs = [AdultPassenger(2), ChildPassenger(), SeniorPassenger()]

# for 1 adult, It supports negative count or zero count.
# But it uses passengers which the sum is greater than zero.
>>> psgrs = [AdultPassenger(2), AdultPassenger(-1)]
>>> psgrs = [AdultPassenger(), SeniorPassenger(0)]

# Nothing
>>> psgrs = [AdultPassenger(0), SeniorPassenger(0)]

# then search or reserve train
>>> trains = korail.search_train(dep, arr, date, time, passengers=psgrs)
...
>>> korail.reserve(trains[0], psgrs)
...

3. Make a reservation

You can get your tickets with tickets method.

>>> trains = korail.search_train(dep, arr, date, time)
>>> seat = korail.reserve(trains[0])
>>> seat
[KTX] 8 23, 서울~동대구(15:30~17:19) 42500(1), 구입기한 8 18 14:05

Multiple.

>>> trains = korail.search_train(dep, arr, date, time)
>>> seat = korail.reserve(trains[0], passengers=psgrs)
>>> seat
[KTX] 8 23, 서울~동대구(15:30~17:19) 42500(3), 구입기한 8 18 14:05

When tickets are not enough much for passengers, it raises SoldOutError.

If you want to select priority of seat grade, general or special, There are 4 options in ReserveOption class.

  • GENERAL_FIRST : Economic than Comfortable.

  • GENERAL_ONLY : Reserve only general seats. You are poorman ;-)

  • SPECIAL_FIRST : Comfortable than Economic.

  • SPECIAL_ONLY : Richman.

>>> korail.reserve(trains[0], psgrs, ReserveOption.GENERAL_ONLY)

4. Show reservations

You can get your tickes with tickets method.

>>> reservations = korail.reservations()
>>> reservations
[[KTX] 8 23, 서울~동대구(14:55~16:45) 42500(1), 구입기한 8 18 14:03,
 [무궁화호] 8 23, 서울~동대구(15:03~18:48) 21100(1), 구입기한 8 18 14:03,
 [KTX] 8 23, 서울~동대구(15:30~17:19) 42500(1), 구입기한 8 18 14:05]

5. Cancel reservation

You can also cancel your reservation using Reservation Object from reservations() call.

>>> korail.cancel(reservations[0])

6. Get tickets already paid

You can see your ticket list with tickets method. You can get the list of paid tickes with tickets method.

>>> korail = Korail("12345678", YOUR_PASSWORD, want_feedback=True)
>>> tickets = korail.tickets()
정상발매처리,정상발권처리  # You can see these feedbacks when `want_feedback` is True.
>>> print tickets
[[KTX] 8 10, 동대구~울산(09:26~09:54) => 5 4A, 13900]

How do I get the Korail API

  1. Extract Korail apk from mobile phone

  2. Decompile apk using dex2jar

  3. Read a jar code using jdgui

  4. Edit a smaili code

  5. Recompile a new Korail apk using apktool

  6. Key signing with motizen-sign

  7. Upload and run a new Korail apk

  8. Capture packets and analyze the API

Todo

  1. Implement payment API

License

Source codes are distributed under BSD license.

Author

Taehoon Kim / [@carpedm20](http://carpedm20.github.io/about/) Hanson Kim / [@sng2c](https://github.com/sng2c)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

korail2-0.2.6.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

korail2-0.2.6-py2-none-any.whl (18.3 kB view details)

Uploaded Python 2

File details

Details for the file korail2-0.2.6.tar.gz.

File metadata

  • Download URL: korail2-0.2.6.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for korail2-0.2.6.tar.gz
Algorithm Hash digest
SHA256 a6a8cadeffa30ae39e258312a29caa264f4715cdb750f2eda8b729fd7c0452a6
MD5 387c207c4a4ce6bc99e29bee7adbe802
BLAKE2b-256 b68e283119414134db9050a5d9d877a461b69e96bfa13530a03060862127a3b9

See more details on using hashes here.

File details

Details for the file korail2-0.2.6-py2-none-any.whl.

File metadata

File hashes

Hashes for korail2-0.2.6-py2-none-any.whl
Algorithm Hash digest
SHA256 e59159c475a10b2d384f6ed24ffa9bab3181e6e5940451e3c1446d0c8b566180
MD5 d0040ef1f3aa333ebadac234ff9d2b1d
BLAKE2b-256 74647a5d614b1b24a537f2d485d0019f2529e0124471720286e4ade81ee3fefc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page