코로나 바이러스로 인한 마스크 대란으로 재입고 알림 봇 포스트를 많은 분들이 봐주시고 질문도 해주시고 있습니다. 블로그 유입이 늘어나고 나름 유용하게 사용하시는 것 같아 기쁘지만 그냥 바이러스 빨리 사라지는게 훨씬 더 좋을 것 같네요..
이전 글에서는 스크래핑 방법에 대해 알아보았습니다. 이번 글에서는 입고가 되었을 때 알림을 만드는 방법과 지금까지 만든 프로그램들을 엮어줄 메인 프로그램을 진행해 보겠습니다.
알림 만들기
스크래핑을 통해 상품이 주문 가능한 상태가 되었음을 확인했으면 사용자에게 알려줘야 합니다. 이메일, 메신저, 앱 알림 등 다양한 방법이 있습니다. 이 중 가장 간단한 텔레그램 봇과 이메일을 알아보겠습니다.
카카오톡 같은 경우는 API를 통해 메시지를 보내는게 가능하지만 방식이 좀 복잡한 편이라 제외했습니다. 카카오톡을 이용하실 분은 이곳을 참고해보세요.
텔레그램 봇 준비
텔레그램은 봇bot을 통해 API를 사용할 수 있도록 되어 있습니다.
텔레그램으로 메시지를 보내려면 우선 봇을 만들어줘야 합니다. 봇을 만들기 위해서는 봇파더(BotFather)에게 요청을 해야 합니다.
- 앱에서 봇파더를 검색합니다.
-
채팅창에 /start 를 입력하면 커맨드가 나옵니다.
-
봇을 만드는 명령어는 /newbot 입니다. 입력합니다.
-
봇의 이름을 입력합니다. 저는 newstockbot 으로 했습니다.
-
봇의 사용자이름을 입력하라고 하네요. newstock_bot으로 했는데 사용중이라 newstockalert_bot 으로 했습니다.
-
/mybots 를 입력하면 내가 만든 봇들의 목록이 나옵니다. 새로 만든 봇을 선택하면 메뉴가 나오고 거기서 API Token 을 선택합니다.
-
API Token은 텔레그램에 메시지 요청을 보낼 때 사용하는 키 역할을 합니다. 좀 있다 필요합니다.
이제 봇 준비가 완료되었습니다.
텔레그램 메시지 보내기
- 파이썬으로 텔레그램 봇을 사용하기 위해서 python-telegram-bot 모듈을 설치합니다.
$ pip install python-telegram-bot --upgrade
- 간단하게 코드를 만들었습니다.
14라인에 텔레그램 봇 준비 과정에서 가져온 API Token을 넣어줍니다.
16라인에 나의 ID를 넣어줍니다. 내 ID를 찾는게 좀 어렵습니다. 텔레그램 앱에서 설정 등에 들어가봐도 나오는게 없더라구요. 저는 JsonDumpBot 이라는 봇을 이용해서 ID를 찾았습니다.
프로그램을 실행하면 내가 만든 봇으로부터 나에게 Hello 라는 메시지가 도착합니다.
python telegram_bot.py
여기까지 텔레그램으로 알림 만들기는 완료되었습니다.
이메일로 알림 보내기(gmail 기준)
텔레그램과 같은 메신저 앱을 사용하지 않는다면 이메일로 알림을 보내는게 적당한 방법이 될 것 같습니다. 이메일을 보내는 방법은 API를 사용하는 방법과 SMTP를 이용하는 방법이 있습니다. API를 사용하는게 보다 안전한 방법이지만 단계가 복잡한 편입니다. SMTP로 진행해 보겠습니다. 이 글을 참조했습니다.
샘플 구현
gmail id와 패스워드를 넣어주고 코드를 실행하면 처음에는 실패하게 됩니다. 지메일의 보안 정책 때문입니다. gmail에 들어가보면 보안 알림 메일이 도착해 있습니다.
‘보안 수준이 낮은 앱 허용’ 을 사용 안함에서 허용함으로 바꿔줍니다.
다시 프로그램을 실행하면 정상적으로 메시지가 도착합니다.
샘플 프로그램을 우리가 사용하려는 목적에 맞게 조금 형태를 고쳤습니다. 메인 프로그램에서는 이 버전을 통해 이메일을 보내도록 하면 됩니다.
정리
여기까지 사용자에게 메시지를 보내는 방법을 알아봤습니다. 텔레그램과 이메일의 코드가 조금 다른데 이 부분 때문에 메인 프로그램이 조금 복잡해질 수 있습니다. 알림을 보낸다 라고 하는 기능은 텔레그램이든 이메일이든 동일한 것으로 볼 수 있으므로 같은 인터페이스를 갖도록 바꿔주는게 좋아 보입니다. 하지만 지금 이 포스트는 간단한 가이드를 만드는게 목적이므로 생략하겠습니다.
[다음]으로는 전체 프로그램의 시작점이 되는 메인 프로그램과 실행 방법에 대해 다뤄보겠습니다.
좋은 글 감사합니다.
시간 되면 라즈베리파이를 이용해서 한번 제작해보아야겠네요 ^^
라즈베리파이에서 돌리시려면 도커 보다는 그냥 아나콘다 직접 설치하시는게 좋을 것 같아요.
안녕하세요 글 정말 흥미롭게 보았습니다 !
혹시 api를 이용해서 텔레그램 말고 시놀로지챗으로도 가능할까요?
가능하다면 포스팅 한번 부탁드려도 될까요 ?ㅎㅎ
안녕하세요. 시놀로지 챗이라는 패키지가 있군요. 한번 해보게 되면 포스팅 하겠습니다. 감사합니다.
좋은글 감사드립니다. 조금씩 따라하고 있긴한데
텔레그램으로 메세지 보내기 해보고있는데
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
발생하네요.
코드가 좀 수정되야 할 것 같은데 어떻게 해결하면 좋을까요?
안녕하세요! 좋게 봐 주셔서 감사합니다. 혹시 어느 라인에서 오류 발생하는지 알 수 있을까요? 에러 메시지를 보내주시면 확인해보겠습니다.
에러 메시지로 찾아봤는데 요 글 보시면 도움 될 것 같습니다! https://www.inflearn.com/questions/737370/%ED%85%94%EB%A0%88%EA%B7%B8%EB%9E%A8-%EB%B4%87-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%98%A4%EB%A5%98-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4