728x90
사용할 코드
지난 포스팅에 사용한 코드를 가지고 왔습니다.
더보기
import datetime
import requests
from bs4 import BeautifulSoup as bs
class GoogleWeather():
url = 'https://www.google.com/search?q={}&rlz=1C1EJFA_enKR770KR770&oq=%EC%86%A1%ED%8C%8C%EA%B5%AC+%EB%82%A0%EC%94%A8&aqs=chrome..69i57.2835j0j8&sourceid=chrome&ie=UTF-8'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
result = []
def __init__(self, keyword=None):
self.keyword = keyword
def set_keyword(self, keyword):
self.keyword = keyword
def run(self):
res = requests.get(self.url.format(self.keyword), headers=self.headers)
self.parse_html(res.text)
return res
def parse_html(self, text):
html = bs(text, 'html.parser')
loc = html.find('div', {'id': 'wob_loc'})
loc = loc.string if loc else loc
time = html.find('div', {'id': 'wob_dts'})
time = time.string if time else time
status = html.find('span', {'id': 'wob_dc'})
status = status.string if status else status
now = datetime.datetime.now().replace(microsecond=0)
self.result.append({
'search_time': str(now),
'loc': loc,
'time': time,
'status': status
})
def get_result(self):
if self.result:
return self.result[-1]
else:
return None
if __name__ == '__main__':
crawler = GoogleWeather()
while True:
k = input('지역명 >> ')
crawler.set_keyword(k + ' 날씨')
crawler.run()
r = crawler.get_result()
for v in r.values(): print(v)
print('-'*50)
간단하게 에코봇 만드는 것도 했었죠.
더보기
from telegram.ext import Updater, MessageHandler, Filters
def get_message(bot, update):
chat_id = bot.message.chat.id
msg = bot.message.text
update.bot.send_message(chat_id, msg)
if __name__ == '__main__':
token = '1305621209:AAHmugmzbjB1T7KcZmYe5nPuDEdk-MMdSSg'
updater = Updater(token, use_context=True)
message_handler = MessageHandler(Filters.text, get_message)
updater.dispatcher.add_handler(message_handler)
updater.start_polling()
updater.idle()
구글 날씨 검색기(크롤러)와 연동
다음과 같이 메시지를 처리하시면 되겠습니다.
1. /start 메시지 처리 -> 안내
2. 크롤러 수행
1) 크롤러 정상적인 응답 -> 응답 데이터 전달
2) 비정상적인 응답 -> 안내
같은 내용이어서 다른 포스팅의 사진을 가져왔습니다.
크롤러의 결과 데이터가 None 이면 지역명을 다시 입력하라고 전달합니다.
전체 코드
from telegram.ext import Updater, MessageHandler, Filters
from crawler import *
def get_message(bot, update):
chat_id = bot.message.chat.id
msg = bot.message.text
if msg == '/start':
update.bot.send_message(chat_id, '날씨를 알려드립니다.')
update.bot.send_message(chat_id, '지역명을 입력하세요.')
return
crawler.set_keyword(msg + ' 날씨')
crawler.run()
r = crawler.get_result()
print(r)
if r and r['loc']:
send_msg = []
for k, v in r.items():
if k == 'loc':
send_msg.append(f'지역명 : {v}')
elif k == 'time':
send_msg.append(f'시간대 : {v}')
elif k == 'status':
send_msg.append(f'날씨 : {v}')
update.bot.send_message(chat_id, '\n'.join(send_msg))
else:
update.bot.send_message(chat_id, '검색 결과가 없습니다.')
update.bot.send_message(chat_id, '지역명을 입력하세요.')
if __name__ == '__main__':
crawler = GoogleWeather()
token = 'Input your token'
updater = Updater(token, use_context=True)
message_handler = MessageHandler(Filters.text, get_message)
updater.dispatcher.add_handler(message_handler)
updater.start_polling()
updater.idle()
'Bot' 카테고리의 다른 글
텔레그램 봇 : 블로거 뇌구조 그리기 (0) | 2020.07.27 |
---|---|
텔레그램 봇 : 블로거를 위한 내 게시글 검색순위 찾기 (0) | 2020.07.23 |
라사(Rasa) 튜토리얼 -1 : 설치 및 구동 (0) | 2020.07.17 |
파이썬 텔레그램 봇 만들기 -2 : 패키지 설치 및 에코봇 구현하기 (0) | 2020.07.16 |
파이썬 텔레그램 봇 만들기 -1 : API 토큰 발급 절차 (0) | 2020.07.16 |