이번에 만들 프로그램은 텔레그램 봇을 이용한 KTX 자동 예매 프로그램입니다.

 

1. 개념 이해

위 프로그램은 PC에서 파이썬 파일을 구동하고, 텔레그램 봇을 통해 파이어폭스 웹브라우져를 실행시켜 코레일 홈페이지에 접속하여 로그인 후 좌석표 확인 및 예매를 진행하게 되는 구조입니다. 간단하게 흐름도를 그려보면 다음과 같습니다.

최초 파이썬 프로그램 실행 이후 모든 정보 접수 및 명령은 텔레그램을 이용

핵심은 모든 명령을 파이썬 명령이 아닌 텔레그램 메세지 전달을 통한 명령을 해야하고 또한 정보를 추출하는 과정도 텔레그램 봇의 대화 메세지로 나와야 합니다.

 

본 프로그램을 만들게 된 계기가 밖에서 KTX를 긴급 예매해야 하는데 좌석 매진일 경우 얼른 프로그램을 실행하기 위해서 입니다만 결국 집에 있는 PC의 파이썬 프로그램을 실행시켜야 합니다. 이를 위해 원격으로 컴퓨터 메인보드의 wol(wake on lan)기능을 이용해서 켜고 크롬 원격 데스크탑을 이용하여 파이썬 프로그램을 실행시켜 프로그램을 돌린 다음 모든 작업은 휴대폰의 텔레그램 앱을 통해 진행하면 됩니다.

 

일단 위의 wol과 크롬 원격 데스크탑의 사용방법은 제쳐두고 피씨에 텔레그램 앱을 설치하고 코딩을 하는 것으로 진행하겠습니다.

 

2. 사전 준비 작업 및 구조 이해

1) 텔레그램 앱 설치(PC & Mobile)

2) 파이어폭스 브라우져 설치

3) 파이어폭스 Webdriver(geckodriver) Download - geckodriver는 파이어폭스의 구동 엔진 이름입니다.

 

geckodriver.zip
1.44MB

4) 폴더 및 파일 구조 : 총 세개의 .py 파일로 작성하였습니다.

__pycache__ 폴더는 무시하시고 venv 폴더는 가상환경폴더입니다. 

(1) __init__.py : 메인 실행 프로그램입니다. 아래 telegram.py를 실행시키는 기능 말고는 아무것도 없습니다만 class 기능에 익숙해지고 또 어떤 프로그램이라도 실행파일을 쉽게 알 수 있도록 __init__.py를 만들어 진행하도록 합니다.

다운받은 geckodriver.exe는 __init__.py와 같은 위치에 둡니다.

 

(2) tele/telegram.py : Telepot 라이브러리를 이용 텔레그램봇에 접속하여 봇을 활성화 시키는 역할을 하고 아래 korail/korail.py를 실행시킵니다.

그리고 내가 텔레그램봇 채팅창에 입력하는 메세지들에 따라 반응하는 코딩을 작성합니다.

 

(3) korail/korail.py : Selenium 라이브러리를 이용하여 파이어폭스 브라우져(웹드라이버)를 실행시켜 로그인 및 열차 시간표 페이지에 접근하여 열차정보를 조회하고 또 예매 시도 및 예매를 진행합니다.

 

Selenium은 Beautiful Soup와 함께 웹 크롤링/자동화에 가장 많이 쓰이는 라이브러리입니다.

(Selenium은 웹 페이지 컨트롤에 사용하고 Beautiful Soup은 웹 페이지 크롤링(스크래핑)에 사용하는 듯 합니다.)

 

__init__.py는 뭐 단순 프로그램 실행용이고 결국 telegram.py와 korail.py간 명령/정보 교신이 핵심이고 이를 가능케 해주는 것이 Telepot 라이브러리와 Selenium 라이브러리입니다. 사실 모든 파일을 하나로 만들 수 있고 더 편할 수 있지만 좀 더 어렵고 번거롭더라도 나누어 만드는 습관을 기릅시다.

 

목차

Python, Telegram으로 KTX 열차표 예매하기(#1 준비)
Python, Telegram으로 KTX 열차표 예매하기(#2 __init__.py)
Python, Telegram으로 KTX 열차표 예매하기(#3 telegram.py, korail.py)
Python, Telegram으로 KTX 열차표 예매하기(#4 텔레그램봇 만들기)

Python, Telegram으로 KTX 열차표 예매하기(#5 telegram, telepot)
Python, Telegram으로 KTX 열차표 예매하기(#6 selenium, 웹 자동화)
Python, Telegram으로 KTX 열차표 예매하기(#7 selenium, regular expression)
Python, Telegram으로 KTX 열차표 예매하기(#8 열차표 확인하기)
Python, Telegram으로 KTX 열차표 예매하기(#9 예매하기)
Python, Telegram으로 KTX 열차표 예매하기(#10 마무리)

+ Recent posts