안녕하세요?
파이썬(파이썬 텔레그램 봇 패키지 포함), 텔레그램, 그리고 크론탭을 이용해서
어느 게시판이나 새 글이 작성되면 텔레그램으로 그 제목을 알려주는 코드입니다.
장터에 물건이 등록되거나 핫딜이 뜨면 밖에서도 바로 받아볼 수 있도록 하려는 취지에서 만들어봤네요 ^^
RSS 생성 사이트를 활용할 수도 있고 안드로이드 앱 중에도 새 글 알림 앱이 있지만
일부 RSS 생성 사이트의 비싼 플랜을 제외하면 1시간 이내 단위로 검색할 수 있는 방법은 없는 것으로 알고 있습니다.
제가 파이썬을 제대로 책이나 수업을 통해 배운 것이 아니기 때문에 매우 허접하고 지저분하지만
(간신히 작동은 하지만 파이썬 유저분들께서 제가 잘못 짠 부분을 지적해주시면 감사하겠습니다 ㅠㅠ)
Vultr의 Ubuntu 16.04 x64 환경에서 크론탭에 넣고 텔레그램 알림이 잘 작동하는 것을 확인했습니다.
우선 파이썬, Requests, BeautifulSoup4, 파이썬 텔레그램 봇 패키지가 설치되어 있고
텔레그램에서 봇 파더로 뉴봇을 생성해야 합니다.
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests
from bs4 import BeautifulSoup
import os
import telegram
bot = telegram.Bot(token='*1')
chat_id = bot.getUpdates()[-1].message.chat.id
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
session = requests.Session()
headers = {"User-Agent":"Mozzila/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"}
req = requests.get('*2')
req.encoding = 'utf-8'
html = req.text
soup = BeautifulSoup(html, 'html.parser')
posts = soup.select('*3')
latest = posts[0].text
with open(os.path.join(BASE_DIR, 'latest1.txt'), 'r') as f_read:
before = f_read.read()
f_read.close()
if before != latest:
bot.sendMessage(chat_id=chat_id, text=latest)
with open(os.path.join(BASE_DIR, 'latest1.txt'), 'w+') as f_write:
f_write.write(latest)
f_write.close()
앞부분은 인코딩 때문에 넣었고
해당 사이트에서 유저에이전트가 파이썬으로 뜨면 차단될 수 있기 때문에
헤더를 변경하였습니다.
(제대로 변경되었는지 www.whatismybrowser.com에서 확인하긴 했는데 솔직히 이 부분은 잘 모르겠네요 ㅠㅠ)
*1 : 텔레그램 봇 파더에서 생성된 토큰
*2 : 해당 게시판의 URL
*3 : 게시판 제목의 CSS 셀렉터 (ex. td.fz_subject > a 이런 식으로 써주시면 됩니다)
이렇게 입력하시면 됩니다.
그리고 크론탭에 * * * * * python 파일명.py 형식으로 넣어주시면 1분마다 검색해서
(아시겠지만 1분 이하 간격으로 하려면 & sleep을 이용해서 반복하여 기입하면 됩니다)
새 글이 있는 경우에만 사용자가 생성한 텔레그램 봇 계정으로 알림(새 글 제목)이 도착합니다.
아마도 처음 돌릴 때 latest1.txt 파일이 없으면 에러가 발생할 수 있으니
vi 등 에디터를 이용하여 아무 내용이나 latest1.txt를 만들어주셔야 할 것입니다.
(처음에 한 번은 잘못된 알림이 올거에요)
그럼 남은 주말 즐겁게 보내시고 편안한 밤 되세요 ^-^
항상 감사드립니다!
참조 문서 및 블로그:
파이썬으로 웹 크롤러 만들기, 한빛미디어, 라이언 미첼
https://kimdoky.github.io/diary/2017/08/26/Telegram_bot.html
https://beomi.github.io/2017/04/20/HowToMakeWebCrawler-Notice-with-Telegram/
게시판 가장 위에 공지글이 들어간 경우에는
latest = posts[0].text 이 부분에서
숫자를 바꿔줘야 합니다.
공지글이 한 개이면 posts[1], 두 개이면 posts[2] 이런 식으로요 ^^