ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 라즈베리파이와 챗봇으로 날씨 예보를 해보자 #2
    삽질기/라즈베리파이 2020. 2. 1. 16:31

    기상청에서 메일이 하나 왔다. 공공데이터포털에서 내가 사용한 날씨 예보 api가 폐기된다는 내용이었다. 새로운 api로 개편되어 이전 포스팅에서 사용한 api는 폐지된다는 것이었다. 따라서 본 포스팅을 참고하여 프로젝트를 하려는 분들은 기상청 날씨 예보 사이트로 이동하여 새로 개편된 api를 살펴보기 바란다. 개편 전과 개편 후의 사용법은 대부분이 유사해 보이지만 일부 변경점이 있을 수 있으므로 api 페이지의 활용가이드를 잘 확인하기 바란다. 참고로 이메일에 따르면, 기존의 api는 2020년 4월 28일에 완전 폐기된다고 한다.

     

    기존 api 코드값 정보(좌측)와 개편된 api 코드값 정보(우측) 비교. 맥 사용자로써 활용 가이드가 워드파일로 바뀐 것부터 맘에 든다.

     


     

    본론으로 돌아와 지난 번 포스팅에 이은 프로젝트 설명을 계속하겠다. 이번 포스팅의 주된 내용은 텔레그램 챗봇을 생성하는 것이다. 먼저 텔레그램에 로그인하여 접속해 BotFather를 찾는다. 다음으로 /newbot을 전송하고, 생성할 bot의 이름, 생성할 bot의 Username을 지정해준다.

     

    마지막 메시지가 잘렸는데, 스크롤을 내려보면 생성한 챗봇의 토큰이 있다.

    완료됐다면 챗봇의 토큰을 주는데, 우리는 이를 통해 챗봇에 인증하고 메시지를 보낼 수 있다. Phthon에서 이를 하려면 관련 패키지를 설치해야한다. 이전 포스팅에서 생성한 아나콘다 가상환경이 3.0 이상이라면 다음 명령어를 통해 손쉽게 다운로드 할 수 있다.

    pip install telepot

    설치 후 pip list로 해당 패키지가 잘 설치되었는지 볼 수 있다.

     

    이제 간단한 코드를 통해 챗봇 테스트를 해보도록 하자. 다음 예제는 메시지로 '날씨'라고 전송하면 '맑았으면 좋겠습니다'라고 대답하며, 다른 메시지에 대해서는 모르겠다는 메시지를 전송한다.

    #-*- coding: utf-8 -*-
    import telepot, sys
    from telepot.loop import MessageLoop
    import Private		#API 토큰과 공공데이터포털 API 등을 별도의 py파일로 만들어 두었다.
    
    def handle(msg):
        content_type, chat_type, chat_id = telepot.glance(msg)
    
        if content_type == 'text':
            if msg['text'] == '날씨':     #날씨라는 메시지가 도착했을 때 대답
                bot.sendMessage(chat_id, '맑았으면 좋겠습니다')
            else:                        #그 외에 다른 메시지가 도착했을 때 대답
                bot.sendMessage(chat_id, '무슨 말인지 모르겠군요')
    
    TOKEN = Private.TOKEN    #Bot API 토큰
    
    bot = telepot.Bot(TOKEN)
    MessageLoop(bot, handle).run_as_thread()
    print ('Listening ...')
    
    # 프로그램을 계속 돌림
    while True:
        input()

     

    본인이 하고 싶은 메시지를 지정해줘도 좋다. 이것저것 실험을 해보자.

     


     

    이제 텔레그램 봇을 생성했으며 사용할 준비까지 되었다. 다음 포스팅부터는 가장 중요한 날씨 데이터를 받아서 메시지로 변환해 볼 것이다. 지금까지는 별 어려움 없었는데... 데이터를 변환하는 것에서 공식 가이드를 참고해야하는 일이 많아 나름 삽질한 부분이다. 다음 포스팅에서 본격적인 Python 코딩을 통해 결과물을 만들어보도록 하겠다.

     

     

    댓글

Designed by Tistory.