SRTrain documentation

Overview

github actions badge Downloads Downloads Documentation Status

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)

This project was inspired from korail2 of carpedm20.

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)

v2.0.8 (2023/08/02)

  • search_train() 메소드가 더이상 사용자의 로그인 여부를 확인하지 않음. (#238)

  • Public API에 대한 static typing 추가 (#234)

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)

  • search_train() 함수에 time_limit parameter 추가 (#130)

  • 서대구 코드 추가 (#166)

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() 에서 매진되지 않은 좌석만 리턴하는 옵션을 디폴트로 추가