카카오톡으로 공모주 정보를 전달하려는데, 너무 제약이 많다.
카카오톡 채널을 생성하고 친구 추가한 모두에게 메시지를 전송하려면 건당 금액이 들고,
친구에게 보내는 API는 너무 제한적이어서(친구가 KaKao Developers 가입 및 애플리케이션에 가입) 사용이 불가능한 API이기 때문에,
openCV를 이용하여 화면을 제어하여 자동화 하려고 했으나 로컬이 아닌 서버에서 했을 때 자동화가 불가능할 것 같아서,
텔레그램, 슬랙 중 먼저 텔레그램 봇을 생성하려고 한다.
1. 텔레그램에서 봇 생성 후 API Key 발급하기

web, app 상관 없이, 'botFather'를 검색해서, 녹색 체크박스가 아닌 파랑 체크가 붙은 아이디를 더블 클릭하여 대화를 시작하고,
START 버튼을 누르면 위와 같이 command들이 나온다.
여기서 /newbot을 누르거나, 직접 검색하자.

Step 1: 봇 이름을 설정하고
Step 2: 그다음 봇의 username을 정하는데 끝을 bot으로 설정한 상태로 이름을 설정해야 된다.
Step 1, 2를 완료하면, 생성한 봇의 토큰(API Key)을 받게 되는데, json파일이나 config.yaml 파일과 같이 암호화할 수 있는 파일에 넣어두자.

만약 봇 Token을 까먹거나, 수정사항이 있다면 /mybots를 선택하거나 입력하여 재확인할 수 있다.
2. Bot Id 가져오기(HTML Request)
Telegram Bot API
The Bot API is an HTTP-based interface created for developers keen on building bots for Telegram. To learn how to create…
core.telegram.org

위 사진과 같이 텔레그램 봇 API는 https://api.telegram.org/bot<bot_token>/METHOD_NAME 형식으로,
URL query String으로 HTTPS Query를 보내야 한다.
또한, request는 GET&POST 방법을 지원하며 response는 JSON 객체로 리턴되며 'ok' 필드와 'result' 필드로 구성된다고 한다.

getMe 함수 : 1번에서 발급한 bot의 API key를 이용하여, parameter 없이 User 객체를 리턴 받으며,
Telegram Bot API
The Bot API is an HTTP-based interface created for developers keen on building bots for Telegram. To learn how to create…
core.telegram.org
위 레퍼런스를 확인하면, User 객체 내에 id와 bot 여부인지 등의 정보를 담고 있으므로, 봇 아이디를 얻을 수 있다.
import requests
def get_bot_id_html():
# get_telegram_api_key() 함수로 bot api key를 얻어옴.
url = 'https://api.telegram.org/bot' + get_telegram_api_key() + '/getMe'
response = requests.get(url, params='')
if response.json()['ok'] == True:
print('id 받아오기 성공')
result = response.json()['result']
bot_id = result['id']
return bot_id
else:
print('id 받아오기 실패' + str(response.json()))

Reference에서 제공한 방법 그대로, GET Method를 이용하여, id를 받아왔다.
하지만, 더 쉬운 방법도 있었다. 3번을 보자.
3. Bot Id 가져오기(telegram 라이브러리 이용) - 쉬운 방법, 추천
먼저, 패키지를 설치하자.
- pip install python-telegram-bot
이후, 위에서 길게 설명해둔 방법과 같이 https://api.telegram.org/bot<bot_token>/METHOD_NAME 형식의 뒷부분인 메서드들을,
import telegram을 하여 쉽게 사용할 수 있다.
import telegram
def get_bot_id():
bot_token = get_telegram_api_key()
bot = telegram.Bot(token=bot_token)
me = bot.getMe()
bot_id = me['id']
return bot_id

라이브러리를 이용하면, 더 쉽게 id를 얻을 수 있다!

두 방법 모두 잘 작동하며, 동일한 ID를 받아온다.(ID는 고윳값이기 때문에 당연한 결과이긴 하다😅)
4. 오류 <AttributeError: module 'telegram' has no attribute 'Bot'>
1) python script 파일 이름이 telegram.py 이거나, telegram 폴더 내 script 파일 일 경우
- 나 같은 경우, src/reminder/telegram.py 였기 때문에, 위와 같은 오류 코드를 얻어서 몇 번의 구글링 후에 telegram_bot.py로 이름을 변경해서 다음과 같은 오류를 해결하였다.
2) uninstall 후 reinstall 하기
- pip uninstall python-telegram-bot telegram
- pip install python-telegram-bot
Error: AttributeError: module 'telegram' has no attribute 'Bot'
Hello, working in Python. When: 1. import telegram 2. bot = [telegram.Bot](https://telegram.Bot)(token="xxxxxxxxxxxxxxxxxxxxxxxxxxx") I get the...
www.reddit.com
카카오톡 API를 사용하다가 텔레그램을 사용하니 API 사용법도 어느 정도 익혀있을 뿐만 아니라,
카카오에 비해 너무 편리하게 API가 제공되고 있는 것 같아서,
다른 기능이 기능들도 잘 될 거라고 생각(메시지 전송 및 서버와 연동하는 과정에서)하여 미리 블로그 포스팅하였다.
사실 블로그 포스팅할 때 글을 대충 쓰고 싶지 않아서 글 하나를 쓰는데 시간을 많이 쓰기 때문에 공모주 알리미 만들 시간이 줄어드는데,
매사에 대충대충 하는 걸 지극히 싫어해서 열심히 쓰고 있다.
좀 바보 같지만, 누군가에게 꼭 도움이 돼서 다른 사람들 개발 블로그처럼 댓글이 많이 달리는 날까지 화이팅👊👊👊