카카오 로컬 API

카카오 로컬 API 문서에 따르면 카카오 로컬(local) API는 키워드로 특정 장소 정보를 조회하거나, 좌표를 주소 또는 행정구역으로 변환하는 등 장소에 대한 정보를 제공한다. 특정 카테고리로 장소를 검색하는 등 폭넓은 활용이 가능하며, 지번 주소와 도로명 주소 체계를 모두 지원한다. 구체적인 기능 목록은 다음과 같다.

기능 목록

No Name Description
01 주소 검색 특정 주소에 해당하는 장소 정보의 좌표 검색
02 좌표-행정구역정보 변환 좌표 값을 행정동, 법정동으로 변환
맛집, 날씨 등 위치에 맞는 정보 제공 서비스에 활용
03 좌표-주소 변환 특정 좌표의 지번 주소 및 도로명 주소 제공
04 좌표계 변환 특정 체계의 좌표 값을 다른 체계의 좌표 값으로 변환
지원되는 좌표계: WGS84, WCONGNAMUL, CONGNAMUL, WTM, TM, KTM, UTM, BESSEL, WKTM, WUTM
05 키워드 검색 키워드로 관련 장소 및 상세 정보 검색
각 장소 상세 페이지 URL 제공
06 카테고리 검색 카테고리로 관련 장소 및 상세 정보 검색
각 장소 상세 페이지 URL 제공

파이썬으로 카카오 로컬 API 서비스를 쉽게 이용할 수 있도록 하기 위해 간단한 컨트롤러를 만들어보자. 먼저, API를 사용하려면 Kakao Developers - 내 애플리케이션에서 애플리케이션을 추가해야 한다. 여기에서는 애플리케이션이 추가되었다고 가정하고 진행한다. jsonrequests 모듈을 import하고 간단한 컨트롤러 클래스를 만들어보겠다. 각 메서드의 구체적인 동작 방식은 개발 가이드를 참조하였다.

참고

PyKakao는 kakao developers에서 제공하는 로컬(Local) API를 이용할 수 있는 Python Client이다. PyKakao를 설치한 경우 아래와 같이 직접 API 클래스를 구현하지 않아도 된다.


KakaoLocalAPI 클래스 생성

Kakao Developers 에서 발급받은 REST API 키로 클래스를 초기화할 수 있도록 설정한다.

import json
import requests

class KakaoLocalAPI:
    """
    Kakao Local API 컨트롤러
    """

    def __init__(self, rest_api_key):
        """
        Rest API키 초기화 및 기능 별 URL 설정
        """

        # REST API 키 설정
        self.rest_api_key = rest_api_key
        self.headers = {"Authorization": "KakaoAK {}".format(rest_api_key)}

        # 서비스 별 URL 설정

        # 01 주소 검색
        self.URL_01 = "https://dapi.kakao.com/v2/local/search/address.json"
        # 02 좌표-행정구역정보 변환
        self.URL_02 = "https://dapi.kakao.com/v2/local/geo/coord2regioncode.json"
        # 03 좌표-주소 변환
        self.URL_03 = "https://dapi.kakao.com/v2/local/geo/coord2address.json"
        # 04 좌표계 변환
        self.URL_04 = "https://dapi.kakao.com/v2/local/geo/transcoord.json"
        # 05 키워드 검색
        self.URL_05 = "https://dapi.kakao.com/v2/local/search/keyword.json"
        # 06 카테고리 검색
        self.URL_06 = "https://dapi.kakao.com/v2/local/search/category.json"


01 주소 검색 메서드

    def search_address(self, query, analyze_type=None, page=None, size=None):
        """
        01 주소 검색
        """
        params = {"query": f"{query}"}

        if analyze_type != None:
            params["analyze_type"] = f"{analyze_type}"

        if page != None:
            params['page'] = f"{page}"

        if size != None:
            params['size'] = f"{size}"

        res = requests.get(self.URL_01, headers=self.headers, params=params)
        document = json.loads(res.text)

        return document


