Django

oauth() 수정

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이 나오면 정상적으로 실행된 것입니다.

 

  • 카카오톡에서 확인해보면 나 자신에게 메시지가 온 것을 확인할 수 있습니다.

 

 

 

 

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
KNUT X LIKE LION
현재 버전
선택 버전
graphittie 자세히 보기