본문 바로가기

[일상봇 만들기] 나의 하루하루를 도와줄 친구!

level_04_part_3

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