텔레그램 웹페이지 게시물 업데이트 알람 봇 만들기(2)
- 텔레그램 게시물 업데이트 알람 봇 만들기 2편
- Heroku 사용하여 파이썬 코드 배포 및 실행, Heroku 스케쥴러 등록하는 내용을 다룬다.
- <1편 참고> 웹페이지 게시물 업데이트 알람 봇 만들기(1)
Heroku 활용한 텔레그램 봇 실행
Heroku
는dyno
라는 작은 리눅스 가상 서버를 제공해서 개발자가 만든 애플리케이션을 빌드, 실행하고 스케일링 할 수 있게 해준다.- bot 로직이 구현된 python 실행할 App을
Heroku CLI
를 통해 Dashboard로 배포 할 수 있다. - 로컬 컴퓨터에서 실시간으로 파싱하고 있는 python 프로그램을 실행하고 있을 순 없기 때문에 Heroku 가상 서버 서비스를 활용한다.
Heroku 가입 및 App 만들기
- 간단한 정보 입력 후
Heroku
에 가입하여Dashboard
로 이동 - 아래와 같이 사용할 App 이름 입력 후 생성
- 이번 포스팅에서는 CLI 명령어로 App 생성 및 배포하는 방법으로 진행
Heroku 배포에 필요한 파일 준비
- Heroku Deploy에 필요한 파일은
Procfile
,requirements.txt
,runtime.txt
,실행할.py
Procfile 파일 작성 내용(실행할 python 파일 이름 명시)
worker: python telegram_bot.py
requirements.txt 파일 작성 내용(python 필요 패키지 명시)
python-telegram-bot
beautifulsoup4
requests
runtime.txt 파일 작성 내용(실행할 python 버전 명시)
python-3.6.8
Heroku CLI 사용한 python 소스코드 배포하기
Git
과Heroku CLI
설치가 되어야 아래의 명령어들을 수행할 수 있다.Anaconda Prompt
에서heroku login
명령어로 로그인 한다.- CLI 환경에서는
heroku create
명령어로 생성 가능(Heroku CLI
설치가 되어 있어야함) - CLI에서 App 생성 후 App 이름이 랜덤으로 생성되기 때문에 필요시
rename
명령어로 변경해준다.heroku rename new-post-alaram-bot
- 아래의 git 명령어를 통해 Deploy에 필요한 파일들을 배포 해준다.
- App이 생성 완료 되었다면, Heroku Dashboard에서
Free Dynos
에서 App이 생성된 것을 확인할 수 있다.
Heroku 배포한 python 실행하기
Dashboard > Resources > Free Dynos
부분 편집 버튼 누른 후 App 활성화 시켜주면 됨
- 활성화 해준 뒤
Confirm\
하면python telegram\_bot.py
명령어가 실행되면서 python 프로그램이 실행된다.
More > View logs
에서 실행중인python app
로그, 상태 등을 실시간으로 확인할 수 있다.
Heroku 스케쥴러에 App 등록하기
- Heroku에서 제공되는 스케쥴러 사용하게 되면 Dyno 사용시간 절약할 수 있다는 장점이 있다.
- 10분 단위, 요일, 월 등으로 Heroku에 등록된 App을 스케쥴링 하여 실행해주는 기능이다.(이번 글에서는 10분 마다 python 코드를 실행하는 예제로 설명함)
- 스케쥴러 사용을 위해 위에서 실행했던 Heroku App은 중지 시킨다.
- 스케쥴러와 동시에 실행될 시 Dyno의 시간 책정 및 프로그램 충돌 일어나는 현상이 있다(
worker
와scheduler
두 가지 유형으로 App이 함께 실행되기 때문에)
Heroku 스케쥴러 Add-ons 추가하기
- Heroku 스케쥴러 사용을 위해 Add-ons 추가를 해주어야한다.
Heroku Dashboard > Resources > Add-ons >
add add-ons 검색하기Heroku Scheduler
검색 후 추가
)
Provision
선택하여 Add-ons 추가- 추가 완료가 되기 위해서는 계정의 지불 방법으로 신용카드가 등록되어 있어야함
Add Job
클릭하여 등록할 스케쥴 정보 등록하기
- 스케쥴러가 동작할 시간, 실행 명령어 편집 후 저장
More > View logs
에서 10분마다 python app이 실행되는지 확인하자
Heroku 스케쥴러 실행 python 소스코드
- 최신글 번호를 Heroku 환경변수에 저장하기 위해 환경변수 설정해준다.
heroku config:set PPOMPU_ID=0
- 1편 글에서의 소스코드에서
while
반복문 제거와, 환경변수 사용 코드 추가됨
#!/usr/bin/env python
# encoding=utf-8
import requests
import time
from bs4 import BeautifulSoup
import telegram
import os
bot = telegram.Bot(token='YourTokenKey')
# heroku 서버의 환경변수 사용하여 최신글 번호 업데이트
ppompu_latest\_num = os.environ.get('PPOMPU\_ID')
def ppomppu():
global ppompu\_latest\_num
req = requests.get('http://www.ppomppu.co.kr/zboard/zboard.php?id=ppomppu')
html = req.text
soup = BeautifulSoup(html, 'html.parser') #, from_encoding='utf-8')
posts = soup.find("tr", {"class" : "list1"})
post\_num = posts.find("td", {"class" : "eng list_vspace"}).text
post\_num.strip()
# 스케쥴러가 10분 마다 제일 최신 게시글 번호와 크롤링한 최신 게시글 번호 비교
# 비교 후 같지 않으면 최신 게시글 업데이트 된 것으로 텔레그램 봇으로 업데이트 메시지 전송
if ppompu_latest_num != post_num :
ppompu_latest_num = post_num
# PPOMPU_ID 환경 변수 최신글의 번호로 업데이트
os.environ\["PPOMPU_D"] = ppompu_latest_num.strip()
link = 'http://www.ppomppu.co.kr/zboard/'+posts.find("td", { "valign" : "middle"}).find("a").attrs['href']
title = posts.find("font", {"class" : "list_title"}).text
text = '<뽐뿌 게시글 업데이트>'+'\\n'+title+'\\n'+link
bot.sendMessage(-123456789, text)
# 프롬프트 로그
print(text)
print(os.environ)
print('bot 동작 중...현재 게시글 번호 ' + ppompu_latest_num.strip())
print('heroku PPOMPU_ID 환경변수' + os.environ.get('PPOMPU_ID'))
if __name__ == '__main__':
try:
ppomppu()
except AttributeError as e:
print(e)
'Bot 기술노트' 카테고리의 다른 글
웹페이지 게시물 업데이트 알람 봇 만들기(1) (12) | 2019.07.11 |
---|---|
BotFramework Rest API로 사용하기 (0) | 2017.08.30 |
BotFramework으로 간단한 챗봇 만들기 (0) | 2017.08.29 |
python - tweepy 사용한 트위터 크롤링(crawling) (10) | 2017.08.05 |