본문 바로가기
파이썬

카카오 API 파이썬으로 사용하는 방법

by 진심블로그 2024. 3. 14.

안녕하세요. 오늘은 카카오 API 사용법을 알아봅니다.

 

카카오 API의 기초 사용 방법을 통해서, 이후 카카오 API 지도, 카카오 API 길 찾기,

카카오톡 API 등을 더 쉽게 이용할 수 있습니다.

 

- 본 글은 파이썬 중급이 이상이 읽어 보기에 적합합니다.

 

오늘 만들어 보는 코드의 결과를 미리 보겠습니다.

 

 

 

카카오 API를 이용해서 '이강인'이라는 검색어로 나무위키, 뉴스 등을 검색한 후

해당 내용을 html로 보기 좋게 정리하는 코드입니다.

 

오늘의 코드는 풀어쓰지 않고, 업무에서 쓰는 코드처럼 작성했습니다.

 

파이썬 중급이상의 경험이 있으면 이해 가능할 것으로 보입니다.

 

카카오 API의 기본은 검색 API입니다.

 

주로 다음넷의 검색결과를 우선해서 보여줍니다.

 

뭐, 당연하 거겠지만요.

 

import requests
api_url = 'https://dapi.kakao.com/v2/search/web'
rest_api_key = 'b50a...'
headres = {'Authorization': f'KakaoAK {rest_api_key}'}
query = '이강인'
params = {'query' : query, 'size':3, 'page':1, 'sort':'accuracy'}
r = requests.get(api_url, headers=headres, params=params)
print(f'requests status code : {r.status_code}')

 

우선 간단하게 테스트해봅니다.

위 코드 자체로 다 된 거긴 합니다,

 

rest_api_key 에는 본인의 키값을 입력합니다.

 

카카오에서는 request의 헤더값을 지정하게 해 두었습니다.

 

사실, 사용이 편리하기는 한데, 오래된 방식이기는 합니다.

 

보안 이슈도 있고, api에 래핑해 버리는 것이 코드도 깔끔하기는 한데 말이죠.

 

요즘 openAI등에서는 대부분 api의 인터페이스 부분에서 모두 래핑 하는 것처럼 

말입니다.

 

쿼리를 넣고, 3개의 결과값을 정확도에 맞추어서 가져와라..

뭐 이런 파라미터를 넣고 요청하면 끝입니다.

 

리턴코드는 다른 것들과 똑같습니다.

 

200이면 정상인 겁니다.

 

request의 response는 예상하듯이 json입니다.

 

다음과 같은 형식으로 나옵니다.

 

 

 

request에서 json으로 바로 반환해도 되고,

 

data_dict = r.json()
data_dict

 

 

위에처럼 딕셔너리로 만들어서 봐도 됩니다.

 

아무래도 데이터를 다루는 데는 딕셔너리가 편합니다.

 

이제 끝났습니다.

 

카카오 API를 통해서 쿼리를 던지고, 결과를 받는 코드는 위가 다입니다.

 

허전한 것 같아서, 결과로 받는 데이터를 가지고 html table을 만들어 보겠습니다.

 

다음의 코드는 실제 자동화에 사용되는 코드입니다.

 

필요한 만큼 수정을 하면 활용도가 높을 겁니다.

 

import pandas as pd
from datetime import datetime
df = pd.DataFrame(data_dict['documents'])

df['datetime'] = df['datetime'].apply(datetime_reformat)
df['title'] = df['title'].apply(title_reformat)
df['contents'] = df['contents'].apply(title_reformat)
for index, row in df.iterrows():
    df.at[index, 'contents'] = make_contents_to_href(row)

df = df[['title', 'contents', 'datetime']]
HTML(df.to_html(col_space=300, index = False, escape=False))

 

 

딕셔너리의 documents가 리스트로 구성되어 있습니다.

 

그 리스트는 개별 검색 결과를 가지고 있으니,

이걸 dataframe으로 만들면 딱입니다.

 

df = pd.DataFrame()으로 딕셔너리의 documents부분을 테이블로 만들고 나서,

 

각각의 열값들을 보기 좋게 수정했습니다.

 

최종적으로 제목, 내용, 등록시간의 구성으로 테이블을 만들고,

이를 html로 표현합니다.

 

보기 좋게 수정하는 각각의 함수들은 다음과 같습니다.

 

def datetime_reformat(time):
    time = time.split('.')[0]
    time = time.split(('T'))[0]+' '+time.split(('T'))[1]
    time = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')
    return time
def title_reformat(title):
    title = title.replace('<b>','')
    title = title.replace('</b>','')
    return title
def make_contents_to_href(row):
    return f'<a href="{row['url']}">{row['contents']}</a>'

 

 

datetime과 관련해서 복잡해 보이기도 하는데, 천천히 보면 이해하기 어렵지 않습니다.

 

pandas의 apply 함수가 이럴 때 참 유용합니다.

 

마지막에 make_contents_to_href()는 해당 값들을 클릭 가능한 html 아이템으로 만듭니다.

 

html을 보려면 다음의 라이브러리를 사용하세요.

 

from IPython.display import HTML