0. 사전준비
카카오톡 access token 발급받기
카카오 플랫폼 서비스에서 카카오톡, 카카오스토리와 같은 카카오 서비스 및 카카오 플랫폼 기술과 관련된 API를 제공합는데 이런 서비스를 이용하기 위해 인증 키를 발급 받아야 한다. 1. 가입
changsroad.tistory.com
카카오톡 api로 메세지 보내기 part 1.
오늘은 이전 시간에 발급받은 access token을 이용하여, 카카오톡 api를 이용해서 나에게 메세지를 보내보도록 하겠다. 우선 access token이 없거나 만료된 사람들은 아래 링크를 보고 다시 발급 받아오
changsroad.tistory.com
1. 팀 관리 추가
kakao developers에서 내 애플리케이션에 들어가 좌측 팀관리에서 메세지를 보내고자 하는 친구를 팀원으로 추가한다.
2. 팀원의 동의
나는 팀원(친구)들의 동의를 이미 받았기 때문에 위에 상태=활성, 관리버튼이 활성화되어있는데, 원래는 아닐것이다.
내가 보낸 초대메일을 친구들이 들어가서, 친구들이 카카오 디벨로퍼 사이트까지 가입을 완료하면 활성화된다.
3. 동의항목
저번글을 읽었다면, 미리 체크되었겠지만 안되어 있을 수도 있으니!
내 카카오 디벨로퍼에서 내 애플리케이션->동의항목에서 카카오 서비스 내 친구목록에 이용중 동의를 설정해준다.
4. 친구들의 API 테스트
API테스트가 필수인지는 모르겠으나, 아마 필수인 것 같다.
1. 도구 들어가기
내가 보내고자 하는 즉 방금전 초대메일을 받았고, 카카오톡 디벨로퍼에 가입된 친구들이 사이트에 들어와 맨위 도구를 클릭한다.
2. REST API 테스트
REST API 테스트를 누르고, 아래 인증앱 부분 오른쪽에 메뉴바를 누르고, 내 애플리케이션을 선택한다. (지금은 모두 친구들이 친구들 계정으로 진행하는 과정입니다.)
그리고 토큰발급을 누르면 체크하는 칸이 나오는데, profile_nickname, friends, talk_message 를 체크해준다.
이후 전송을 누르고, 밑에 응답에 아래와 같이 나온다면, 이제 친구들이 할건 끝났다.
3. 실전!
이제 저번 나에게 보내기와 유사한데, 딱 한가지만 추가해주면 된다.
우선 완성코드 이전에 끊어서 가보자.
1. 친구 목록 가져오기
url = "https://kapi.kakao.com/v1/api/talk/friends"
result = json.loads(requests.get(url, headers=kheaders).text)
friends_list = result.get("elements")
위의 코드를 실행하면, 자신의 친구 목록이 나온다. 이때 url파라미터를 수정하면 뭐 친구 목록 시작시점, 친구 최대 수, 정렬순서 등을 설정할 수 있다하니 참고하길 바란다.
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
2. 친구 id 가져오기
friend_id = friends_list[0].get("uuid")
위는 첫번째 친구의 id를 가져오는 것이다. 우리는 이 uuid를 가지고 메세지를 보내게 된다.
3. 실전!
weather_list=["test","test","test"]
kcreds = {"access_token" : access_token}
kheaders = {"Authorization": "Bearer " + kcreds.get('access_token')}
url ="https://kapi.kakao.com/v1/api/talk/friends/message/default/send"
weather_url = "https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=용인 동백 날씨"
text = f"""\
# 날씨 정보
기온 : {weather_list[0]}
습도 : {weather_list[1]}
바람 : {weather_list[2]}
"""
template = {"object_type": "text","text": text,
"link": {"web_url": weather_url,"mobile_web_url": weather_url},
"button_title": "날씨 상세보기"}
data= {'receiver_uuids': '["{}"]'.format(friend_id), "template_object" : json.dumps(template)}
res = requests.post(url_friend, data=data, headers=kheaders)
if res.json().get('result_code') == 0: print("친구들에게 전송 성공")
else: print("친구들에게 전송 실패. error: " + str(res.json()))
저번(나에게 보내기)과 유사한데, 살짝 다르니 주의해야한다.
우선 url이 친구에게 보내기이고, template 저번처럼 자신이 원하는데로 수정해도되는데,
data부분에 맨 앞에 새로운 인자가 추가된 것을 볼 수 있다! 저 양식이 중요하니 건들지말자 .
참고로 friend_id는 위에서 구한 친구의 uuid 변수이다.
-->주의할 점이 친구 uuid 를 String 리스트로 전달해야 한다. 한명한테 보낼 때는 오류가 보통 안발생하는데, 여러명한테 보낼 때는 오류가 날 수도 있으니, 위의 양식이 아니라 아래 full code에 있는 것처럼 json 형식으로 보내줘야한다...
이게 예시에 잘 설명이 안되어있어서 '랑 "떄문에 안되기도 하고 아는 문자열 형식을 다 넣어봤다...
암튼 아래 코드처럼 하면, 친구 여러명이든 한명이든 모두 오류가 안나고 제대로 보내질 것이다!!
4. FULL CODE
암튼 이렇게 저번시간 나에게 보내기와 친구에게 보내기를 성공했고,
내가 사용하기 편하도록 함수화 시키고 조금 간단하게 만들었다. 잘 사용하시거나 오류가 있다면 댓글로 남겨주세여!!
import json
import requests
from api_token_list import access_token
def get_friend_info(kheaders):
url = "https://kapi.kakao.com/v1/api/talk/friends?limit=3&order=asc" #친구 목록 가져오기
result = json.loads(requests.get(url, headers=kheaders).text)
friends_list = result.get("elements")
freind_names=[i.get('profile_nickname') for i in friends_list]
friend_ids=[i.get('uuid') for i in friends_list]
return freind_names,friend_ids
weather_list=["test","test","test"]
kcreds = {"access_token" : access_token}
kheaders = {"Authorization": "Bearer " + kcreds.get('access_token')}
url_mine = "https://kapi.kakao.com/v2/api/talk/memo/default/send"
url_friend ="https://kapi.kakao.com/v1/api/talk/friends/message/default/send"
weather_url = "https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=용인 동백 날씨"
friend_names,friend_ids = get_friend_info(kheaders)
# 메세지 내용
text = f"""\
# 동백 날씨 정보
기온 : {weather_list[0]}
습도 : {weather_list[1]}
바람 : {weather_list[2]}
"""
template = {"object_type": "text","text": text,
"link": {"web_url": weather_url,"mobile_web_url": weather_url},
"button_title": "날씨 상세보기"}
data_mine = {"template_object" : json.dumps(template)}
res = requests.post(url_mine, data=data_mine, headers=kheaders)
if res.json().get('result_code') == 0: print('나에게 전송 성공.')
else: print('나에게 전송 실패. Error : ' + str(res.json()))
data_friend = {'receiver_uuids': json.dumps(friend_ids) , "template_object" : json.dumps(template)}
res2 = requests.post(url_friend, data=data_friend, headers=kheaders)
'알쓸신잡' 카테고리의 다른 글
[Git] 오류 모음 (0) | 2023.11.02 |
---|---|
Repository 하위 폴더를 새로운 repository로 이동 (1) | 2023.11.02 |
카카오톡 api로 나에게 메세지 보내기 (1) | 2023.10.27 |
SyntaxError: Non-UTF-8 code starting with '\xec' in file (0) | 2023.10.27 |
카카오톡 access token 발급받기 (0) | 2023.10.26 |