02 좌표-행정구역정보 변환 메서드


    def geo_coord2regioncode(self, x, y, input_coord=None, output_coord=None):
        """
        02 좌표-행정구역정보 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
        
        if output_coord != None:
            params['output_coord'] = f"{output_coord}"
            
        res = requests.get(self.URL_02, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document


03 좌표-주소 변환 메서드


    def geo_coord2address(self, x, y, input_coord=None):
        """
        03 좌표-주소 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
            
        res = requests.get(self.URL_03, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
        


04 좌표계 변환 메서드


    def geo_transcoord(self, x, y, output_coord, input_coord=None):
        """
        04 좌표계 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}",
                  "output_coord": f"{output_coord}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
        
        res = requests.get(self.URL_04, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document


05 키워드 검색 메서드


    def search_keyword(self,query,category_group_code=None,x=None,y=None,radius=None,rect=None,page=None,size=None,sort=None):
        """
        05 키워드 검색
        """
        params = {"query": f"{query}"}
        
        if category_group_code != None:
            params['category_group_code'] = f"{category_group_code}"
        if x != None:
            params['x'] = f"{x}"
        if y != None:
            params['y'] = f"{y}"
        if radius != None:
            params['radius'] = f"{radius}"
        if rect != None:
            params['rect'] = f"{rect}"
        if page != None:
            params['page'] = f"{page}"
        if size != None:
            params['size'] = f"{params}"
        if sort != None:
            params['sort'] = f"{sort}"
        
        res = requests.get(self.URL_05, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document


06 카테고리 검색 메서드


    def search_category(self, category_group_code, x, y, radius=None, rect=None, page=None, size=None, sort=None):
        """
        06 카테고리 검색
        """
        params = {'category_group_code': f"{category_group_code}",
                  'x': f"{x}",
                  'y': f"{y}"}
        
        if radius != None:
            params['radius'] = f"{radius}"
        if rect != None:
            params['rect'] = f"{rect}"
        if page != None:
            params['page'] = f"{page}"
        if size != None:
            params['size'] = f"{size}"
        if sort != None:
            params['sort'] = f"{sort}"
            
        res = requests.get(self.URL_06, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document


API 인증 및 인스턴스 생성

카카오에서 발급받은 REST API 키로 인스턴스 kakao를 초기화한다.

# REST API 키
rest_api_key = "REST API KEY"

kakao = KakaoLocalAPI(rest_api_key)


01 주소 검색

## Set params
query = "경기도 성남시 분당구 백현동 판교역로146번길 20"

## Request
result_01 = kakao.search_address(query)
result_01
{'documents': [{'address': {'address_name': '경기 성남시 분당구 백현동 541',
    'b_code': '4113511000',
    'h_code': '4113565700',
    'main_address_no': '541',
    'mountain_yn': 'N',
    'region_1depth_name': '경기',
    'region_2depth_name': '성남시 분당구',
    'region_3depth_h_name': '백현동',
    'region_3depth_name': '백현동',
    'sub_address_no': '',
    'x': '127.1120874858',
    'y': '37.3927946193963'},
   'address_name': '경기 성남시 분당구 판교역로146번길 20',
   'address_type': 'ROAD_ADDR',
   'road_address': {'address_name': '경기 성남시 분당구 판교역로146번길 20',
    'building_name': '현대백화점 판교점',
    'main_building_no': '20',
    'region_1depth_name': '경기',
    'region_2depth_name': '성남시 분당구',
    'region_3depth_name': '백현동',
    'road_name': '판교역로146번길',
    'sub_building_no': '',
    'underground_yn': 'N',
    'x': '127.1120874858',
    'y': '37.3927946193963',
    'zone_no': '13529'},
   'x': '127.1120874858',
   'y': '37.3927946193963'}],
 'meta': {'is_end': True, 'pageable_count': 1, 'total_count': 1}}


02 좌표-행정구역정보 변환

## Set params
x = 127.02449138906029
y = 37.50229485705552

input_coord = "WGS84" # WGS84, WCONGNAMUL, CONGNAMUL, WTM, TM
output_coord = "TM" # WGS84, WCONGNAMUL, CONGNAMUL, WTM, TM

## Request
result_2 = kakao.geo_coord2regioncode(x,y, input_coord, output_coord)
result_2
{'meta': {'total_count': 2},
 'documents': [{'region_type': 'B',
   'code': '1165010800',
   'address_name': '서울특별시 서초구 서초동',
   'region_1depth_name': '서울특별시',
   'region_2depth_name': '서초구',
   'region_3depth_name': '서초동',
   'region_4depth_name': '',
   'x': 201618.64566571394,
   'y': 442961.8021336915},
  {'region_type': 'H',
   'code': '1165053100',
   'address_name': '서울특별시 서초구 서초4동',
   'region_1depth_name': '서울특별시',
   'region_2depth_name': '서초구',
   'region_3depth_name': '서초4동',
   'region_4depth_name': '',
   'x': 202060.27404560513,
   'y': 444501.80743905855}]}


03 좌표-주소 변환

## Set params
x = 127.02449138906029
y = 37.50229485705552

input_coord = "WGS84" # WGS84, WCONGNAMUL, CONGNAMUL, WTM, TM

## Request
result_3 = kakao.geo_coord2address(x,y, input_coord)
result_3
{'meta': {'total_count': 1},
 'documents': [{'road_address': None,
   'address': {'address_name': '서울 서초구 서초동 1309-12',
    'region_1depth_name': '서울',
    'region_2depth_name': '서초구',
    'region_3depth_name': '서초동',
    'mountain_yn': 'N',
    'main_address_no': '1309',
    'sub_address_no': '12',
    'zip_code': ''}}]}


04 좌표계 변환

## Set params
x = 127.02449138906029
y = 37.50229485705552

input_coord = "WGS84" # WGS84, WCONGNAMUL, CONGNAMUL, WTM, TM
output_coord = "TM" # WGS84, WCONGNAMUL, CONGNAMUL, WTM, TM

## Request
result_4 = kakao.geo_transcoord(x,y,output_coord)
result_4
{'meta': {'total_count': 1},
 'documents': [{'x': 202095.86924850685, 'y': 444453.71117371507}]}


05 키워드 검색

## Set params
query = "현대백화점"

## Request
result_5 = kakao.search_keyword(query)
result_5
{'documents': [{'address_name': '서울 강남구 삼성동 159-7',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '18384587',
   'phone': '02-552-2233',
   'place_name': '현대백화점 무역센터점',
   'place_url': 'http://place.map.kakao.com/18384587',
   'road_address_name': '서울 강남구 테헤란로 517',
   'x': '127.0598086324825',
   'y': '37.50857933831633'},
  {'address_name': '서울 강남구 압구정동 429',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '21297272',
   'phone': '02-547-2233',
   'place_name': '현대백화점 압구정본점',
   'place_url': 'http://place.map.kakao.com/21297272',
   'road_address_name': '서울 강남구 압구정로 165',
   'x': '127.02747045214494',
   'y': '37.527371799149506'},
  {'address_name': '경기 성남시 분당구 백현동 541',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '27572094',
   'phone': '031-5170-2233',
   'place_name': '현대백화점 판교점',
   'place_url': 'http://place.map.kakao.com/27572094',
   'road_address_name': '경기 성남시 분당구 판교역로146번길 20',
   'x': '127.112052030116',
   'y': '37.3927971758692'},
  {'address_name': '서울 양천구 목동 916',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '26825477',
   'phone': '02-2163-2233',
   'place_name': '현대백화점 목동점',
   'place_url': 'http://place.map.kakao.com/26825477',
   'road_address_name': '서울 양천구 목동동로 257',
   'x': '126.87525853214666',
   'y': '37.526654089298255'},
  {'address_name': '대구 중구 계산동2가 200',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '26588534',
   'phone': '053-245-2233',
   'place_name': '현대백화점 대구점',
   'place_url': 'http://place.map.kakao.com/26588534',
   'road_address_name': '대구 중구 달구벌대로 2077',
   'x': '128.59063111852757',
   'y': '35.86662835745753'},
  {'address_name': '서울 구로구 신도림동 692',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '26776860',
   'phone': '02-2622-2233',
   'place_name': '현대백화점 디큐브시티점',
   'place_url': 'http://place.map.kakao.com/26776860',
   'road_address_name': '서울 구로구 경인로 662',
   'x': '126.88958060554663',
   'y': '37.50910419634123'},
  {'address_name': '서울 성북구 길음동 20-1',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '8156625',
   'phone': '02-2117-2233',
   'place_name': '현대백화점 미아점',
   'place_url': 'http://place.map.kakao.com/8156625',
   'road_address_name': '서울 성북구 동소문로 315',
   'x': '127.028748311194',
   'y': '37.608482732465'},
  {'address_name': '서울 서대문구 창천동 30-33',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '21695719',
   'phone': '02-3145-2233',
   'place_name': '현대백화점 신촌점',
   'place_url': 'http://place.map.kakao.com/21695719',
   'road_address_name': '서울 서대문구 신촌로 83',
   'x': '126.93581652251622',
   'y': '37.556153500544426'},
  {'address_name': '서울 강동구 천호동 572',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '13125937',
   'phone': '02-488-2233',
   'place_name': '현대백화점 천호점',
   'place_url': 'http://place.map.kakao.com/13125937',
   'road_address_name': '서울 강동구 천호대로 1005',
   'x': '127.1244432563588',
   'y': '37.538841968226784'},
  {'address_name': '충북 청주시 흥덕구 복대동 3380',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '17912136',
   'phone': '043-909-2233',
   'place_name': '현대백화점 충청점',
   'place_url': 'http://place.map.kakao.com/17912136',
   'road_address_name': '충북 청주시 흥덕구 직지대로 308',
   'x': '127.426506441269',
   'y': '36.6448287847106'},
  {'address_name': '경기 고양시 일산서구 대화동 2602',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '12526820',
   'phone': '031-822-2233',
   'place_name': '현대백화점 킨텍스점',
   'place_url': 'http://place.map.kakao.com/12526820',
   'road_address_name': '경기 고양시 일산서구 호수로 817',
   'x': '126.75118105784215',
   'y': '37.66818614056687'},
  {'address_name': '경기 부천시 중동 1164',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '14661403',
   'phone': '032-623-2233',
   'place_name': '현대백화점 중동점',
   'place_url': 'http://place.map.kakao.com/14661403',
   'road_address_name': '경기 부천시 길주로 180',
   'x': '126.76206845886405',
   'y': '37.50434088197503'},
  {'address_name': '울산 남구 삼산동 1521-1',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '8154974',
   'phone': '052-228-2233',
   'place_name': '현대백화점 울산점',
   'place_url': 'http://place.map.kakao.com/8154974',
   'road_address_name': '울산 남구 삼산로 261',
   'x': '129.33574650999',
   'y': '35.5395950301785'},
  {'address_name': '서울 서대문구 창천동 30-1',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '26992232',
   'phone': '02-3145-2233',
   'place_name': '현대백화점유플렉스 신촌점',
   'place_url': 'http://place.map.kakao.com/26992232',
   'road_address_name': '서울 서대문구 연세로 13',
   'x': '126.93661730245256',
   'y': '37.55673777941326'},
  {'address_name': '부산 동구 범일동 62-5',
   'category_group_code': '',
   'category_group_name': '',
   'category_name': '가정,생활 > 백화점 > 현대백화점',
   'distance': '',
   'id': '21748301',
   'phone': '051-667-2233',
   'place_name': '현대백화점 부산점',
   'place_url': 'http://place.map.kakao.com/21748301',
   'road_address_name': '부산 동구 범일로 125',
   'x': '129.0586370818922',
   'y': '35.141263504491185'}],
 'meta': {'is_end': False,
  'pageable_count': 45,
  'same_name': {'keyword': '현대백화점', 'region': [], 'selected_region': ''},
  'total_count': 3642}}


06 카테고리 검색

## Set params
category_group_code = "MT1"
x = 127.02449138906029
y = 37.50229485705552
radius = 20000

## Request
result_6 = kakao.search_category(category_group_code, x, y, radius)
result_6
{'documents': [{'address_name': '서울 서초구 서초동 1316-28',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 노브랜드',
   'distance': '469',
   'id': '1712876948',
   'phone': '02-537-5827',
   'place_name': '노브랜드 서울서초점',
   'place_url': 'http://place.map.kakao.com/1712876948',
   'road_address_name': '서울 서초구 서초대로73길 7',
   'x': '127.02538233025993',
   'y': '37.49812386955666'},
  {'address_name': '서울 서초구 서초4동 1302-4',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 이마트 에브리데이',
   'distance': '231',
   'id': '12421792',
   'phone': '02-534-3651',
   'place_name': '이마트에브리데이 서초동점',
   'place_url': 'http://place.map.kakao.com/12421792',
   'road_address_name': '서울 서초구 서운로 216',
   'x': '127.021872220302',
   'y': '37.5023574981132'},
  {'address_name': '서울 서초구 서초동 1685-8',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 노브랜드',
   'distance': '1085',
   'id': '320786076',
   'phone': '02-537-8217',
   'place_name': '노브랜드 서울서초G5점',
   'place_url': 'http://place.map.kakao.com/320786076',
   'road_address_name': '서울 서초구 서초중앙로24길 27',
   'x': '127.01617980670726',
   'y': '37.495104413126136'},
  {'address_name': '서울 강남구 역삼동 832-6',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 노브랜드',
   'distance': '1272',
   'id': '420935474',
   'phone': '02-2051-9666',
   'place_name': '노브랜드 강남역삼점',
   'place_url': 'http://place.map.kakao.com/420935474',
   'road_address_name': '서울 강남구 강남대로 324',
   'x': '127.03089279874023',
   'y': '37.49202454273762'},
  {'address_name': '서울 강남구 역삼동 824-11',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 롯데슈퍼',
   'distance': '785',
   'id': '1580062235',
   'phone': '02-569-4007',
   'place_name': '롯데슈퍼 강남역가맹점',
   'place_url': 'http://place.map.kakao.com/1580062235',
   'road_address_name': '서울 강남구 강남대로84길 23',
   'x': '127.030555642102',
   'y': '37.4971207255714'},
  {'address_name': '서울 강남구 논현동 140',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > GS더프레시',
   'distance': '859',
   'id': '26890613',
   'phone': '02-548-6071',
   'place_name': 'GS더프레시 강남영동점',
   'place_url': 'http://place.map.kakao.com/26890613',
   'road_address_name': '서울 강남구 강남대로128길 20',
   'x': '127.023652458739',
   'y': '37.5100084909034'},
  {'address_name': '서울 강남구 역삼동 833-4',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 이마트 에브리데이',
   'distance': '1217',
   'id': '2115939257',
   'phone': '02-6951-3011',
   'place_name': '이마트에브리데이 역삼점',
   'place_url': 'http://place.map.kakao.com/2115939257',
   'road_address_name': '서울 강남구 역삼로 124',
   'x': '127.03326371111147',
   'y': '37.49384213144032'},
  {'address_name': '서울 서초구 서초동 1685-3',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 홈플러스익스프레스',
   'distance': '1088',
   'id': '10979066',
   'phone': '02-3478-8545',
   'place_name': '홈플러스익스프레스 서초점',
   'place_url': 'http://place.map.kakao.com/10979066',
   'road_address_name': '서울 서초구 서초중앙로 188',
   'x': '127.012801613753',
   'y': '37.4992305364984'},
  {'address_name': '서울 서초구 반포동 20-51',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 홈플러스익스프레스',
   'distance': '1048',
   'id': '11779677',
   'phone': '02-536-8545',
   'place_name': '홈플러스익스프레스 반포점',
   'place_url': 'http://place.map.kakao.com/11779677',
   'road_address_name': '서울 서초구 사평대로45길 10-25',
   'x': '127.013938393932',
   'y': '37.506611446308'},
  {'address_name': '서울 서초구 반포동 30-25',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > GS더프레시',
   'distance': '1090',
   'id': '21308698',
   'phone': '02-592-1832',
   'place_name': 'GS더프레시 서초점',
   'place_url': 'http://place.map.kakao.com/21308698',
   'road_address_name': '서울 서초구 서초중앙로 238',
   'x': '127.01218644358',
   'y': '37.50290084932801'},
  {'address_name': '서울 서초구 반포동 19-4',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 노브랜드',
   'distance': '1604',
   'id': '914807858',
   'phone': '02-537-8491',
   'place_name': '노브랜드 강남터미널점',
   'place_url': 'http://place.map.kakao.com/914807858',
   'road_address_name': '서울 서초구 신반포로 194',
   'x': '127.006971407417',
   'y': '37.5060570437569'},
  {'address_name': '서울 서초구 반포동 54-1',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 롯데슈퍼',
   'distance': '1214',
   'id': '707649582',
   'phone': '',
   'place_name': '롯데슈퍼 반포2점',
   'place_url': 'http://place.map.kakao.com/707649582',
   'road_address_name': '서울 서초구 고무래로 22',
   'x': '127.010757453712',
   'y': '37.5025716705172'},
  {'address_name': '서울 강남구 역삼동 748-14',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 롯데슈퍼',
   'distance': '1299',
   'id': '26875613',
   'phone': '02-3453-5053',
   'place_name': '롯데슈퍼 역삼3점',
   'place_url': 'http://place.map.kakao.com/26875613',
   'road_address_name': '서울 강남구 역삼로 153',
   'x': '127.03601665566812',
   'y': '37.49502768006294'},
  {'address_name': '서울 강남구 논현동 129',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 슈퍼마켓 > 대형슈퍼 > 홈플러스익스프레스',
   'distance': '1349',
   'id': '16272886',
   'phone': '02-516-8546',
   'place_name': '홈플러스익스프레스 학동역점',
   'place_url': 'http://place.map.kakao.com/16272886',
   'road_address_name': '서울 강남구 학동로 176',
   'x': '127.030245631984',
   'y': '37.5135533395888'},
  {'address_name': '서울 서초구 잠원동 70-2',
   'category_group_code': 'MT1',
   'category_group_name': '대형마트',
   'category_name': '가정,생활 > 대형마트 > 킴스클럽',
   'distance': '1693',
   'id': '18276130',
   'phone': '02-530-5000',
   'place_name': '킴스클럽 강남점',
   'place_url': 'http://place.map.kakao.com/18276130',
   'road_address_name': '서울 서초구 잠원로 51',
   'x': '127.00743769002541',
   'y': '37.50923936481701'}],
 'meta': {'is_end': False,
  'pageable_count': 45,
  'same_name': None,
  'total_count': 665}}


전체 소스 코드

import json
import requests

class KakaoLocalAPI:
    """
    Kakao Local API 컨트롤러
    """

    def __init__(self, rest_api_key):
        """
        Rest API키 초기화 및 기능 별 URL 설정
        """

        # REST API 키 설정
        self.rest_api_key = rest_api_key
        self.headers = {"Authorization": "KakaoAK {}".format(rest_api_key)}

        # 서비스 별 URL 설정

        # 01 주소 검색
        self.URL_01 = "https://dapi.kakao.com/v2/local/search/address.json"
        # 02 좌표-행정구역정보 변환
        self.URL_02 = "https://dapi.kakao.com/v2/local/geo/coord2regioncode.json"
        # 03 좌표-주소 변환
        self.URL_03 = "https://dapi.kakao.com/v2/local/geo/coord2address.json"
        # 04 좌표계 변환
        self.URL_04 = "https://dapi.kakao.com/v2/local/geo/transcoord.json"
        # 05 키워드 검색
        self.URL_05 = "https://dapi.kakao.com/v2/local/search/keyword.json"
        # 06 카테고리 검색
        self.URL_06 = "https://dapi.kakao.com/v2/local/search/category.json"

    def search_address(self, query, analyze_type=None, page=None, size=None):
        """
        01 주소 검색
        """
        params = {"query": f"{query}"}

        if analyze_type != None:
            params["analyze_type"] = f"{analyze_type}"

        if page != None:
            params['page'] = f"{page}"

        if size != None:
            params['size'] = f"{size}"

        res = requests.get(self.URL_01, headers=self.headers, params=params)
        document = json.loads(res.text)

        return document
    
    def geo_coord2regioncode(self, x, y, input_coord=None, output_coord=None):
        """
        02 좌표-행정구역정보 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
        
        if output_coord != None:
            params['output_coord'] = f"{output_coord}"
            
        res = requests.get(self.URL_02, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
        
    
    def geo_coord2address(self, x, y, input_coord=None):
        """
        03 좌표-주소 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
            
        res = requests.get(self.URL_03, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
        
    
    def geo_transcoord(self, x, y, output_coord, input_coord=None):
        """
        04 좌표계 변환
        """
        params = {"x": f"{x}",
                  "y": f"{y}",
                  "output_coord": f"{output_coord}"}
        
        if input_coord != None:
            params['input_coord'] = f"{input_coord}"
        
        res = requests.get(self.URL_04, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
        
    
    def search_keyword(self,query,category_group_code=None,x=None,y=None,radius=None,rect=None,page=None,size=None,sort=None):
        """
        05 키워드 검색
        """
        params = {"query": f"{query}"}
        
        if category_group_code != None:
            params['category_group_code'] = f"{category_group_code}"
        if x != None:
            params['x'] = f"{x}"
        if y != None:
            params['y'] = f"{y}"
        if radius != None:
            params['radius'] = f"{radius}"
        if rect != None:
            params['rect'] = f"{rect}"
        if page != None:
            params['page'] = f"{page}"
        if size != None:
            params['size'] = f"{params}"
        if sort != None:
            params['sort'] = f"{sort}"
        
        res = requests.get(self.URL_05, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document
    
            
        
    def search_category(self, category_group_code, x, y, radius=None, rect=None, page=None, size=None, sort=None):
        """
        06 카테고리 검색
        """
        params = {'category_group_code': f"{category_group_code}",
                  'x': f"{x}",
                  'y': f"{y}"}
        
        if radius != None:
            params['radius'] = f"{radius}"
        if rect != None:
            params['rect'] = f"{rect}"
        if page != None:
            params['page'] = f"{page}"
        if size != None:
            params['size'] = f"{size}"
        if sort != None:
            params['sort'] = f"{sort}"
            
        res = requests.get(self.URL_06, headers=self.headers, params=params)
        document = json.loads(res.text)
        
        return document

카테고리:

업데이트:

댓글남기기