오늘은 매우 짧은 자동화를 한번 때려보았습니다.
파이썬을 이용해 특정 타입.. 예를 들면 용아맥의 아이맥스 라든가, 4DX라든가 하는 특정 타입의 영화 예매가
열렸을 경우 텔레그램 챗봇으로 알림을 받는 자동화입니다.
사전준비:
텔레그램에 챗봇 만들어 두기 (모르겠으면 링크를 참고하세요)
관련된 모든 코드는 여기에서 확인하실 수 있습니다.
CGV 홈페이지를 대상으로 했고, 롯데시네마나 이런 곳도 비슷한 구조일 테니 uri만 잘 찾아서 동일하게 진행하시면 될 것 같습니다.
url에 세팅할 값은 아래 사진과 같이 iframe 태그 안에서 값을 찾으시기 바랍니다 !! 지금 예제코드대로 하면 용산이 아니라 다른 지역이 나오게 됩니다)
예제 코드에서는 forDX 라고 4DX 영화 타입을 찾는 것으로 지정하였으나, 아이맥스의 경우 개발자도구로 아이맥스 상영관의
클래스값을 확인하시어 변경하시면 되겠습니다.
날짜는 당일 날짜를 YYYYMMDD 로 가져오도록 했으며,
확인 간격은 1,800초(30분) 입니다. 4DX 예매가 오픈되는 경우 메시지를 전송 후 더 이상 전송하지 않습니다(스케쥴러 중단)
아이디값과 토큰값은 개인정보라 가려 두었는데, 챗봇 생성하면 botfather가 보내주는 토큰값을 '토큰값' 부분에 집어넣고
아이디값에는 본인 계정의 아이디값을 적으시면 됩니다.
아이디 값을 모르시는 경우, 생성된 챗봇에 아무 메시지나 보낸 다음 아래의 코드를 실행하여 메시지로부터 아이디를 읽어 옵니다.
for i in chatbot.getUpdates():
print(i.message)
# 이렇게 하면 본인이 보낸 메시지를 확인할 수 있는데, 메시지 정보 중 id 값(숫자)가 있습니다.
예제 코드
import datetime
import requests
from bs4 import BeautifulSoup
import telegram
from apscheduler.schedulers.blocking import BlockingScheduler
def check_fordx():
# CGV 메인 도메인 + 예매시간표 페이지 iframe 내 자원주소(src)
url = "http://www.cgv.co.kr/common/showtimes/iframeTheater.aspx?areacode=02&theatercode=0052&date="
today = datetime.date.today().strftime("%Y%m%d")
url += today
response = requests.get(url)
bs = BeautifulSoup(response.text, 'html.parser')
# 4DX 여부를 확인하기 위해 개발자도구로 확인하니 4DX는
# <span class="forDX">4DX</span> 이런식으로 span에 클래스 부여되어 있음
#fordx = bs.select_one('span.forDX')
chatbot = telegram.Bot(token = '토큰값')
# 타겟: 해당 날짜에 상영중인 영화 목록 하나씩 출력 + <strong> 태그 떼고 출력
result = []
# 이상한 값이 끼어들어와서 이후에 replace로 날려줄 값
nullvalue = '[<strong>\r\n '
nullvalue2 = '</strong>]'
# 상영목록이 담긴 리스트를 받아옴
fordx = bs.find_all('div', attrs={"class": "col-times"})
if (fordx):
for i in fordx:
# 4dx 클래스값을 가진 항목이 있는지 검사
if (i.find(class_='forDX')):
# 해당 항목의 a > strong(타이틀부분) 가져옴
title = i.select('a > strong')
result.append(str(title))
result = [word.replace(nullvalue, '') for word in result]
result = [word.replace(nullvalue2, '') for word in result]
print(result)
for movie in result:
chatbot.sendMessage(chat_id= 아이디값, text = movie + " 의 4DX 예매가 오픈되었습니다.")
# 오픈된 경우 더이상의 수행 및 메시지 발송을 막음
sc.pause()
else:
chatbot.sendMessage(chat_id= 아이디값, text = "아직 오픈된 4DX 예매가 없습니다.")
# 스케쥴 구성을 위한 수행부
sc = BlockingScheduler()
sc.add_job(check_fordx, 'interval', seconds = 1800)
sc.start()
실행 결과:
테스트한다고 뭘 많이 보내긴 했는데 저런 식으로 텔레그램 메시지를 받게 됩니다.
'Developments' 카테고리의 다른 글
Java Application session timeout 설정과 우선순위 (0) | 2021.06.05 |
---|---|
200828 TIL: Python - SMTP를 이용한 메일 발송 (0) | 2020.08.28 |
Hibernate ddl-auto 설정 (0) | 2020.08.18 |
[이럴땐이렇게] Spring boot application.yml 파일 mapping value 에러발생 시 (yaml syntax) (1) | 2020.08.18 |
200814 Spring Security 구현 (0) | 2020.08.14 |