Python으로 나에게 카카오톡 보내기

[ 오늘의 해보기 ]

카카오 API를 사용하여 Python으로 나에게 메시지 보내보기

1. 카카오 개발자 사이트 가입 후 어플리케이션 만들기

2. 어플리케이션 설정하기

  • 앱 키 정보에서 REST API키 메모. 나중에 토큰 발급받을 때 쓰인다. 다음 카카오 로그인 탭에 들어간다.

  • 카카오 로그인 on & Redirect URI 등록.

Redirect URI은 카카오 로그인 후 이동하게 되는 웹 사이트를 뜻한다. 나는 지금 무슨 어플리케이션을 만드는 게 아니라 그냥 네이버로 이동되게 해 놓았다. 지금 이걸 왜 하느냐? 앞서 말했던 토큰을 발급받으려 하는 것이다. 보여주는 게 빠를 것 같다.

  • 동의항목 설정하기
    귀찮아서 따로 스크린샷을 첨부하진 않겠는데, 카카오 이용자에게 동의를 구할 항목을 설정할 수 있다. 메시지를 보내야 하니까 메시지 항목을 설정해주자.

  • 토큰 발급받기
    https://kauth.kakao.com/oauth/authorize?response_type=code&client_id={REST_API_KEY}&redirect_uri={REDIRECT_URI}
    {REST_API_KEY} 부분에 아까 메모해둔 REST API키를, {REDIRECT_URI} 부분에 Redirect URI를 넣고 브라우저에서 url에 접속해보자. 크롬 브라우저의 시크릿 모드를 추천한다. 그럼 카카오 로그인 페이지로 이동하고, 로그인 하면 해당 앱에 대해서 정보를 제공하는 데에 동의하겠느냐는 페이지가 나온다. 동의해주면, Redirect URI로 이동하면서 토큰이 발급된다.

    무엇이 토큰이냐? 저기 저 주소창에 보이는 code= 뒤에 오는 ~~ 부분이 바로 그것이다. 토큰을 따로 복사해서 메모해두자.

3. 파이썬 작성하기

위의 토큰을 발급받는 것이나 REST API를 사용하여 메시지 보내기는 카카오 개발자 사이트의 문서 탭을 참고하자.

  • 먼저 json 파일에 토큰을 저장하는 코드
import requests

url = 'https://kauth.kakao.com/oauth/token'
rest_api_key = '어플리케이션 REST API 키'
redirect_uri = '어플리케이션 Redirect URI'
authorize_code = '발급받은 토큰'

data = {
    'grant_type':'authorization_code',
    'client_id':rest_api_key,
    'redirect_uri':redirect_uri,
    'code': authorize_code,
    }

response = requests.post(url, data=data)
tokens = response.json()
print(tokens)

# json 저장
import json

with open("kakao_code.json","w") as fp:
    json.dump(tokens, fp)

출처 : https://novice-engineers.tistory.com/9?category=908185

  • 토큰이 저장된 json을 불러와 메시지를 전송하는 코드
import requests
import json

with open("kakao_code.json","r") as fp:
    tokens = json.load(fp)

url="https://kapi.kakao.com/v2/api/talk/memo/default/send"

# kapi.kakao.com/v2/api/talk/memo/default/send 

headers={
    "Authorization" : "Bearer " + tokens["access_token"]
}

data={
    "template_object": json.dumps({
    	""object_type": "text",
        "text": "안녕? 나는 잉빈이야",
        "link": {
            "web_url" : "헤헤. text와 link 객체는 필수로 넣어야 하는 거구나? button_title과 buttons는 안 넣어도 상관 없지만 말이야!",
            "mobile_web_url" : "헤헤. text와 link 객체는 필수로 넣어야 하는 거구나? button_title과 buttons는 안 넣어도 상관 없지만 말이야!"
        },
        "button_title" : "헤헤"   
    })
}

response = requests.post(url, headers=headers, data=data)
response.status_code

출처 : https://novice-engineers.tistory.com/11?category=908185

나에게 보내기 POST는 data 부분의 object_type에 따라 피드, 리스트, 위치, 커머스, 텍스트를 보낼 수 있다. object_type에 따라서 json에 들어가는 객체 또한 다 다르고, 각 타입에 따라 필수로 요구하는 객체들도 다르다. 예시로 든 건 text 타입.

  • text 타입

  • feed 타입
  • list 타입
  • 위치 타입

  • commerce 타입


4. 문제들

그런데 여기서 해결하지 못한 문제들이 있다. 누가 왜 그런지, 어떻게 해야 하는 지 설명좀...

  1. 메시지만 딱 보내고 싶은데 link 객체를 필수로 넣어야 해서 딱 저 형태로밖에 보내지지가 않는다. 메시지 하나만 보내고 싶을 때는 어껗게 해야 하는가?
  2. 일단 여기에는 설몀하지 않은 플랫폼 설정을 하지 않으면 저 링크가 뜨지 않는다. 위의 사진은 web 플랫폼에 아무 주소나 넣은 결과이다.
  3. 저기 저 헤헤 버튼을 누르더라도 파이썬 코드에서의 "web_url"나 "mobile_web_url"는 무시되고 web 플랫폼 주소로 이동된다.

5. 가능한 건지는 모르겠지만 해 볼 수 있는 것들?

  1. 친구가 메시지 삭제하기 전에 나한테 보내놓기
  2. 텔레그램 봇처럼 카카오 봇 만들기. 뭐 매일 관심있는 뉴스 크롤링해서 나에게 보내놓기

좋은 웹페이지 즐겨찾기