{"id":18673647,"url":"https://github.com/carpedm20/korail2","last_synced_at":"2025-04-05T06:04:59.176Z","repository":{"id":19306621,"uuid":"22544348","full_name":"carpedm20/korail2","owner":"carpedm20","description":"Korail (www.letskorail.com) wrapper for Python.","archived":false,"fork":false,"pushed_at":"2024-03-08T04:16:51.000Z","size":330,"stargazers_count":184,"open_issues_count":5,"forks_count":59,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-03-29T05:08:18.579Z","etag":null,"topics":["korail","python"],"latest_commit_sha":null,"homepage":"http://carpedm20.github.io/korail2/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carpedm20.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-08-02T10:50:02.000Z","updated_at":"2025-03-25T04:44:26.000Z","dependencies_parsed_at":"2024-12-14T11:11:33.323Z","dependency_job_id":"f8f77603-1c5e-45e4-a55b-6909272b433d","html_url":"https://github.com/carpedm20/korail2","commit_stats":{"total_commits":125,"total_committers":13,"mean_commits":9.615384615384615,"dds":0.5920000000000001,"last_synced_commit":"8dd591dff1e0af1cde5666ad195ee72cb3059faa"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carpedm20%2Fkorail2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carpedm20%2Fkorail2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carpedm20%2Fkorail2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carpedm20%2Fkorail2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carpedm20","download_url":"https://codeload.github.com/carpedm20/korail2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247294538,"owners_count":20915340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["korail","python"],"created_at":"2024-11-07T09:16:09.465Z","updated_at":"2025-04-05T06:04:59.151Z","avatar_url":"https://github.com/carpedm20.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\nLegal disclaimer\n---\n\n**Usage of korail for attacking targets without prior mutual consent is illegal**. It's the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program. Only use for educational purposes.\n\n\n\u003cbr/\u003e\n\nKorail2\n=======\n\n[![Build Status](https://travis-ci.org/sng2c/korail2.svg?branch=master)](https://travis-ci.org/sng2c/korail2)\n\nKorail (www.letskorail.com) wrapper for Python.\n\nThis project was inspired from [korail](https://github.com/devxoul/korail) of [devxoul](https://github.com/devxoul).\n\n\nDocumentation\n-------------\n\nThe documentation is available at [here](http://carpedm20.github.io/korail2/)\n\n\nInstalling\n----------\n\nTo install korail2, simply:\n\n    $ pip install korail2\n\nOr, you can use:\n\n    $ easy_install korail2\n\nOr, you can also install manually:\n\n    $ git clone git://github.com/carpedm20/korail2.git\n    $ cd korail2\n    $ python setup.py install\n\nUsing\n-----\n\n### 1. Login ###\n\nFirst, you need to create a Korail object.\n\n```python\n\u003e\u003e\u003e from korail2 import *\n\u003e\u003e\u003e korail = Korail(\"12345678\", YOUR_PASSWORD) # with membership number\n\u003e\u003e\u003e korail = Korail(\"carpedm20@gmail.com\", YOUR_PASSWORD) # with email\n\u003e\u003e\u003e korail = Korail(\"010-9964-xxxx\", YOUR_PASSWORD) # with phone number\n```\n\nIf you do not want login automatically, \n\n```python\n\u003e\u003e\u003e korail = Korail(\"12345678\", YOUR_PASSWORD, auto_login=False)\n\u003e\u003e\u003e korail.login()\nTrue\n```\n\nWhen you want change ID using existing object,\n\n```python\n\u003e\u003e\u003e korail.login(ANOTHER_ID, ANOTHER_PASSWORD)\nTrue\n```\n\n### 2. Search train ###\n\nYou can search train schedules `search_train` and `search_train_allday` methods.\n\n- `search_train` returns 10 results max. Faster than `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 arguments:\n\n- dep : A departure station in Korean  ex) '서울'\n- arr : A arrival station in Korean  ex) '부산'\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 TrainType class here.\n    default value is TrainType.ALL.\n    - 00: TrainType.KTX - KTX \n    - 01: TrainType.SAEMAEUL - 새마을호     \n    - 02: TrainType.MUGUNGHWA - 무궁화호\n    - 03: TrainType.TONGGEUN - 통근열차\n    - 04: TrainType.NURIRO - 누리로\n    - 05: TrainType.ALL - 전체 \n    - 06: TrainType.AIRPORT - 공항직통\n    - 07: TrainType.KTX_SANCHEON - KTX-산천\n    - 08: TrainType.ITX_SAEMAEUL - ITX-새마을 \n    - 09: TrainType.ITX_CHEONGCHUN - ITX-청춘\n- (optional) passengers=None : List of Passenger Objects. None means 1 AdultPassenger.\n- (optional) include_no_seats=False : When True, a result includes trains which has no seats.\n\nBelow is a sample usage of `search_train`:\n\n```python\n\u003e\u003e\u003e dep = '서울'\n\u003e\u003e\u003e arr = '동대구'\n\u003e\u003e\u003e date = '20140815'\n\u003e\u003e\u003e time = '144000'\n\u003e\u003e\u003e trains = korail.search_train(dep, arr, date, time)\n[[KTX] 8월 3일, 서울~부산(11:00~13:42) 특실,일반실 예약가능,\n [ITX-새마을] 8월 3일, 서울~부산(11:04~16:00) 일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(12:00~14:43) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(12:30~15:13) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(12:40~15:45) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(12:55~15:26) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(13:00~15:37) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(13:10~15:58) 특실,일반실 예약가능]\n```\n\nWhen you want to see sold-out trains.\n\n```python\n\u003e\u003e\u003e trains = korail.search_train(dep, arr, date, time, include_no_seats=True)\n[[KTX] 8월 3일, 서울~부산(11:00~13:42) 특실,일반실 예약가능,\n [ITX-새마을] 8월 3일, 서울~부산(11:04~16:00) 일반실 예약가능,\n [무궁화호] 8월 3일, 서울~부산(11:08~16:54) 입석 역발매중,\n [ITX-새마을] 8월 3일, 서울~부산(11:50~16:50) 입석 역발매중,\n [KTX] 8월 3일, 서울~부산(12:00~14:43) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(12:30~15:13) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(12:40~15:45) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(12:55~15:26) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(13:00~15:37) 특실,일반실 예약가능,\n [KTX] 8월 3일, 서울~부산(13:10~15:58) 특실,일반실 예약가능]\n```\n\n#### 2-1. About `passengers` argument\n\n`passengers` is a list(or tuple) of Passeger Objects.\nBy this, you can search for multiple passengers.\nThere are 3 types of Passengers now, AdultPassenger, ChildPassenger and SeniorPassenger.\n\n```python\n# for 1 adult, 1 child\n\u003e\u003e\u003e psgrs = [AdultPassenger(), ChildPassenger()]\n\n# for 2 adults, 1 child\n\u003e\u003e\u003e psgrs = [AdultPassenger(2), ChildPassenger(1)]\n# ditto. They are being added each other by same group.\n\u003e\u003e\u003e psgrs = [AdultPassenger(), AdultPassenger(), ChildPassenger()]\n\n# for 2 adults, 1 child, 1 senior\n\u003e\u003e\u003e 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\u003e\u003e\u003e psgrs = [AdultPassenger(2), AdultPassenger(-1)]\n\u003e\u003e\u003e psgrs = [AdultPassenger(), SeniorPassenger(0)]\n\n# Nothing\n\u003e\u003e\u003e psgrs = [AdultPassenger(0), SeniorPassenger(0)]\n\n# then search or reserve train\n\u003e\u003e\u003e trains = korail.search_train(dep, arr, date, time, passengers=psgrs)\n...\n\u003e\u003e\u003e korail.reserve(trains[0], psgrs)\n...\n```\n\n### 3. Make a reservation ####\n\nYou can get your tickets with `tickets` method.\n\n```python\n\u003e\u003e\u003e trains = korail.search_train(dep, arr, date, time)\n\u003e\u003e\u003e seat = korail.reserve(trains[0])\n\u003e\u003e\u003e seat\n[KTX] 8월 23일, 서울~동대구(15:30~17:19) 42500원(1석), 구입기한 8월 18일 14:05\n```\n\nMultiple.\n\n```python\n\u003e\u003e\u003e trains = korail.search_train(dep, arr, date, time)\n\u003e\u003e\u003e seat = korail.reserve(trains[0], passengers=psgrs)\n\u003e\u003e\u003e seat\n[KTX] 8월 23일, 서울~동대구(15:30~17:19) 42500원(3석), 구입기한 8월 18일 14:05\n```\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,\nThere are 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```python\n\u003e\u003e\u003e korail.reserve(trains[0], psgrs, ReserveOption.GENERAL_ONLY)\n```\n\n### 4. Show reservations ####\n\nYou can get your tickes with `tickets` method.\n\n```python\n\u003e\u003e\u003e reservations = korail.reservations()\n\u003e\u003e\u003e reservations\n[[KTX] 8월 23일, 서울~동대구(14:55~16:45) 42500원(1석), 구입기한 8월 18일 14:03,\n [무궁화호] 8월 23일, 서울~동대구(15:03~18:48) 21100원(1석), 구입기한 8월 18일 14:03,\n [KTX] 8월 23일, 서울~동대구(15:30~17:19) 42500원(1석), 구입기한 8월 18일 14:05]\n```\n\n### 5. Cancel reservation ###\n\nYou can also cancel your reservation using Reservation Object from reservations() call.\n\n```python\n\u003e\u003e\u003e korail.cancel(reservations[0])\n```\n\n### 6. Get tickets already paid ###\n\nYou can see your ticket list with `tickets` method.\nYou can get the list of paid tickes with `tickets` method.\n\n```python\n\u003e\u003e\u003e korail = Korail(\"12345678\", YOUR_PASSWORD, want_feedback=True)\n\u003e\u003e\u003e tickets = korail.tickets()\n정상발매처리,정상발권처리  # You can see these feedbacks when `want_feedback` is True.\n\u003e\u003e\u003e print tickets\n[[KTX] 8월 10일, 동대구~울산(09:26~09:54) =\u003e 5호 4A, 13900원]\n```\n\nTodo\n----\n\n1. Implement payment API\n\n\nLicense\n-------\n\nSource codes are distributed under BSD license.\n\n\nAuthor\n------\n\nTaehoon Kim / [@carpedm20](http://carpedm20.github.io/about/)\n\nHanson Kim / [@sng2c](https://github.com/sng2c)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarpedm20%2Fkorail2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarpedm20%2Fkorail2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarpedm20%2Fkorail2/lists"}