카카오 API를 사용하기 위한 오픈소스 파이썬 라이브러리


PyKakao

PyKakao 라이브러리를 사용하면 Kakao Developers에서 제공하는 여러 종류의 카카오 API를 파이썬으로 쉽게 사용할 수 있습니다. 예를 들어, Daum 검색 API를 이용해서 웹에서 정보를 검색할 수 있고, 메시지 API를 사용해서 카카오톡 메시지를 전송할 수 있습니다. 또한, 로컬 API를 통해 주변 정보를 조회할 수 있고, KoGPT APIKarlo API를 이용해 자연어 처리를 하거나 생성형 인공지능으로 새로운 이미지를 만들어 볼 수도 있습니다.


PyKakao 설치하기

  1. 운영체제(OS)에 따라 아래 중 하나를 선택합니다.
  • Windows: CMD(명령 프롬프트) 실행
  • Mac: Terminal(터미널) 실행
  1. 아래 Shell 명령어를 입력 후 실행합니다.
pip install PyKakao --upgrade


REST API 키 발급받기

PyKakao 라이브러리로 카카오 API를 사용하기 위해서는 Kakao Developers에 가입해야 합니다. 가입 후 로그인한 상태에서 상단 메뉴의 내 애플리케이션을 선택합니다. ‘애플리케이션 추가하기’를 눌러 팝업창이 뜨면 ‘앱 이름’, ‘사업자명’을 입력하고, 운영정책에 동의 후 ‘저장’을 선택합니다. 추가한 애플리케이션을 선택하면 ‘앱 키’ 아래에 ‘REST API 키‘가 생성된 것을 확인할 수 있습니다.


카카오 로그인 관련 설정하기

  1. Kakao Developers에 접속
  2. 내 애플리케이션 선택 후 위에서 생성한 애플리케이션 선택
  3. 내비게이션 메뉴에서 카카오 로그인 클릭 후 활성화 설정상태 버튼(OFF)을 클릭
  4. 팝업 창에서 활성화 버튼 클릭
  5. 카카오 로그인 화면 하단의 Redirect URI 등록 버튼 클릭
  6. 팝업 창에서 Redirect URI 항목에 로컬 주소인 ‘https://localhost:5000’ 입력 후 저장 버튼 클릭
  7. 내비게이션 메뉴에서 카카오 로그인 하위의 동의항목을 클릭
  8. 페이지 하단의 접근권한 이동 후 카카오톡 메시지 전송의 설정 클릭
  9. 동의 단계를 이용 중 동의로 선택하고 동의 목적 작성 후 저장 버튼 클릭


카카오톡 메시지 API 사용하기

메시지 API는 사용자가 카카오톡 친구에게 카카오톡 메시지를 보내는 기능을 제공합니다. PyKakao의 최신 버전에서는 ‘나에게 보내기’와 ‘친구에게 보내기’ 기능을 이용할 수 있습니다.

자세히 보기

API 사용 설정하기

메시지 API를 사용하기 전에 설정해야 하는 사항들에 대해 알아보겠습니다.

카카오 메시지 API 클래스 임포트하기

PyKakao 라이브러리의 Message 클래스를 임포트합니다. Message의 인자로 위에서 발급받은 ‘REST API 키‘를 입력하여 API 인스턴스를 생성합니다.

from PyKakao import Message
API = Message(service_key = "REST API 키")


카카오 인증코드 발급 URL 생성

카카오 메시지 API를 이용하려면 액세스 토큰이 필요합니다. 액세스 토큰을 생성하려면 인증코드가 필요합니다. 아래와 같이 API.get_url_for_generating_code 메서드를 실행하여 얻은 카카오 인증코드 발급 URL을 출력합니다. 웹 브라우저를 이용해 출력된 URL에 접속합니다.

auth_url = API.get_url_for_generating_code()
print(auth_url)


카카오 인증코드 발급 URL 접속 후 리다이렉트된 URL

