korail2


Namekorail2 JSON
Version 0.4.0 PyPI version JSON
download
home_pagehttp://github.com/carpedm20/korail2
SummaryKorail(www.letskorail.com) wrapper for Python
upload_time2024-03-08 04:16:35
maintainer
docs_urlNone
authorTaehoon Kim
requires_python
licenseBSD License
keywords korail
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            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"
}
        
Elapsed time: 0.18377s