새소식

반응형
Python/KTX 자동 예약하기

Python 과 Telegram, selenium으로 KTX 자동 예매하기(7. 검색 및 결과 데이터 텔레그램으로 전송하기)

  • -
반응형

telegram.py

if con_text == "검색":
    self.korail.korail_search()

if con_text == "결과":
    self.token = "BotFather를 통해 봇을 생성했을때 주는 HTTP API token값"
    self.bot = telepot.Bot(self.token)
    self.bot.sendMessage(chat_id, result)

 

전편에서 생성했던 내용 밑에 추가해주면 된다.

 

텔레그램 봇 대화창에 검색이라고 입력을 하면 korail.py의 클래스 안에 korail_search() 함수가 호출된다.

 

결과데이터는 korail.py 모듈에서 검색을 통해 나온 결과데이터를 넘겨주면 봇 대화창에 뿌려줄 예정이다.

 

korail.py

def korail_search(self):
    self.driver.find_element(By.CSS_SELECTOR, "#center > form > div > p > a > img").click()
    time.sleep(3)
    ktx_list = []
    for index_seq in range(1, 11):
        try:
            ktx_list.append(str(index_seq))
            ktx_list.append(self.driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/div/div[1]/form[1]/div/div[4]/table[1]/tbody/tr[%s]/td[3]" % index_seq).text)
            ktx_list.append(self.driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/div/div[1]/form[1]/div/div[4]/table[1]/tbody/tr[%s]/td[4]" % index_seq).text)
            ktx_list.append(self.driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/div/div[1]/form[1]/div/div[4]/table[1]/tbody/tr[%s]/td[6]/a[1]/img" % index_seq).get_attribute("alt"))
            ktx_list.append("---------------")
        except:
            ktx_list.append("해당시간 이후의 기차표는 없습니다.")
    ktx_info = '\n'.join(ktx_list)
    #telegram_message = {'chat': {'id': 챗봇의 id값}, 'text': '결과'}
    token = "텔레그램 token api";
    bot = telepot.Bot(token)
    bot.sendMessage('챗봇의 id값', ktx_info)

 

위 내용을 살펴보면 검색이라는 단어를 통해 korail_search() 함수가 호출된다.

 

- self.driver.find_element(By.CSS_SELECTOR, "#center > form > div > p > a > img").click()

: 조회하기 버튼을 클릭한다.

 

- time.sleep(3)

: 조회하기 버튼을 통해 검색되는 데이터의 로딩시간을 기다린다.

 

- ktx_list = []

: 결과 데이터를 담기 위한 배열

 

- for index_seq in range(1,11):

:  검색을 통해 나온 결과데이터의 10개 리스트를 전송하기 위해 range(1,11)를 사용했따.

: range(1,11)은 1~10까지의 숫자를 의미한다.

 

- 이미지 참고

위 내용을 보면 xpath는 element의 각각 요소들을 순서대로 찾아가기 위해 사용한다.

소스코드를 보면 중간에 %s 라는 데이터와 % index_seq 라는 배열의 index 값이 존재한다.

문자열 포매팅이라고 하는데 문자열 사이에 포맷코드(%d, %s 등등)를 대입시켜 % 뒤에 나오는값으로 변환하도록 한다.

 

-   token = "텔레그램 token api";
    bot = telepot.Bot(token)
    bot.sendMessage('챗봇의 id값', ktx_info)

: 일단 임시방편으로 텔레그램에 직접 검색 결과를 넘긴다.

 

/*2022-08-19 수정으로 인해 사용안함 */

- telegram_message = {'chat': {'id': 챗봇의 id값}, 'text': '결과'}
    from tel.telegram import KTX_Telegram
    KTX_Telegram.conversation_telegram(self, telegram_message, ktx_info)

: 해당 결과값을 봇 대화창에 보여줘야 하기 때문에 KTX_Telegram 클래스를 호출하고 봇을 사용하기 위한

  함수를 호출한다.

 

아래와 같이 검색이라는 단어를 입력했을 때 봇 대화창에 결과데이터 값이 보여진다.

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.