오지's blog

주소->위도경도변환 python 프로그램 - 네이버, 카카오 API활용 본문

개발노트/Python

주소->위도경도변환 python 프로그램 - 네이버, 카카오 API활용

오지구영ojjy90 2021. 3. 19. 00:31
728x90
반응형

카카오나 네이버 마찬가지로 get방식으로 주소를 넘겨주면 api를 호출하여 주소와 관련 위도 경도값이 나옵니다.

1. 카카오 API활용

 

주의해야 할점이 첫째로 kakao developer에서 key를 받아야 하고, 둘째로 kakao에서 api key를 받아서 "Your API KEY"의 부분에 "KakaoAK Key"를 입력해야한다. 예를들어 Key가 a1s2라고 하면 "Your API KEY"대신 "KakaoAK a1s2"를 입력하면 된다.

def getLatLng(addr):
    url = 'https://dapi.kakao.com/v2/local/search/address.json?query=' + addr
    headers = {"Authorization": "Your API KEY"}
    #get 방식으로 주소를 포함한 링크를 헤더와 넘기면 result에 json형식의 주소와 위도경도 내용들이 출력된다.
    result = json.loads(str(requests.get(url, headers=headers).text))
    status_code = requests.get(url, headers=headers).status_code
    if(status_code != 200):
        print(f"ERROR: Unable to call rest api, http_status_coe: {status_code}")
        return 0
    
    print(requests.get(url, headers=headers))
    print(result)

    try:
        match_first = result['documents'][0]['address']
        lon = match_first['x']
        lat = match_first['y']
        print(lon, lat)
        print(match_first)

        return lon, lat
    except IndexError: # match값이 없을때
        return 0
    except TypeError: # match값이 2개이상일때
        return 0

 

네이버 API활용

def get_apikey(key_name, json_filename):
    BASE_DIR = Path(__file__).resolve().parent.parent # == os.path.dirname(os.path.abspath(__file__))
    json_filepath = os.path.join(BASE_DIR, json_filename)
    # print(json_filepath)
    if(not os.path.isfile(json_filepath)):
        print("JSON File Not Found")
        raise FileNotFoundError

    with open(json_filepath) as f:
        json_p = json.loads(f.read())
        # print("json_p:  ", json_p)

    try:
        value=json_p[key_name]
        return value
    except KeyError:
        error_msg = "ERROR: Unvalid Key"
        return error_msg

def getlatlng_naver(addr):
    key_id = get_apikey('X-NCP-APIGW-API-KEY-ID', json_filename="secret.json")
    key = get_apikey('X-NCP-APIGW-API-KEY', json_filename="secret.json")
    headers = {'X-NCP-APIGW-API-KEY-ID':key_id,
               'X-NCP-APIGW-API-KEY':key}
    url = 'https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query='+addr
    result = json.loads(str(requests.get(url=url, headers=headers).text))
    try:
        addr_info_lon = result['addresses'][0]['x']
        addr_info_lat = result['addresses'][0]['y']
    except IndexError:  # match값이 없을때
        print("IndexError발생, 해당 주소에 맞는 위도 경도 없음, idx: ",idx, "번째, 주소정보: ", addr)
        raise IndexError
    except TypeError:  # match값이 2개이상일때
        print("TypeError발생, 해당 주소에 맞는 위도 경도값 2개 이상, idx: ",idx, "번째, 주소정보: ", addr)
        raise TypeError
    return addr_info_lon, addr_info_lat

 

 

 

네이버나 카카오api모두 get방식으로 주소를 헤더와 함께 넘겨 각각 포맷에 맞는 위도경도값을 json파일로 부터 가져오는 방식이다.

 

 

 

 

 

 

Reference

oboki.net/workspace/python/kakao-api-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%A3%BC%EC%86%8C-%EC%A2%8C%ED%91%9C-%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0/

Comments