Korail2
=======
|PyPi version| |PyPi downloads| |PyPi status| |PyPi license|
Korail (www.letskorail.com) wrapper for Python.
This project was inspired from
`korail <https://github.com/devxoul/korail>`__ of
`devxoul <https://github.com/devxoul>`__.
Documentation
-------------
The documentation is available at
`here <http://carpedm20.github.io/korail2/>`__
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.
.. code:: python
>>> 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,
.. code:: python
>>> korail = Korail("12345678", YOUR_PASSWORD, auto_login=False)
>>> korail.login()
True
When you want change ID using existing object,
.. code:: python
>>> 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``:
.. code:: python
>>> 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.
.. code:: python
>>> 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.
.. code:: python
# 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.
.. code:: python
>>> 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.
.. code:: python
>>> 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.
.. code:: python
>>> korail.reserve(trains[0], psgrs, ReserveOption.GENERAL_ONLY)
4. Show reservations
~~~~~~~~~~~~~~~~~~~~
You can get your tickes with ``tickets`` method.
.. code:: python
>>> 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.
.. code:: python
>>> 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.
.. code:: python
>>> 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 <https://code.google.com/p/dex2jar/>`__
3. Read a jar code using `jdgui <http://jd.benow.ca/>`__
4. Edit a smaili code
5. Recompile a new Korail apk using
`apktool <https://code.google.com/p/android-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)
.. |PyPi version| image:: https://pypip.in/v/korail2/badge.png?style=flat
:target: https://pypi.python.org/pypi/korail2
.. |PyPi downloads| image:: https://pypip.in/d/korail2/badge.png?style=flat
:target: https://pypi.python.org/pypi/korail2
.. |PyPi status| image:: https://pypip.in/status/korail2/badge.svg?style=flat
:target: https://pypi.python.org/pypi/korail2
.. |PyPi license| image:: https://pypip.in/license/korail2/badge.svg?style=flat
:target: https://pypi.python.org/pypi/korail2
Raw data
{
"_id": null,
"home_page": "http://github.com/carpedm20/korail2",
"name": "korail2",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "Korail",
"author": "Taehoon Kim",
"author_email": "carpedm20@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/44/2c/4251f3b0c0284a82d3939c76ca060a515825deff0d79d487a191dc4fc017/korail2-0.4.0.tar.gz",
"platform": null,
"description": "Korail2\n=======\n\n|PyPi version| |PyPi downloads| |PyPi status| |PyPi license|\n\nKorail (www.letskorail.com) wrapper for Python.\n\nThis project was inspired from\n`korail <https://github.com/devxoul/korail>`__ of\n`devxoul <https://github.com/devxoul>`__.\n\nDocumentation\n-------------\n\nThe documentation is available at\n`here <http://carpedm20.github.io/korail2/>`__\n\nInstalling\n----------\n\nTo install korail2, simply:\n\n::\n\n $ pip install korail2\n\nOr, you can use:\n\n::\n\n $ easy_install korail2\n\nOr, you can also install manually:\n\n::\n\n $ git clone git://github.com/carpedm20/korail2.git\n $ cd korail2\n $ python setup.py install\n\nUsing\n-----\n\n1. Login\n~~~~~~~~\n\nFirst, you need to create a Korail object.\n\n.. code:: python\n\n >>> from korail2 import *\n >>> korail = Korail(\"12345678\", YOUR_PASSWORD) # with membership number\n >>> korail = Korail(\"carpedm20@gmail.com\", YOUR_PASSWORD) # with email\n >>> korail = Korail(\"010-9964-xxxx\", YOUR_PASSWORD) # with phone number\n\nIf you do not want login automatically,\n\n.. code:: python\n\n >>> korail = Korail(\"12345678\", YOUR_PASSWORD, auto_login=False)\n >>> korail.login()\n True\n\nWhen you want change ID using existing object,\n\n.. code:: python\n\n >>> korail.login(ANOTHER_ID, ANOTHER_PASSWORD)\n True\n\n2. Search train\n~~~~~~~~~~~~~~~\n\nYou can search train schedules ``search_train`` and\n``search_train_allday`` methods.\n\n- ``search_train`` returns 10 results max. Faster than\n ``search_train_allday``.\n- ``search_train_allday`` returns all results after the time.\n- ``search_train_allday`` uses ``search_train`` repeatedly.\n\n``search_train`` and ``search_train_allday`` methods take these\narguments:\n\n- dep : A departure station in Korean ex) '\uc11c\uc6b8'\n- arr : A arrival station in Korean ex) '\ubd80\uc0b0'\n- date : (optional) A departure date in ``yyyyMMdd`` format\n- time : (optional) A departure time in ``hhmmss`` format\n- train\\_type: (optional) A type of train. You can use constants of\n TrainType class here. default value is TrainType.ALL.\n\n - 00: TrainType.KTX - KTX\n - 01: TrainType.SAEMAEUL - \uc0c8\ub9c8\uc744\ud638\n - 02: TrainType.MUGUNGHWA - \ubb34\uad81\ud654\ud638\n - 03: TrainType.TONGGEUN - \ud1b5\uadfc\uc5f4\ucc28\n - 04: TrainType.NURIRO - \ub204\ub9ac\ub85c\n - 05: TrainType.ALL - \uc804\uccb4\n - 06: TrainType.AIRPORT - \uacf5\ud56d\uc9c1\ud1b5\n - 07: TrainType.KTX\\_SANCHEON - KTX-\uc0b0\ucc9c\n - 08: TrainType.ITX\\_SAEMAEUL - ITX-\uc0c8\ub9c8\uc744\n - 09: TrainType.ITX\\_CHEONGCHUN - ITX-\uccad\ucd98\n\n- (optional) passengers=None : List of Passenger Objects. None means 1\n AdultPassenger.\n- (optional) include\\_no\\_seats=False : When True, a result includes\n trains which has no seats.\n\nBelow is a sample usage of ``search_train``:\n\n.. code:: python\n\n >>> dep = '\uc11c\uc6b8'\n >>> arr = '\ub3d9\ub300\uad6c'\n >>> date = '20140815'\n >>> time = '144000'\n >>> trains = korail.search_train(dep, arr, date, time)\n [[KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(11:00~13:42) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [ITX-\uc0c8\ub9c8\uc744] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(11:04~16:00) \uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(12:00~14:43) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(12:30~15:13) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(12:40~15:45) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(12:55~15:26) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(13:00~15:37) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(13:10~15:58) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5]\n\nWhen you want to see sold-out trains.\n\n.. code:: python\n\n >>> trains = korail.search_train(dep, arr, date, time, include_no_seats=True)\n [[KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(11:00~13:42) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [ITX-\uc0c8\ub9c8\uc744] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(11:04~16:00) \uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [\ubb34\uad81\ud654\ud638] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(11:08~16:54) \uc785\uc11d \uc5ed\ubc1c\ub9e4\uc911,\n [ITX-\uc0c8\ub9c8\uc744] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(11:50~16:50) \uc785\uc11d \uc5ed\ubc1c\ub9e4\uc911,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(12:00~14:43) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(12:30~15:13) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(12:40~15:45) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(12:55~15:26) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(13:00~15:37) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5,\n [KTX] 8\uc6d4 3\uc77c, \uc11c\uc6b8~\ubd80\uc0b0(13:10~15:58) \ud2b9\uc2e4,\uc77c\ubc18\uc2e4 \uc608\uc57d\uac00\ub2a5]\n\n2-1. About ``passengers`` argument\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n``passengers`` is a list(or tuple) of Passeger Objects. By this, you can\nsearch for multiple passengers. There are 3 types of Passengers now,\nAdultPassenger, ChildPassenger and SeniorPassenger.\n\n.. code:: python\n\n # for 1 adult, 1 child\n >>> psgrs = [AdultPassenger(), ChildPassenger()]\n\n # for 2 adults, 1 child\n >>> psgrs = [AdultPassenger(2), ChildPassenger(1)]\n # ditto. They are being added each other by same group.\n >>> psgrs = [AdultPassenger(), AdultPassenger(), ChildPassenger()]\n\n # for 2 adults, 1 child, 1 senior\n >>> psgrs = [AdultPassenger(2), ChildPassenger(), SeniorPassenger()]\n\n # for 1 adult, It supports negative count or zero count. \n # But it uses passengers which the sum is greater than zero.\n >>> psgrs = [AdultPassenger(2), AdultPassenger(-1)]\n >>> psgrs = [AdultPassenger(), SeniorPassenger(0)]\n\n # Nothing\n >>> psgrs = [AdultPassenger(0), SeniorPassenger(0)]\n\n # then search or reserve train\n >>> trains = korail.search_train(dep, arr, date, time, passengers=psgrs)\n ...\n >>> korail.reserve(trains[0], psgrs)\n ...\n\n3. Make a reservation\n~~~~~~~~~~~~~~~~~~~~~\n\nYou can get your tickets with ``tickets`` method.\n\n.. code:: python\n\n >>> trains = korail.search_train(dep, arr, date, time)\n >>> seat = korail.reserve(trains[0])\n >>> seat\n [KTX] 8\uc6d4 23\uc77c, \uc11c\uc6b8~\ub3d9\ub300\uad6c(15:30~17:19) 42500\uc6d0(1\uc11d), \uad6c\uc785\uae30\ud55c 8\uc6d4 18\uc77c 14:05\n\nMultiple.\n\n.. code:: python\n\n >>> trains = korail.search_train(dep, arr, date, time)\n >>> seat = korail.reserve(trains[0], passengers=psgrs)\n >>> seat\n [KTX] 8\uc6d4 23\uc77c, \uc11c\uc6b8~\ub3d9\ub300\uad6c(15:30~17:19) 42500\uc6d0(3\uc11d), \uad6c\uc785\uae30\ud55c 8\uc6d4 18\uc77c 14:05\n\nWhen tickets are not enough much for passengers, it raises SoldOutError.\n\nIf you want to select priority of seat grade, general or special, There\nare 4 options in ReserveOption class.\n\n- GENERAL\\_FIRST : Economic than Comfortable.\n- GENERAL\\_ONLY : Reserve only general seats. You are poorman ;-)\n- SPECIAL\\_FIRST : Comfortable than Economic.\n- SPECIAL\\_ONLY : Richman.\n\n.. code:: python\n\n >>> korail.reserve(trains[0], psgrs, ReserveOption.GENERAL_ONLY)\n\n4. Show reservations\n~~~~~~~~~~~~~~~~~~~~\n\nYou can get your tickes with ``tickets`` method.\n\n.. code:: python\n\n >>> reservations = korail.reservations()\n >>> reservations\n [[KTX] 8\uc6d4 23\uc77c, \uc11c\uc6b8~\ub3d9\ub300\uad6c(14:55~16:45) 42500\uc6d0(1\uc11d), \uad6c\uc785\uae30\ud55c 8\uc6d4 18\uc77c 14:03,\n [\ubb34\uad81\ud654\ud638] 8\uc6d4 23\uc77c, \uc11c\uc6b8~\ub3d9\ub300\uad6c(15:03~18:48) 21100\uc6d0(1\uc11d), \uad6c\uc785\uae30\ud55c 8\uc6d4 18\uc77c 14:03,\n [KTX] 8\uc6d4 23\uc77c, \uc11c\uc6b8~\ub3d9\ub300\uad6c(15:30~17:19) 42500\uc6d0(1\uc11d), \uad6c\uc785\uae30\ud55c 8\uc6d4 18\uc77c 14:05]\n\n5. Cancel reservation\n~~~~~~~~~~~~~~~~~~~~~\n\nYou can also cancel your reservation using Reservation Object from\nreservations() call.\n\n.. code:: python\n\n >>> korail.cancel(reservations[0])\n\n6. Get tickets already paid\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can see your ticket list with ``tickets`` method. You can get the\nlist of paid tickes with ``tickets`` method.\n\n.. code:: python\n\n >>> korail = Korail(\"12345678\", YOUR_PASSWORD, want_feedback=True)\n >>> tickets = korail.tickets()\n \uc815\uc0c1\ubc1c\ub9e4\ucc98\ub9ac,\uc815\uc0c1\ubc1c\uad8c\ucc98\ub9ac # You can see these feedbacks when `want_feedback` is True.\n >>> print tickets\n [[KTX] 8\uc6d4 10\uc77c, \ub3d9\ub300\uad6c~\uc6b8\uc0b0(09:26~09:54) => 5\ud638 4A, 13900\uc6d0]\n\nHow do I get the Korail API\n---------------------------\n\n1. Extract Korail apk from mobile phone\n2. Decompile apk using `dex2jar <https://code.google.com/p/dex2jar/>`__\n3. Read a jar code using `jdgui <http://jd.benow.ca/>`__\n4. Edit a smaili code\n5. Recompile a new Korail apk using\n `apktool <https://code.google.com/p/android-apktool/>`__\n6. Key signing with ``motizen-sign``\n7. Upload and run a new Korail apk\n8. Capture packets and analyze the API\n\nTodo\n----\n\n1. Implement payment API\n\nLicense\n-------\n\nSource codes are distributed under BSD license.\n\nAuthor\n------\n\nTaehoon Kim / [@carpedm20](http://carpedm20.github.io/about/) Hanson Kim\n/ [@sng2c](https://github.com/sng2c)\n\n.. |PyPi version| image:: https://pypip.in/v/korail2/badge.png?style=flat\n :target: https://pypi.python.org/pypi/korail2\n.. |PyPi downloads| image:: https://pypip.in/d/korail2/badge.png?style=flat\n :target: https://pypi.python.org/pypi/korail2\n.. |PyPi status| image:: https://pypip.in/status/korail2/badge.svg?style=flat\n :target: https://pypi.python.org/pypi/korail2\n.. |PyPi license| image:: https://pypip.in/license/korail2/badge.svg?style=flat\n :target: https://pypi.python.org/pypi/korail2\n",
"bugtrack_url": null,
"license": "BSD License",
"summary": "Korail(www.letskorail.com) wrapper for Python",
"version": "0.4.0",
"project_urls": {
"Homepage": "http://github.com/carpedm20/korail2"
},
"split_keywords": [
"korail"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "442c4251f3b0c0284a82d3939c76ca060a515825deff0d79d487a191dc4fc017",
"md5": "149de61e546a2fcc8cb995db95845444",
"sha256": "4090fc75288c51ef1f18342e1f06097ab068afd59bdafb474d24d0c51fac5617"
},
"downloads": -1,
"filename": "korail2-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "149de61e546a2fcc8cb995db95845444",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19873,
"upload_time": "2024-03-08T04:16:35",
"upload_time_iso_8601": "2024-03-08T04:16:35.601500Z",
"url": "https://files.pythonhosted.org/packages/44/2c/4251f3b0c0284a82d3939c76ca060a515825deff0d79d487a191dc4fc017/korail2-0.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-08 04:16:35",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "carpedm20",
"github_project": "korail2",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"lcname": "korail2"
}