웹 브라우저에서 카카오 인증코드 발급 URL에 접속하면 페이지가 리다이렉트됩니다. 이 때, 리다이렉트된 주소를 웹 브라우저의 주소창에서 복사합니다. 복사한 리다이렉트된 URL을 url에 할당합니다.

url = ""


위 URL로 액세스 토큰 추출

API.get_access_token_by_redirected_url 메서드의 인자로 위 url을 입력하면 액세스 코드를 얻을 수 있습니다. 액세스 코드의 값을 아래와 같이 access_token에 할당합니다.

access_token = API.get_access_token_by_redirected_url(url)


액세스 토큰 설정

위에서 추출한 액세스 코드를 아래와 같이 설정합니다.

API.set_access_token(access_token)


1. 나에게 보내기 API 사용하기

자세히 보기

피드 메시지 전송

# 메시지 유형 - 피드
message_type = "feed"

# 파라미터
content = {
            "title": "오늘의 디저트",
            "description": "아메리카노, 빵, 케익",
            "image_url": "https://mud-kage.kakao.com/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"
            }
        }

item_content = {
            "profile_text" :"Kakao",
            "profile_image_url" :"https://mud-kage.kakao.com/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
            "title_image_url" : "https://mud-kage.kakao.com/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
            "title_image_text" :"Cheese cake",
            "title_image_category" : "Cake",
            "items" : [
                {
                    "item" :"Cake1",
                    "item_op" : "1000원"
                },
                {
                    "item" :"Cake2",
                    "item_op" : "2000원"
                },
                {
                    "item" :"Cake3",
                    "item_op" : "3000원"
                },
                {
                    "item" :"Cake4",
                    "item_op" : "4000원"
                },
                {
                    "item" :"Cake5",
                    "item_op" : "5000원"
                }
            ],
            "sum" :"Total",
            "sum_op" : "15000원"
        }

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"
                }
            }
        ]

API.send_message_to_me(
    message_type=message_type,
    content=content, 
    item_content=item_content, 
    social=social, 
    buttons=buttons
    )

PNG


리스트 메시지 전송

# 메시지 유형 - 리스트
message_type = "list"

# 파라미터
header_title = "WEEKELY MAGAZINE"
header_link = {
            "web_url": "http://www.daum.net",
            "mobile_web_url": "http://m.daum.net",
            "android_execution_params": "main",
            "ios_execution_params": "main"
        }
contents = [
            {
                "title": "자전거 라이더를 위한 공간",
                "description": "매거진",
                "image_url": "https://mud-kage.kakao.com/dn/QNvGY/btqfD0SKT9m/k4KUlb1m0dKPHxGV8WbIK1/openlink_640x640s.jpg",
                "image_width": 640,
                "image_height": 640,
                "link": {
                    "web_url": "http://www.daum.net/contents/1",
                    "mobile_web_url": "http://m.daum.net/contents/1",
                    "android_execution_params": "/contents/1",
                    "ios_execution_params": "/contents/1"
                }
            },
            {
                "title": "비쥬얼이 끝내주는 오레오 카푸치노",
                "description": "매거진",
                "image_url": "https://mud-kage.kakao.com/dn/boVWEm/btqfFGlOpJB/mKsq9z6U2Xpms3NztZgiD1/openlink_640x640s.jpg",
                "image_width": 640,
                "image_height": 640,
                "link": {
                    "web_url": "http://www.daum.net/contents/2",
                    "mobile_web_url": "http://m.daum.net/contents/2",
                    "android_execution_params": "/contents/2",
                    "ios_execution_params": "/contents/2"
                }
            },
            {
                "title": "감성이 가득한 분위기",
                "description": "매거진",
                "image_url": "https://mud-kage.kakao.com/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
                "image_width": 640,
                "image_height": 640,
                "link": {
                    "web_url": "http://www.daum.net/contents/3",
                    "mobile_web_url": "http://m.daum.net/contents/3",
                    "android_execution_params": "/contents/3",
                    "ios_execution_params": "/contents/3"
                }
            }
        ]
