파이썬으로 나에게 카카오톡 메시지를 보내주는 봇을 만들어보자.
1. Kakao Developers 가입
먼저 https://developers.kakao.com/에서 카카오 계정으로 로그인을 하고 개발자로 가입을 하자.
가입을 완료하면 시작하기 버튼을 누르자.

2. 애플리케이션 설정
[애플리케이션 추가하기]를 누르고 [앱 아이콘]과 [앱 이름], [사업자명]을 입력한다.
나중에 [앱 설정] > [일반] > [수정] 버튼을 눌러 수정 가능하니 너무 고민하진 말자.
[저장]버튼을 누르면 방금 만든 애플리케이션이 보인다. 애플리케이션을 누른다.

애플리케이션을 누르면 다음 창이 보이는데, 이때 REST API키를 나중에 사용할 것이다.
[앱 설정] > [앱 키]에서 언제든지 확인 및 재발급이 가능하다.

3. 카카오 로그인 설정
[제품 설정]의 [카카오 로그인]을 누른다.
[활성화 설정]을 ON으로 바꾸고 아래 [Redirect URI]을 등록한다.
이때 값은 기본으로 되어있는 https://example.com/oauth로 설정하자. (사용하는 다른 값을 설정해도 된다)

위의 과정을 마쳤으면 [제품 설정], [동의항목]을 누른 다음 "접근 권한"항목 에서 [카카오톡 메시지 전송]을 "선택 동의"로 설정한다.
동의 목적은 그냥 아무렇게나 적는다.

4. Code 값 가져오기
이제 아래 주소의 두 개의 <~~값>부분을 아까 발급받았던 REST API 키 값과 Redirect URI 값을 넣자. 물론 <> 괄호는 뺀다.
REST API 값은 [앱 설정] > [앱 키]에서 확인 가능하고 Redirect URI는 [제품 설정] > [카카오 로그인]의 Redirect URI 항목에서 확인 가능하다.
https://kauth.kakao.com/oauth/authorize?client_id=<REST API 키 값>&redirect_uri=<REDIRECT URI 값>&response_type=code위의 주소에 자신의 값을 넣고 브라우저에서 접속하면 아래 화면이 보인다.
만약 Redirect URI 주소를 https://example.com/oauth로 설정했으면 브라우저 주소 칸에 아래 주소가 보일 것이다.
https://example.com/oauth?code=<어쩌고>이제 code=뒷 부분의 <어쩌고>값을 복사하여 메모해두자. 메모하는 김에 REST API 값도 메모해두자.

