본문 바로가기
Programming/Code Archive

[파이썬] 실시간급상승검색어 자동 발송하는 봇 만들기 1: 텔레그램 봇 생성

by 지표덕후 2023. 8. 13.

실시간 급상승 검색어를 보내주는 봇을 만들려고 합니다. 텔레그램 봇을 만들어서 크롤링(스크래핑)한 실시간 급상승 검색어를 일정 시간마다 쏴주는 프로그램이에요.
 

 

 
이 프로젝트는 아래 과업으로 이루어집니다:

텔레그램 봇 API 접근 권한 얻기(현재 글)
실시간 급상승 검색어 크롤링해 텍스트 파일로 저장
웹크롤링과 메시지 발송을 수행하는 텔레그램 봇 만들기


 
 

텔레그램 신규 봇 생성하기

텔레그램으로 메시지를 자동 발송하기 위해서는 봇을 생성해야 합니다.
 
 
 
▼ PC용 텔레그램 클라이언트를 설치해줍니다. 
 

 
 
 
 
▼ 클라이언트를 실행해 인증과정을 완료하고, 검색창에 "botfather"를 입력합니다. 텔레그램 봇과 관련된 다양한 명령어를 안내해줄 텐데, 우리는 새로운 봇을 생성하려는 것이므로 /newbot을 선택합니다.
 

 

 
 
 
▼  봇 이름과 프론트에 노출될 이용자 이름(username)을 정해주어야 하는데, "opportunity_sender_bot"으로 지었습니다.
 

 
 
 
▼  위 과정까지 마치면 API를 사용할 수 있는 토큰(Token)이 주어집니다. 아래 이미지에서 모자이크한 부분이에요. 이건 어디 잘 메모해놓고 유실되지 않도록 조심하세요. 텔레그램의 API를 사용하기 위해 필요합니다. 
 

 
 
 
▼ 그리고 봇을 통해 메세지를 보내기 위해서는 메시지를 수신할 이용자의 ID가 필요합니다. 나에게 보낼 것이기 때문에 내 ID를 알면 됩니다. 이 값은 아까 "botfather"를 입력했던 검색창에 "json dump"를 검색함으로써 알 수 있습니다.
 
채팅창의 이름대로 json으로 대화에 대한 정보를 정리해 보여주는데, 이 중 message > from 필드에 있는 id(모자이크 처리한 부분)가 본인의 이용자 ID입니다. 이것도 어디 메모해두시길.

 

 
 
 

텔레그램 봇으로 테스트 메시지 보내기

텔레그램 봇 생성이 끝났으니 이제 테스트 메시지를 발송해보겠습니다. 봇의 발화를 제어할 수 있다면, 그 발화 내용을 내가 원하는 것으로 세팅하고, 정해진 시점에 자동 발송되도록 하여 마치 개인비서처럼 활용할 수 있겠죠.
 
작업환경은 아래와 같습니다:
1) 파이썬3.7(32bit)
2) 파이썬IDE : Pycharm
 
 
 
▼ 먼저 파이썬 텔레그램 봇 패키지를 설치합니다.
 

pip install python-telegram-bot

 
 
 
 설치한 패키지를 불러옵니다.
 

import telegram

 
 
 
특정 메시지를 봇이 발화하도록 코딩하고 실행해봅니다.
 

# Replace 'TOKEN' with your actual bot's API token
TOKEN = '여러분이 발급받은 API KEY'
bot = telegram.Bot(token=TOKEN)

# Replace 'CHAT_ID' with the chat ID of the recipient (user or group)
CHAT_ID = '메시지 수신할 이의 user id'

# 발화내용
MESSAGE = 'Telegram 봇 메시지 자동 발송 테스트'

# The message you want to send
# Send the message
bot.send_message(chat_id=CHAT_ID, text=MESSAGE)

 

결과는 실패입니다. bot.send_message를 실행하는 단계에서 에러가 발생하네요.

 

조금 알아보니, 예전 버전의 python-telegram-bot 패키지에서 send_message 함수는 동기 함수였는데, 최신 버전에서는 이게 비동기 함수로 바뀐 것 같습니다. 비동기 함수인 send_message를 실행하기 위해 코드를 아래와 같이 조금 수정했습니다.
 

▼ 새로운 비동기 함수 main()을 정의해, 토큰과 수신자 ID를 입력 받아 send_message가 실행되도록 했습니다. 비동기 함수를 실행하기 위해 asyncio 패키지를 설치하고 불러왔습니다(import). 그리고 코드 실행! 두근두근하네요...

 

async def main():
    # Replace 'TOKEN' with your actual bot's API token
    TOKEN = '발급 받은 텔레그램 API KEY'
    bot = telegram.Bot(token=TOKEN)

    # Replace 'CHAT_ID' with the chat ID of the recipient (user or group)
    CHAT_IDs = '메시지 수신할 user의 ID'

    # The message you want to send
    MESSAGE = 'Telegram 봇 메시지 자동 발송 테스트'

    # Send the message using 'await'
    await bot.send_message(chat_id=CHAT_ID, text=MESSAGE)

# Run the coroutine
import asyncio
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

 


 
결과는? 성공입니다.
 

 

 
-
 
코드를 보시면 알겠지만, MESSAGE 변수의 내용을 바꿔주면 봇의 발화 내용이 바뀝니다. 그 내용을 실시간 급상승 검색어를 크롤링한 결과로 대체할 수도 있고, 주식시장의 일정, 뉴스 클리핑 등등으로 바꿔줄 수 있습니다. 봇을 훌륭한 업무 자동화툴로 이용하는 거죠.
 
다음 포스팅부터는 그 방법에 대해 알아보겠습니다.
 
 

댓글