앞서 작성한 출장자 명단을 텔레그램으로 보내기 는 혼자쓰기는 문제 없으나, 다른 사람과 공유하려면, chat ID를 일일이 등록해야 한다. 자동으로 반응 하게도 할 수 있을 듯 싶은데, 더 이상 알아 보진 않았다.
우연히 bothub.studio를 클리앙 - 텔레그램 봇 만들기 - 에서 접하고, 이것을 이용해 보기로 했다.
추후 bothub.studio 사용에 대한 글도 작성해 보려 한다.
참고로 bothub는 월 5천개 메세지 발송이 무료.
때문에, 메세지 발송 횟수를 줄일 필요가 있었다.
기존의 것은 출장자 1명씩 말풍선 하나로 나눠 메세지를 보내줬다.
출장자가 월 50명이면, 50개의 메세지가 보내주기 때문에, 이것을 한번에 묶어서 보내는 것으로 수정 하였다.
아래 56~60행 부분이 이것을 수정한 부분 이다.
1. space와 tap 혼용으로 에러가 많았다. space 4칸 습관 들이는 중.
2. 함수 정의와 호출에서 헤맸다.
3. 31 행 -message.add_keyboard_button('출장자명단') - 이것으로 '출장자명단' 버튼 생성. 누르면 '출장자명단' 을 send.
4. 휴가자 명단도 만들 생각이였는데, 인원이 너무 많아 list 출력은 의미 없어 보여 보류.
아래는 말풍선 구분에 따른 차이. 개인적으로 말풍선 1개에 1명이 보기 좋은데...
# -*- coding: utf-8 -*- from __future__ import (absolute_import, division, print_function, unicode_literals) from bothub_client.bot import BaseBot from bothub_client.decorators import channel, command from bothub_client.messages import Message import requests from bs4 import BeautifulSoup class Bot(BaseBot): """Represent a Bot logic which interacts with a user. BaseBot superclass have methods belows: * Send message * self.send_message(message, chat_id=None, channel=None) * Data Storage * self.set_project_data(data) * self.get_project_data() * self.set_user_data(data, user_id=None, channel=None) * self.get_user_data(user_id=None, channel=None) When you omit user_id and channel argument, it regarded as a user who triggered a bot. """ @command('start') def start_handler(self, event, context, content): message = Message(event).set_text('챗봇을 시작합니다.') message.add_keyboard_button('출장자명단') self.send_message(message) @channel() def default_handler(self, event, context): message = event.get('content') if message == '출장자명단': self.business_trip() else: self.vacation() def business_trip(self): self.send_message('출장자 명단입니다.') url_login = "http://~~~~" url_business = "http://~~~~" login_info = { "id": "~~~~", "password": "~~~~", } with requests.Session() as s: login_req = s.post(url_login, data=login_info) business = s.get(url_business) html = business.text soup = BeautifulSoup(html, "html.parser") tbody = soup.find("tbody") self.send_message(tbody.text) #출장자명단 전부를 한번에 출력 #tr = tbody.find_all("tr") #for t in tr: #출장자명단 1명씩 말풍선으로 각각 출력 # content = t.text # self.send_message(content) def vacation(self): self.send_message('휴가자명단은 복구중입니다.')
'코딩' 카테고리의 다른 글
python - 출장자 명단을 텔레그램으로 보내기 (0) | 2019.01.16 |
---|---|
python으로 회사 게시판에 로그인 후 출장자 명단 가져오기 (0) | 2019.01.16 |
티스토리(Tistory)에 소스코드 삽입 - SyntaxHighlighter (0) | 2019.01.16 |
파이썬(python) - post() 보낼때 필요한 데이터 보는 법 (0) | 2019.01.10 |