oauth() 수정
- curl에서 성공하였으니 이제 oauth()에서 코드를 수정하여 메시지가 보내질 수 있도록 해봅시다.
- 우리는 이 데이터를 요청하기 위해 'requests' 패키지의 request() 함수를 이용할 것입니다.
- request() 함수는 다음과 같은 사항들을 요구합니다.
- 1) method
- 2) uri
- 3) 기타 인자
- 문서에 적혀있는대로 함수를 구성하면 됩니다.
- method : 'POST'
- uri : 'https://kapi.kakao.com/v2/api/talk/memo/default/send'
- 기타 인자 : curl에서 유추해보았을 때, -H는 'header'입니다. -d는 'data'입니다.
- 이를 토대로 구성하기 위해서는 'data' 부분(template_object)을 수정하여 줍시다.
template_dict_data = str({ "object_type": "feed", "content": { "title": "디저트 사진", "description": "아메리카노, 빵, 케익", "image_url": "http://mud-kage.kakao.co.kr/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg", "image_width": 640, "image_height": 640, "link": { "web_url": "http://www.daum.net", "mobile_web_url": "http://m.daum.net", "android_execution_params": "contentId=100", "ios_execution_params": "contentId=100" } }, "social": { "like_count": 100, "comment_count": 200, "shared_count": 300, "view_count": 400, "subscriber_count": 500 }, "buttons": [ { "title": "웹으로 이동", "link": { "web_url": "http://www.daum.net", "mobile_web_url": "http://m.daum.net" } }, { "title": "앱으로 이동", "link": { "android_execution_params": "contentId=100", "ios_execution_params": "contentId=100" } } ] })
data -> JSON
- 앞에서 생성한 'data'는 JSON 형태와 유사한 것이지 똑같은 것은 아닙니다.
- 또한 이 형태를 URI상으로 요청할 수 없으므로 JSON 데이터 형태로 변환하는 작업이 필요합니다.
- 이를 위해 'json'을 import합니다.
import json
- 그리고 다음과 같이 json.dumps() 함수를 사용하면 딕셔너리를 JSON 데이터 형태로 바꾸어 줍니다.
json.dumps(template_dict_data)
- 이제 최종적으로 'template_object' 변수와 함께 보내야 되므로 문자열을 구성합니다.
마무리 작업
- 데이터에 대한 작업은 끝냈으니, 요청할 uri 변수와 'header'만 구성하면 됩니다.
- 먼저 요청할 uri 변수를 생성합니다.
kakao_to_me_uri = 'https://kapi.kakao.com/v2/api/talk/memo/default/send'
- header를 구성합니다.
- 위에서 얻어온 'access_token'과 함께 구성합니다.
- 'Content-Type'은 여러 종류가 있지만 지금은 'template_object='와 같이 '키=값'의 형태로 전달해야 되고, POST로 전송하므로 'application/x-www-form-urlencoded' 타입을 사용합니다.
- POST로 데이터를 전송할 때 이전에 'multipart/form-data'를 사용한 적이 있었는데, 이는 파일의 형태가 포함될 경우에 사용합니다.
headers = { 'Content-Type': "application/x-www-form-urlencoded", 'Authorization': "Bearer " + access_token, }
- 이제 최종적으로 request() 함수를 사용합니다.
마지막에는 응답을 JSON 형태로 받아서 제대로 응답이 왔는지 확인합니다. - 153번 라인에서는 'template_json_data'는 print()로 출력해보면 ""로 감싸고 있으므로 이를 없애줍니다.
- 154번 라인에서는 'template_json_data'를 JSON 데이터 형태로 인식시키기 위한 작업입니다.
JSON 데이터는 키 값이 ''로 감싸고 있는 것이 아니라 ""로 감싸고 있기 때문입니다.
template_json_data = template_json_data.replace("\"", "") template_json_data = template_json_data.replace("'", "\"") response = requests.request(method="POST", url=kakao_to_me_uri, data=template_json_data, headers=headers) print(response.json())
적용 확인
- 서버를 구동하고 적용되었는지 확인합니다.
- 'result_code' 값이 0이 나오면 정상적으로 실행된 것입니다.
- 카카오톡에서 확인해보면 나 자신에게 메시지가 온 것을 확인할 수 있습니다.