buttons = [
            {
                "title": "웹으로 이동",
                "link": {
                    "web_url": "http://www.daum.net",
                    "mobile_web_url": "http://m.daum.net"
                }
            },
            {
                "title": "앱으로 이동",
                "link": {
                    "android_execution_params": "main",
                    "ios_execution_params": "main"
                }
            }
        ]


API.send_message_to_me(
    message_type=message_type,
    header_title=header_title, 
    header_link=header_link, 
    contents=contents, 
    buttons=buttons,
    )

PNG


위치 메시지 전송

# 메시지 유형 - 위치
message_type = "location"

# 파라미터
address = "경기 성남시 분당구 판교역로 235 에이치스퀘어 N동 7층"
address_title = "카카오 판교오피스"
content = {
                "title": "카카오 판교오피스",
                "description": "카카오 판교오피스 위치입니다.",
                "image_url": "https://mud-kage.kakao.com/dn/drTdbB/bWYf06POFPf/owUHIt7K7NoGD0hrzFLeW0/kakaolink40_original.png",
                "image_width": 800,
                "image_height": 800,
                "link": {
                    "web_url": "https://developers.kakao.com",
                    "mobile_web_url": "https://developers.kakao.com/mobile",
                    "android_execution_params": "platform=android",
                    "ios_execution_params": "platform=ios"
                }
            }
buttons = [
                {
                    "title": "웹으로 보기",
                    "link": {
                        "web_url": "https://developers.kakao.com",
                        "mobile_web_url": "https://developers.kakao.com/mobile"
                    }
                }
            ]

API.send_message_to_me(
    message_type=message_type,
    address=address, 
    address_title=address_title, 
    content=content, 
    buttons=buttons,
    )

PNG


커머스 메시지 전송

# 메시지 유형 - 커머스
message_type = "commerce"

# 파라미터
content = {
            "title": "Ivory long dress (4 Color)",
            "image_url": "https://mud-kage.kakao.com/dn/RY8ZN/btqgOGzITp3/uCM1x2xu7GNfr7NS9QvEs0/kakaolink40_original.png",
            "image_width": 640,
            "image_height": 640,
            "link": {
                "web_url": "https://style.kakao.com/main/women/contentId=100",
                "mobile_web_url": "https://style.kakao.com/main/women/contentId=100",
                "android_execution_params": "contentId=100",
                "ios_execution_params": "contentId=100"
            }
        }

commerce = {
            "regular_price": 208800,
            "discount_price": 146160,
            "discount_rate": 30
        }

buttons = [
            {
                "title": "구매하기",
                "link": {
                    "web_url": "https://style.kakao.com/main/women/contentId=100/buy",
                    "mobile_web_url": "https://style.kakao.com/main/women/contentId=100/buy",
                    "android_execution_params": "contentId=100&buy=true",
                    "ios_execution_params": "contentId=100&buy=true"
                }
            },
            {
                "title": "공유하기",
                "link": {
                    "web_url": "https://style.kakao.com/main/women/contentId=100/share",
                    "mobile_web_url": "https://style.kakao.com/main/women/contentId=100/share",
                    "android_execution_params": "contentId=100&share=true",
                    "ios_execution_params": "contentId=100&share=true"
                }
            }
        ]

API.send_message_to_me(
    message_type=message_type,
    content=content, 
    commerce=commerce, 
    buttons=buttons,
    )

PNG


텍스트 메시지 전송

# 메시지 유형 - 텍스트
message_type = "text"

# 파라미터
text = "텍스트 영역입니다. 최대 200자 표시 가능합니다."
link = {
            "web_url": "https://developers.kakao.com",
            "mobile_web_url": "https://developers.kakao.com"
        }
button_title = "바로 확인"

API.send_message_to_me(
    message_type=message_type, 
    text=text,
    link=link,
    button_title=button_title,
)

PNG


2. 친구에게 보내기 API 사용하기

자세히 보기

