SRTrain documentation
Overview
SRTrain
is a python wrapper of SRT(Super Rapid Train: https://etk.srail.kr/).
With SRTrain
, you can:
Search SRT train schedules.
Reserve SRT trains.
Find your reservations/tickets information.
Cancel reservations/tickets.
while you can’t:
Pay for a ticket.
Search or reserve non-SRT trains (KTX, ITX, … ) (use korail2 instead)
Quickstart
pip install SRTrain
>>> from SRT import SRT
>>> srt = SRT("010-1234-xxxx", YOUR_PASSWORD)
>>> dep = '수서'
>>> arr = '부산'
>>> date = '20190930'
>>> time = '144000'
>>> trains = srt.search_train(dep, arr, date, time)
>>> trains
# [[SRT] 09월 30일, 수서~부산(15:00~17:34) 특실 예약가능, 일반실 예약가능,
# [SRT] 09월 30일, 수서~부산(15:30~18:06) 특실 예약가능, 일반실 예약가능,
# [SRT] 09월 30일, 수서~부산(16:00~18:24) 특실 매진, 일반실 예약가능,
# [SRT] 09월 30일, 수서~부산(16:25~18:45) 특실 예약가능, 일반실 예약가능, ...]
>>> reservation = srt.reserve(trains[1])
>>> reservation
# [SRT] 09월 30일, 수서~부산(15:30~18:06) 53700원(1석), 구입기한 09월 20일 23:38
Index
Installation
Python Support: SRTrain requires Python version >= 3.6
Install SRTrain with pip:
pip install SRTrain
SRT Reference
- class SRT.SRT(srt_id: str, srt_pw: str, auto_login: bool = True, verbose: bool = False)
SRT 클라이언트 클래스
- Parameters:
srt_id (str) – SRT 계정 아이디 (멤버십 번호, 이메일, 전화번호)
srt_pw (str) – SRT 계정 패스워드
auto_login (bool) –
login()
함수 호출 여부verbose (bool) – 디버깅용 로그 출력 여부
>>> srt = SRT("1234567890", YOUR_PASSWORD) # with membership number >>> srt = SRT("def6488@gmail.com", YOUR_PASSWORD) # with email >>> srt = SRT("010-1234-xxxx", YOUR_PASSWORD) # with phone number
- login(srt_id: str | None = None, srt_pw: str | None = None)
SRT 서버에 로그인합니다.
일반적인 경우에는 인스턴스가 생성될 때에 자동으로 로그인 되므로, 이 함수를 직접 호출할 필요가 없습니다.
- Parameters:
srt_id (str, optional) – SRT 계정 아이디
srt_pwd (str, optional) – SRT 계정 패스워드
- Returns:
로그인 성공 여부
- Return type:
bool
- logout() bool
SRT 서버에서 로그아웃합니다.
- search_train(dep: str, arr: str, date: str | None = None, time: str | None = None, time_limit: str | None = None, available_only: bool = True) list[SRT.train.SRTTrain]
주어진 출발지에서 도착지로 향하는 SRT 열차를 검색합니다.
- Parameters:
dep (str) – 출발역
arr (str) – 도착역
date (str, optional) – 출발 날짜 (yyyyMMdd) (default: 당일)
time (str, optional) – 출발 시각 (hhmmss) (default: 0시 0분 0초)
time_limit (str, optional) – 출발 시각 조회 한도 (hhmmss)
available_only (bool, optional) – 매진되지 않은 열차만 검색합니다 (default: True)
- Returns:
열차 리스트
- Return type:
list[
SRTTrain
]
- reserve(train: SRTTrain, passengers: list[SRT.passenger.Passenger] | None = None, special_seat: SeatType = SeatType.GENERAL_FIRST, window_seat: bool | None = None) SRTReservation
열차를 예약합니다.
>>> trains = srt.search_train("수서", "부산", "210101", "000000") >>> srt.reserve(trains[0])
- Parameters:
train (
SRTrain
) – 예약할 열차passengers (list[
Passenger
], optional) – 예약 인원 (default: 어른 1명)special_seat (
SeatType
) – 일반실/특실 선택 유형 (default: 일반실 우선)window_seat (bool, optional) – 창가 자리 우선 예약 여부
- Returns:
예약 내역
- Return type:
SRTReservation
- get_reservations(paid_only: bool = False) list[SRT.reservation.SRTReservation]
전체 예약 정보를 얻습니다.
- Parameters:
paid_only (bool) – 결제된 예약 내역만 가져올지 여부
- Returns:
예약 리스트
- Return type:
list[
SRTReservation
]
- ticket_info(reservation: SRTReservation | int) list[SRT.reservation.SRTTicket]
예약에 포함된 티켓 정보를 반환합니다.
>>> reservations = srt.get_reservations() >>> reservations # [[SRT] 09월 30일, 수서~부산(15:30~18:06) 130700원(3석), 구입기한 09월 19일 19:11] >>> reservations[0].tickets # [18호차 9C (일반실) 어른/청소년 [52300원(600원 할인)], # 18호차 10C (일반실) 어른/청소년 [52300원(600원 할인)], # 18호차 10D (일반실) 장애 4~6급 [26100원(26800원 할인)]]
- Parameters:
reservation (
SRTReservation
or int) – 예약 번호- Returns:
list[
SRTTicket
]
- cancel(reservation: SRTReservation | int) bool
예약을 취소합니다.
>>> reservation = srt.reserve(train) >>> srt.cancel(reservation) >>> reservations = srt.get_reservations() >>> srt.cancel(reservations[0])
- Parameters:
reservation (
SRTReservation
or int) – 예약 번호- Returns:
예약 취소 성공 여부
- Return type:
bool
Advanced Usages
SRT 로그인, 승차표 찾기 설명은 생략합니다.
>>> from SRT import SRT, SeatType
>>> srt = SRT('your-id', 'your-password')
>>> trains = srt.search_train('수서', '대전', '20221122', '000000')
승객 여러명 예약하기
WARNING: 충분히 테스트되지 않음
Highly inspired by @dotaitch.
예시) 어른 2명, 어린이 1명 예약
>>> from SRT.passenger import Adult, Child
>>> srt.reserve(trains[0], passengers=[Adult(), Adult(), Child()])
Adult: 어른/청소년
Child: 어린이
Senior: 경로
Disability1To3: 장애 1~3급
Disability4To6: 장애 4~6급
일반실 / 특실 좌석 옵션 선택하기
예시) 일반실 우선 예약
>>> from SRT import SeatType
>>> srt.reserve(self, trains[0], special_seat=SeatType.GENERAL_FIRST)
SeatType.GENERAL_FIRST : 일반실 우선
SeatType.GENERAL_ONLY : 일반실만
SeatType.SPECIAL_FIRST : 특실 우선
SeatType.SPECIAL_ONLY : 특실만
Contributing
You can contribute to SRTrain
by:
Reporting bugs: please report when bug occurred through github issue.
Fixing bugs: when you fixes a bug, please run tests before submitting a PR.
Enhancing documentations: SRTrain uses Sphinx + Markdown for documentation.
Adding/Proposing new features
How to run tests
export SRT_USERNAME=<YOUR_SRT_USERNAME>
export SRT_PASSWORD=<YOUR_SRT_PASSWORD>
# For Windows
# set SRT_USERNAME=<YOUR_SRT_USERNAME>
# set SRT_PASSWORD=<YOUR_SRT_PASSWORD>
pip install -r requirements/test.txt
pip install -r requirements.txt
black SRT
pytest SRT -v -x
# For full test
# Warning: 아래 테스트에는 실제로 표를 예약/취소하는 테스트가 포함되어 있습니다
pytest SRT -v -x --full
How to build the documentation
pip install requirements/docs.txt
cd docs/
make html
Changelog
Unreleased
v2.1.0 (2023/08/15)
SRT 열차운행 조정 알림에 따른 신규 정차역 코드 및 이름 추가. (#243)
v2.0.8 (2023/08/02)
v2.0.7 (2023/04/05)
get_reservations() 메소드에 결제된 예약 내역만 반환하도록 하는 payed_only 옵션 추가 (#228)
v2.0.6 (2023/02/23)
지제역 이름 변경 반영 (#221)
v2.0.5 (2022/11/24)
SRT 좌석 유형 옵션 기능 추가 (#201)
v2.0.4 (2022/10/31)
SRT 중복 예약 오류 반환 로직 제거 (#193)
v2.0.3 (2022/06/11)
v2.0.2 (2021/06/28)
공식 문서 추가
PEP517(pyproject.toml) 적용
PyPI 릴리즈 자동화
v2.0.1 (2021/04/07)
SRT 이외의 열차 검색 결과에 나타나지 않도록 필터링
srt-reserve
스크립트 추가
v2.0.0 (2021/01/22)
업데이트된 SRT API URL 반영
열차 검색, 예약, 취소 테스트 추가
v1.0.2 (2019/12/24)
기본 로그인/로그아웃 테스트 추가
CI 도구 CircleCI에서 Github Actions로 교체
v1.0.0 (2019/09/13)
SRT 앱 NEO 업데이트에 맞추어 API 전체 완전 수정 (#1)
v0.1.5 (2019/02/15)
매진 확인 오류 수정
v0.1.3 (2019/02/15)
search_train()
에서 매진되지 않은 좌석만 리턴하는 옵션을 디폴트로 추가