Level 04 |
03_파이썬과 대화하기 |
1_오는 것이 있으면, 가는 것이 있게 마련이다.
파이썬은 지금껏 수동적인 친구였어요.
print() 함수를 입력하면 나에게 무언가를 보여주었고
내가 코드를 실행하면 바로 결과를 대답했죠.
이번 장에서는, 파이썬이 나에게 말을 걸게(?) 해 볼 겁니다.
날씨나 미세먼지, 뉴스정보 등등... 을 나에게 주기적으로 알려주는
그런 스마트한 친구인 하루하루를 소개합니다!
[날씨정보 이미지]
[뉴스정보 이미지]
[교통정보 이미지]
우리가 여러 번 다루었던 정보들은 결국 컴퓨터 안에서만 있었는데요,
내가 휴대폰에서 주기적으로 정보를 받아볼 수 있게 해 볼 겁니다.
2_ 이를 위해 필요한 것들
[파이썬 텔레그램 봇 설치하기 이미지]
[휴대폰에 텔레그램 설치하기 이미지]
[텔레그램에서 botfather 검색 이미지]
[/newbot 과 봇의 이름 짓기 이미지]
[HTTP API key 복사하는 이미지]
[파이썬으로 가져와 문자열에 넣기 이미지]
[내가 만든 봇 검색해서 말 걸기 이미지]
[아무 일도 일어나지 않아요 ㅠㅠ 이미지]
아무 일도 일어나지 않아요?!
네, 그렇습니다.
이제 막 만들어진 친구이기에, 언제 어떤 말을 할 지 알려줘야 합니다.
3_ 파이썬으로 내 봇 제어하기
import telegram as tg
api = '957261829:AAH4VROxizkW_quC_sSQMaEgvHbofPeVPa8'
haruharu = tg.Bot(token=api)
status = haruharu.getUpdates()
newdata = status[-1]
newdata_dict = newdata.to_dict()
chat_room = newdata_dict['message']['chat']['id']
haruharu.send_message(chat_id = chat_room, text="Hello")
[코드 해설]
telegram 도구를 불러와, 앞으로 tg 라는 축약어로 사용하기로 합니다.
봇을 만들 때 botfather 로부터 부여받은 HTTP API 는 내가 만든 봇을 특정할 수 있는 고유한 값입니다.
이 값을 api 라는 변수에 문자열 형태로 집어넣습니다.
tg.Bot() 안에 token 으로 HTTP API 값을 넣어줌으로써, 파이썬에서 사용될 봇을 정의합니다.
홈페이지나 사이트 계정에 로그인 한다고 볼 수도 있겠네요.
이렇게 정의한 봇을 파이썬에서 앞으로 haruharu 라는 이름의 변수로 사용합니다.
방금 만든 봇에게 말을 걸었다면, .getUpdates() 실행시 해당 봇이 받은
메시지에 대한 정보가 리스트 형태로 화면에 나올 것입니다.
리스트 인덱스 -1 번째로 인덱싱하여 맨 마지막에 추가된 메시지를 선택할 수 있고,
선택한 한 메시지를 to_dict() 하여 딕셔너리로 바꿔줍니다.
봇에게 말을 건 사용자의 id 인 chat_id 는 message -> chat -> id 순서로 타고 접근할 수 있습니다.
이렇게 얻은 사용자의 chat_id 를 chat_room 변수에 집어넣습니다.
haruharu 이름으로 정의된 봇에서 .send_message() 로 사용자에게 메시지를 보낼 수 있습니다.
A 가 B 에게 메시지를 보내려면 3 가지 정보가 필요합니다.
1_ 보내는 쪽이 특정 되어야 합니다.
2_ 받는 쪽이 특정 되어야 합니다.
3_ 어떤 메시지가 전달될지 정해져야 합니다.
지금 상황은 봇이 나에게 메시지를 보내는 경우이죠.
봇을 특정짓는 것은 haruharu 변수이고, 만들 때 HTTP API 를 사용했습니다.
사용자를 특정짓는 것은 chat_id 이고, 이를 알기 위해 내가 직접 봇에게 말을 걸어주었습니다.
어떤 메시지를 보낼 것인지는 text= 에 넣어주는 값에 의해 결정됩니다.
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
$$여기에서 chat_id 는 변하지 않는 값이기 때문에
내 chat_id 가 무엇인지 알았다면, chat_id= 영역에 직접 넣어주는 것으로
status= 부터 chat_room= 에 해당하는 라인(chat_id를 구하기 위한 라인)을 지울 수 있습니다.
코드 간소화하기_1
import telegram as tg
api = '957261829:AAH4VROxizkW_quC_sSQMaEgvHbofPeVPa8'
haruharu = tg.Bot(token=api)
haruharu.send_message(chat_id = 412971146, text="Hello")
$$ 결국 나에게 메시지를 보내주는 기능을 수행하는 코드들이므로
보내려 하는 정보를 입력값으로 하는 함수로 묶어낼 수 있습니다.
나중에는 이렇게 여러 줄이 아닌, 함수만 호출해서 사용할 수 있는 것이죠!
코드 간소화하기_2
함수로 바꾸기
def message(msg):
import telegram as tg
api = '957261829:AAH4VROxizkW_quC_sSQMaEgvHbofPeVPa8'
haruharu = tg.Bot(token=api)
haruharu.send_message(chat_id = 412971146, text=msg)
자, 그럼 이제 무엇을 할 수 있을까요?
[예제문제]
RSS 뉴스, 날씨, 미세먼지를 텔레그램 알람 받기
[도전문제]
매일 아침 출근 소요시간을 시간대별로 알려주는 봇을 만들고자 합니다.
셀레늄으로 마우스를 올려놓는 hover 와 키를 보내는 send_keys를 사용하여
내 집에서 출근장소까지의 길찾기 검색을 수행할 수 있는 path_finder 함수를 만들어보세요.
예제코드:
from urllib.request import urlopen
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
def path_finder(fr, to):
path = 'C:/Users/one/Desktop/bot_overall/chromedriver.exe'
driver = webdriver.Chrome(path)
pagestr = "https://map.kakao.com/"
driver.get(pagestr)
'''
이 부분을 채워주세요
'''
'[일상봇 만들기] 나의 하루하루를 도와줄 친구!' 카테고리의 다른 글
200%_part_02 (0) | 2019.08.01 |
---|---|
200%_part_01 (0) | 2019.08.01 |
level_04_part_2 (0) | 2019.07.09 |
level_04_part_1 (0) | 2019.07.05 |
level_03_part_2 (0) | 2019.07.03 |