피드 메시지 전송

# 메시지 유형 - 피드
message_type = "feed"

# UUID 목록
receiver_uuids = [
    "수신자 UUID",
]

# 파라미터
content = {
            "title": "오늘의 디저트",
            "description": "아메리카노, 빵, 케익",
            "image_url": "https://mud-kage.kakao.com/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"
            }
        }

item_content = {
            "profile_text" :"Kakao",
            "profile_image_url" :"https://mud-kage.kakao.com/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
            "title_image_url" : "https://mud-kage.kakao.com/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
            "title_image_text" :"Cheese cake",
            "title_image_category" : "Cake",
            "items" : [
                {
                    "item" :"Cake1",
                    "item_op" : "1000원"
                },
                {
                    "item" :"Cake2",
                    "item_op" : "2000원"
                },
                {
                    "item" :"Cake3",
                    "item_op" : "3000원"
                },
                {
                    "item" :"Cake4",
                    "item_op" : "4000원"
                },
                {
                    "item" :"Cake5",
                    "item_op" : "5000원"
                }
            ],
            "sum" :"Total",
            "sum_op" : "15000원"
        }

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"
                }
            }
        ]

API.send_message_to_friend(
    message_type=message_type,
    receiver_uuids=receiver_uuids,
    content=content, 
    item_content=item_content, 
    social=social, 
    buttons=buttons
    )

PNG


리스트 메시지 전송

# 메시지 유형 - 리스트
message_type = "list"

# UUID 목록
receiver_uuids = [
    "수신자 UUID",
]

# 파라미터
header_title = "WEEKELY MAGAZINE"
header_link = {
            "web_url": "http://www.daum.net",
            "mobile_web_url": "http://m.daum.net",
            "android_execution_params": "main",
            "ios_execution_params": "main"
        }
contents = [
            {
                "title": "자전거 라이더를 위한 공간",
                "description": "매거진",
                "image_url": "https://mud-kage.kakao.com/dn/QNvGY/btqfD0SKT9m/k4KUlb1m0dKPHxGV8WbIK1/openlink_640x640s.jpg",
                "image_width": 640,
                "image_height": 640,
                "link": {
                    "web_url": "http://www.daum.net/contents/1",
                    "mobile_web_url": "http://m.daum.net/contents/1",
                    "android_execution_params": "/contents/1",
                    "ios_execution_params": "/contents/1"
                }
            },
            {
                "title": "비쥬얼이 끝내주는 오레오 카푸치노",
                "description": "매거진",
                "image_url": "https://mud-kage.kakao.com/dn/boVWEm/btqfFGlOpJB/mKsq9z6U2Xpms3NztZgiD1/openlink_640x640s.jpg",
                "image_width": 640,
                "image_height": 640,
                "link": {
                    "web_url": "http://www.daum.net/contents/2",
                    "mobile_web_url": "http://m.daum.net/contents/2",
                    "android_execution_params": "/contents/2",
                    "ios_execution_params": "/contents/2"
                }
            },
            {
                "title": "감성이 가득한 분위기",
                "description": "매거진",
                "image_url": "https://mud-kage.kakao.com/dn/NTmhS/btqfEUdFAUf/FjKzkZsnoeE4o19klTOVI1/openlink_640x640s.jpg",
                "image_width": 640,
                "image_height": 640,
                "link": {
                    "web_url": "http://www.daum.net/contents/3",
                    "mobile_web_url": "http://m.daum.net/contents/3",
                    "android_execution_params": "/contents/3",
                    "ios_execution_params": "/contents/3"
                }
            }
        ]
buttons = [
            {
                "title": "웹으로 이동",
                "link": {
                    "web_url": "http://www.daum.net",
                    "mobile_web_url": "http://m.daum.net"
                }
            },
            {
                "title": "앱으로 이동",
                "link": {
                    "android_execution_params": "main",
                    "ios_execution_params": "main"
                }
            }
        ]


