티스토리 뷰
카카오api를 이용한 주소 및 위경도 추출하기¶
- api란 무엇일까?¶
API를 본격적으로 알아보기 전에 우선 점심을 먹으로 레스토랑에 갔다고 가정하자. 레스토랑에서 점원은 손님에게 메뉴를 알려주고, 주방에 주문받은 요리를 요청한다. 그다음 주방에서 완성된 요리를 손님한테 전달해준다. 여기서 API는 점원과 같은 역할을 한다. API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달한다. 쉽게 말해, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체로 볼 수 있다.
- api의 역할은?¶
- API는 서버와 데이터베이스에 대한 출입구 역할을 한다. 데이터베이스에는 모든 정보들이 저장된다. 모든 사람들이 이 데이터베이스에 접근할 수 있으면 안된다. API는 이를 방지하기 위해 여러분이 가진 서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여해준다.
- API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다. 여기서 애플리케이션이란 우리가 흔히 알고 있는 스마트폰 어플이나 프로그램을 말한다. API는 애플리케이션과 기기가 데이터를 원활히 주고받을 수 있도록 돕는 역할을 한다.
- API는 모든 접속을 표준화한다. API는 모든 접속을 표준화하기 때문에 기계 / 운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있다. 쉽게 말해, API는 범용 플러그처럼 작동한다고 볼 수 있다
1. api 세팅하기¶
import json
import requests
먼저 필요한 모듈을 import 한다. requests는 HTTP를 호출할 때 사용하는 라이브러리이다. JSON은 Key-value를 양식을 가지는 텍스트 파일로 인터넷 상의 서버-클라이언트의 데이터 교환에 많이 사용되고 있다. 최근엔 웹서버와 클라이언트 간의 통신 및 프로그램과 프로그램 사이의 데이터 표현 및 교환하는데 사용된다.
api_key = "발급받은 api_key 입력"
카카오 Rest api 키를 받아 위처럼 입력해준다.
2. 지리정보 api를 사용해 주소에서 위경도 추출하기¶
이제 GET()함수를 통해 다음과 같이 api를 호출하자. 주소는 남산을 선택했으며 남산의 주소를 검색 결과 “서울 중구 회현동1가”로 나오게 되어 이곳의 위경도를 추출하려고 한다. api문서에서는 다음에 위치 한다.
def addr_to_lat_lon(addr):
url = 'https://dapi.kakao.com/v2/local/search/address.json?query={address}'.format(address=addr)
headers = {"Authorization": "KakaoAK " + api_key}
result = json.loads(str(requests.get(url, headers=headers).text))
match_first = result['documents'][0]['address']
return float(match_first['x']), float(match_first['y'])
이렇게 만든 addr_to_lat_lon 함수를 이용해 남산의 위경도를 추출하자.
addr_to_lat_lon('서울 중구 회현동1가')
(126.981204133005, 37.5555892070291)
3. 지리정보 api를 사용해 위경도에서 주소 추출하기¶
이번엔 반대로 위경도를 이용해 주소를 추출해보자. 앞서 남산의 위경도를 구했으니 이를 그대로 이용해보자.
def lat_lon_to_addr(lon,lat):
url = 'https://dapi.kakao.com/v2/local/geo/coord2regioncode.json?x={longitude}&y={latitude}'.format(longitude=lon,latitude=lat)
headers = {"Authorization": "KakaoAK " + api_key}
result = json.loads(str(requests.get(url, headers=headers).text))
match_first = result['documents'][0]['address_name']
return str(match_first)
이렇게 만든 lat_lon_to_addr 함수를 이용해 남산의 위경도를 추출하면 다음과 같이 주소가 출력된다.
lat_lon_to_addr(126.981204133005, 37.5555892070291)
'서울특별시 중구 회현동1가'