5. 카카오톡 메시지 전송
잠시 점검을 하고 가자.
현재까지 준비되어있어야 하는 값들은 REST API, Redirect URI, code=의 뒷 부분이다.
적당한 곳에 파이썬 파일을 하나 만들고 아래 내용을 붙여넣자.
import requests
import json
params = {
'REST_API_key': 'REST_API 키 값을 여기에 넣으세요',
'Redirect_URI': 'Redirect_URI 값을 여기에 넣으세요',
'code': 'code= 뒤의 값을 여기에 넣으세요'
}
url = 'https://kauth.kakao.com/oauth/token'
client_id = params['REST_API_key']
redirect_uri = params['Redirect_URI']
code = params['code']
data = {
'grant_type':'authorization_code',
'client_id':client_id,
'redirect_uri':redirect_uri,
'code': code,
}
response = requests.post(url, data=data)
tokens = response.json()
access_token = tokens['access_token']
url="https://kapi.kakao.com/v2/api/talk/memo/default/send"
headers={
"Authorization" : "Bearer " + tokens["access_token"]
}
data = {
'object_type': 'text',
'text': '테스트입니다',
'link': {
'web_url': 'https://developers.kakao.com',
'mobile_web_url': 'https://developers.kakao.com'
},
'button_title': '바로 확인'
}
data = {'template_object': json.dumps(data)}
response = requests.post(url, headers=headers, data=data)
response.status_codeparams딕셔너리에 REST API, Redirect URI, code=의 뒷 부분을 써넣자 따옴표는 건드리면 안된다.
그러면 테스트입니다라는 카카오톡 메시지가 내 폰으로 전달될 것이다.
간혹 아래와 같은 오류가 발생한다.
Traceback (most recent call last):
File "파일 경로", line 25, in <module>
access_token = tokens['access_token']
~~~~~~^^^^^^^^^^^^^^^^
KeyError: 'access_token'근본적인 해결 방법은 찾지 못했지만 4번 과정을 다시 해서 code 뒤의 값을 갱신해주면 된다.
6. 오류 안 나는 다른 방법
값을 바꿔줄 필요가 없는 차선책을 찾았는데 이 방법은 카카오 로그인이 필요해서 REST API, Redirect URI값과 카카오 아이디 비밀번호가 필요하다.
계정 정보를 입력하는게 찜찜할 수도 있지만 이 코드는 항상 작동 가능하기 때문에 값을 다시 발급받는 과정이 필요없다.
나도 이 방법을 사용한다.
먼저 터미널에서 패키지를 하나 설치해야 한다.
Selenium은 웹 브라우저 자동화에 사용되는 파이썬 패키지로 웹 스크래핑이나 테스트, 크롤링 등의 작업에 사용하는 도구이다.
아래 명령어를 터미널에 입력해서 사용할 수 있다.
pip install seleniumSelenium을 설치했으면 아래 코드를 파이썬 파일을 만들고 붙여넣자.
import json
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Set up driver
options = webdriver.ChromeOptions()
options.add_argument("headless")
driver = webdriver.Chrome(options=options)
# Set up OAuth parameters
auth_params = {
'REST_API_key': 'REST_API 키 값을 여기에 넣으세요',
'Redirect_URI': 'Redirect_URI 값을 여기에 넣으세요',
'login_key': '카카오계정 아이디를 여기에 넣으세요',
'password': '카카오계정 비밀번호를 여기에 넣으세요'
}
url = f'https://kauth.kakao.com/oauth/authorize?\
client_id={auth_params["REST_API_key"]}&\
redirect_uri={auth_params["Redirect_URI"]}&response_type=code'
# Navigate to OAuth page and log in
driver.get(url)
driver.find_element(By.NAME, 'loginKey').send_keys(auth_params['login_key'])
driver.find_element(By.NAME, 'password').send_keys(auth_params['password'])
driver.find_element(By.CSS_SELECTOR, 'button.submit').click()
# Wait for page to load
wait = WebDriverWait(driver, 10)
wait.until(EC.text_to_be_present_in_element(
(By.CSS_SELECTOR, 'h1'), 'Example Domain'))
# Get access token
url = 'https://kauth.kakao.com/oauth/token'
client_id = auth_params['REST_API_key']
redirect_uri = auth_params['Redirect_URI']
code = driver.current_url[31:]
data = {
'grant_type':'authorization_code',
'client_id':client_id,
'redirect_uri':redirect_uri,
'code': code,
}
response = requests.post(url, data=data)
tokens = response.json()
access_token = tokens['access_token']
# Send message
url="https://kapi.kakao.com/v2/api/talk/memo/default/send"
headers={
"Authorization" : "Bearer " + access_token
}
data = {
'object_type': 'text',
'text': '보낼 메시지를 입력하세요',
'link': {
'web_url': 'https://developers.kakao.com',
'mobile_web_url': 'https://developers.kakao.com'
},
'button_title': '바로 확인'
}
data = {'template_object': json.dumps(data)}
response = requests.post(url, headers=headers, data=data)
response.status_code위 코드에서 auth_params딕셔너리의 설명에 맞게 REST API, Redirect URI, 카카오 아이디와 비밀번호를 넣으면 된다.
코드를 실행하면 마찬가지로 테스트입니다라는 카카오톡 메시지가 내 폰으로 전달될 것이다.
다만 나에게 보내는 메시지는 알림이 뜨지 않는다.
다음엔 메세지 내용도 필요한 정보를 자동으로 스크랩해서 보내도록 만들어보자.
'머신 러닝 > Python' 카테고리의 다른 글
| [Python] 예제를 통해 알아보는 파이썬 yield 활용법, 메모리 사용량 비교하기 (1) | 2023.04.28 |
|---|---|
| [ChatGPT] 파이썬으로 챗GPT 텔레그램 봇 직접 만들기 / ChatGPT Telegram Bot using Python (2) | 2023.03.28 |
| [Python] 예제를 통해 알아보는 파이썬 멀티프로세싱 / Multi-processing, pool (0) | 2023.02.19 |
| [Python] 파이썬 가상환경 구축 / Build a Virtual Environment (1) | 2023.02.15 |
| [Python] pip 설치하기, Homebrew 설치하기 / Installing pip (pip, pip3) (0) | 2023.02.13 |