API.send_message_to_friend(
    message_type=message_type,
    receiver_uuids=receiver_uuids,
    header_title=header_title, 
    header_link=header_link, 
    contents=contents, 
    buttons=buttons,
    )

PNG


위치 메시지 전송

# 메시지 유형 - 위치
message_type = "location"

# UUID 목록
receiver_uuids = [
    "수신자 UUID",
]

# 파라미터
address = "경기 성남시 분당구 판교역로 235 에이치스퀘어 N동 7층"
address_title = "카카오 판교오피스"
content = {
                "title": "카카오 판교오피스",
                "description": "카카오 판교오피스 위치입니다.",
                "image_url": "https://mud-kage.kakao.com/dn/drTdbB/bWYf06POFPf/owUHIt7K7NoGD0hrzFLeW0/kakaolink40_original.png",
                "image_width": 800,
                "image_height": 800,
                "link": {
                    "web_url": "https://developers.kakao.com",
                    "mobile_web_url": "https://developers.kakao.com/mobile",
                    "android_execution_params": "platform=android",
                    "ios_execution_params": "platform=ios"
                }
            }
buttons = [
                {
                    "title": "웹으로 보기",
                    "link": {
                        "web_url": "https://developers.kakao.com",
                        "mobile_web_url": "https://developers.kakao.com/mobile"
                    }
                }
            ]

API.send_message_to_friend(
    message_type=message_type,
    receiver_uuids=receiver_uuids,
    address=address, 
    address_title=address_title, 
    content=content, 
    buttons=buttons,
    )

PNG


커머스 메시지 전송

# 메시지 유형 - 커머스
message_type = "commerce"

# UUID 목록
receiver_uuids = [
    "수신자 UUID",
]

# 파라미터
content = {
            "title": "Ivory long dress (4 Color)",
            "image_url": "https://mud-kage.kakao.com/dn/RY8ZN/btqgOGzITp3/uCM1x2xu7GNfr7NS9QvEs0/kakaolink40_original.png",
            "image_width": 640,
            "image_height": 640,
            "link": {
                "web_url": "https://style.kakao.com/main/women/contentId=100",
                "mobile_web_url": "https://style.kakao.com/main/women/contentId=100",
                "android_execution_params": "contentId=100",
                "ios_execution_params": "contentId=100"
            }
        }

commerce = {
            "regular_price": 208800,
            "discount_price": 146160,
            "discount_rate": 30
        }

buttons = [
            {
                "title": "구매하기",
                "link": {
                    "web_url": "https://style.kakao.com/main/women/contentId=100/buy",
                    "mobile_web_url": "https://style.kakao.com/main/women/contentId=100/buy",
                    "android_execution_params": "contentId=100&buy=true",
                    "ios_execution_params": "contentId=100&buy=true"
                }
            },
            {
                "title": "공유하기",
                "link": {
                    "web_url": "https://style.kakao.com/main/women/contentId=100/share",
                    "mobile_web_url": "https://style.kakao.com/main/women/contentId=100/share",
                    "android_execution_params": "contentId=100&share=true",
                    "ios_execution_params": "contentId=100&share=true"
                }
            }
        ]

API.send_message_to_friend(
    message_type=message_type,
    receiver_uuids=receiver_uuids,
    content=content, 
    commerce=commerce, 
    buttons=buttons,
    )

PNG


텍스트 메시지 전송

# 메시지 유형 - 텍스트
message_type = "text"

# UUID 목록
receiver_uuids = [
    "수신자 UUID",
]

# 파라미터
text = "텍스트 영역입니다. 최대 200자 표시 가능합니다."
link = {
            "web_url": "https://developers.kakao.com",
            "mobile_web_url": "https://developers.kakao.com"
        }
button_title = "바로 확인"

API.send_message_to_friend(
    message_type=message_type, 
    receiver_uuids=receiver_uuids,
    text=text,
    link=link,
    button_title=button_title,
)

PNG


참고

태그:

카테고리:

업데이트:

댓글남기기