이제부턴 본격적인 코딩이 시작됩니다. 그리고 telegram.py와 korail.py를 왔다갔다하며 동시에 작성을 해야 합니다.

편의상 코드 페이지의 배경을 telegram.py는 검은색 korail.py는 보라색으로 하여 작성하겠습니다.

 

1. import

1) telegram.py

1
2
3
4
import telepot
from korail.korail import *
import re
import textwrap
cs

import telepot

: 텔레그램봇을 이용할 수 있게 해주는 라이브러리입니다. 인터넷을 보면 다른 텔레그램봇 라이브러리도 있지만 텔레그램에서 가장 사용을 추천하는 라이브러리라고 합니다.

 

from korail.korail import *

:korail 폴더에서 korail.py를 불러오는 역할을 합니다. 앞서 설명한대로 __init__.py 가 메인 실행 프로그램이기 때문에 이 파일 기준의 경로에 따라 korail 폴더의 korail.py를 불러옵니다.

즉, 앞 포스트와 연계하여 본다면 __init__.py에서 telegram.py를 import하고 telegram.py가 korail.py를 import하는 구조입니다. (나중에 korail.py에서 다시 telegram.py로 넘어가야 하는 경우가 생기는데 그것은 나중에 다루도록 하겠습니다.)

 

import re

: 개인적으로 코딩의 꽃이라고 생각하는 정규표현식(regular expression)입니다. 아무리 강조해도 지나치지 않고 본 프로그램에서도 핵심적으로 사용됩니다.

 

import textwrap

: 장문의 텍스트를 하나의 변수로 저장할 때 사용하는 라이브러리로 위 프로그램에서는 "도움말"을 입력하였을 때 장문의 설명이 출력될 때 사용합니다.(정규표현식과 마찬가지로 기본으로 내장된 함수입니다.)

 

2) korail.py

1
2
3
4
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
import time
cs

from selenium import webdriver

: 셀레니움 라이브러리 안에서 webdriver 기능을 불러옵니다. webdriver 기능을 파이어폭스 브라우져로 설정한 다음 웹 안에서의 모든 접근/명령을 파이썬 코딩을 통해 진행하게 됩니다.

 

from selenium.webdriver.support.ui import Select

: html 언어중 checkbox를 선택할 수 있게 해주는 selenium 내부의 Select 기능이라 보시면 됩니다. 

바로 오른쪽 아래 출발일 옆으로 죽 있는 년/월/일/시 설정을 할 수 있게 해주는 기능입니다.

from selenium.webdriver.common.keys import Keys

: 마찬가지로 selenium 안에 있는 웹상에서 직접 키보드 키를 입력하게 해주는 기능입니다. 본 프로그램에서는 로그인할 때 아이디 입력하고 비밀번호 입력한 뒤 바로 엔터를 치게 하는 기능으로 이용합니다.

멤버십번호(아이디) 입력하고 비밀번호 입력 후 굳이 확인버튼을 누르지 않고 바로 엔터를 누릅니다.

import time

:time.sleep(시간 초단위) 으로 프로그램 진행에 딜레이를 줍니다. 인터넷 웹페이지는 컴퓨터 성능 및 인터넷 속도에 따라 창이 바뀌는데 시간이 소요되지만 프로그램의 경우 훨씬 더 빠르게 각 구문이 진행되기 때문에 중간중간 딜레이를 시켜줘야 합니다. time 역시 매우 중요한 기능입니다. 빠른게 무조건 좋지만은 않군요.ㅎ

 

2. 기본적인 클래스 구조 확인

1) telegram.py

1
2
3
4
5
6
7
8
9
import telepot
from korail.korail import *
import re
import textwrap
 
class Telegram():
    def __init__(self):
 
    def start_telegram(self, msg, info = None):
cs

Telegram 이란 이름의 클래스를 만들고 함수는 딱 두개입니다.

 

def __init__(self):

:기본적으로 실행되는 명령어들을 모아 놓았습니다.

 - 텔레그램봇에 접속

 - korail.py 실행

 - start_telegram 함수를 무한 loop 시킵니다.

 

def start_telegram(self, msg, info = None):

: 앞서 __init__에서 무한 loop시킨 함수로 텔레그램에서 실시간으로 입력되는 메세지를 받게되는 함수라고 보면 됩니다. 받는 인자를 보면 msg와 info입니다. 바로 msg가 실시간으로 입력되어지는 텔레그램 메세지이며 info는 그 외의 정보라고 보면 됩니다. (info는 None으로 미리 설정해 둡니다.)

 

텔레그램 메세지를 입력하면 항상 반응할 수 있어야 하기 때문에 위의 함수 안에서 모든 명령/정보가 전달되고 통제된다고 보면 됩니다.

 

2) korail.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Korail():
    def __init__(self):
 
    def login(self):
 
    def back_to_home(self):
 
    def fill_departure_city(self, city):
 
    def fill_arrival_city(self, city):
 
    def fill_year(self, year):
 
    def fill_month(self, month):
 
    def fill_day(self, day):
 
    def fill_hour(self, hour):
 
    def search_seats(self):
 
    def try_seats(self, order):
cs

변수나 함수의 이름을 짓는 방법에 대한 규칙(convention)이 있습니다. 얼마전 유튜브 '노마드 코더' 동영상을 보며 배운 규칙 중 가장 공감되었던 규칙 중 하나는 함수의 이름은 '동작형', 변수의 이름은 '명사형'으로 지어야 한다는 것이었고 이름만 보고도 그 기능을 파악할 수 있게 너무 막연하지도 너무 디테일하지도 않게 만들어야 한다는 것이었습니다.(너무 디테일하면 이름이 너무 길어지게 됩니다.) 어찌보면 당연한 말인데 자주 간과하곤 합니다.

youtu.be/Jz8Sx1XYb04

가장 유명한 코딩 유튜버 중 한분인듯 합니다.

각각의 함수에 대한 설명은 따로 작성하지 않겠습니다. 아마도 위의 함수들의 이름만 봐도 대충 그 기능이 짐작 되시리라 생각됩니다. 흐뭇하네요.

 

참고로 위 함수 중 fill_hour의 경우 fill_time을 안쓰고 fill_hour로 작성하였습니다. 앞서 말한 이유대로 가급적 time같은 단어는 너무 막연한 단어라 최대한 사용을 자제하는 것이 좋습니다.(그렇지만 어느순간 쓰고있습니다...) 결국 위 동영상 속 유튜버는 프로그램을 완성 후 다시 변수/함수의 이름을 수정하고 주석들을 새로 달아주는 교정의 과정을 강조합니다. 애초에 처음부터 완벽하게 코딩하는 사람은 거의 없기 때문입니다.

 

처음부터 너무 지루하게 개념정리만 하고 있는 것 같지만 개념을 이해하면 분명 더 나은 방법으로 코딩하는 분도 계실 수 있고 좀 더 다음 진도를 예상하며 나아갈 수 있을 것이라 생각되어 이렇게 작성하였습니다.

목차

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