qcoding

3) 카카오 Api를 활용한 geocode로 위도/경도 찾기 본문

[사이드 프로젝트]App개발 - 전국 국밥 찾기

3) 카카오 Api를 활용한 geocode로 위도/경도 찾기

Qcoding 2022. 1. 10. 12:38
반응형

1) 필요한 기능

2022.01.10 - [[사이드 프로젝트]App개발 - 전국 국밥 찾기] - 2) Python + Selenium + Beautiful Soup 통한 음식점 정보 웹크롤링

 

2) Python + Selenium + Beautiful Soup 통한 음식점 정보 웹크롤링

- 크롤링 사이트 확인 -> 음식점 정보를 얻기 위해서 여러 웹사이트를 통해서 크롤링이 가능하지만 평소 사용하는 DiningCode를 통해 음식점 정보를 얻기로 결정하였다. 검색어를 통해 지역별로 검

qcoding.tistory.com

-> 앞에서 구한 프로젝트에서 크롤링을 하고 나면 아래와 같은 형식의 엑셀파일이 생성된다. 이 때 음식점의 주소를 얻게 되는 데, 지도상에 표시를 하려면 위도 / 경도의 지리적인 정보가 필요하다. 구글지도에서 검색해서 노가다로 얻을 수 있고, 구글 API, 카카오 API, 네이버 API 등을 사용하는 여러 방법이 있다. 

노가다는 음식정보가 500개나 되어서 너무 오래걸릴 듯하고, 이번 글에서는 카카오 API를 사용하였다.

구글도 사용할 수 있지만 API 조건등이 변경되어 무료로 사용하기전에 결제정보를 등록해야 되서  최종적으로는 카카오로 선택하였다. 

 

2) 코드구현 및 API 발행하기 

-> 카카오 API를 사용하기 위해서 구글링을 하여 아래의 좋은 사이트를 확인하였다.

 여기서 설명이 아주 잘되어 있어서 이대로 따라하게 되면 API 키를 제공받게 되고 아래의 코드를 통해 지도정보를 위도와 경도로 받을 수 있다.

 

여기서 좀 헷갈렸던 부분이 API넣는 부분인데 이는 아래와 같이 진행하면 된다.

  # header에 넣는 API KEY값인데 이는 KakaoAK + REST API키 형태로 넣어 주어야한다.
  #  "KakaoAK DFDFDFDFKNSDFLSNDLKFSNDFL" 의 형태가 들어가야 한다.
   
   headers = {
        "Authorization": "API KEY값 "}

 

https://john-analyst.medium.com/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%B9%B4%EC%B9%B4%EC%98%A4-api%EB%A1%9C-%EC%9C%84%EA%B2%BD%EB%8F%84-%EA%B5%AC%ED%95%98%EA%B8%B0-69bc51697753

 

파이썬을 활용한 카카오 api로 위경도 구하기

특정 주소를 입력하면 위/경도를 반환하는 코드가 필요했고, 두 가지 방법을 찾았다.

john-analyst.medium.com

import requests
import json


addr = "서울 마포구 모래내로1길 20"

def getLatLng(addr):
    url = 'https://dapi.kakao.com/v2/local/search/address.json?query=' + addr
    headers = {
        "Authorization": "KakaoAK API "}
    # result에 json형식의 주소와 위도경도 내용들이 출력된다.
    result = json.loads(str(requests.get(url, headers=headers).text))
    status_code = requests.get(url, headers=headers).status_code

    try:
        match_first = result['documents'][0]['address']
        lon = match_first['x']
        lat = match_first['y']

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


lat, lon = getLatLng(addr_jeju)

print(f'위도 : {lat}, 경도 :{lon}')

위의 코드를 이전에 크롤링 후 자동으로 주소를 API로 보내서 위도/경도를 받도록 작성하였다.

def getLatLng(addr):
    url = 'https://dapi.kakao.com/v2/local/search/address.json?query=' + addr
    headers = {
        "Authorization": "KakaoAK API "}
    # result에 json형식의 주소와 위도경도 내용들이 출력된다.
    result = json.loads(str(requests.get(url, headers=headers).text))
    status_code = requests.get(url, headers=headers).status_code

    try:
        match_first = result['documents'][0]['address']
        lon = match_first['x']
        lat = match_first['y']

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



// 위에서 구한 loc_address를 위의 함수에다가 넣으면 위도와 경도가 나오게 되고 이를 정리하여
// 엑셀에 저장한다.
lat, lon = getLatLng(loc_address)

위와 같이 진행하면 아래와 같은 엑셀파일을 얻을 수 있다.

( * 해당엑셀을 만드는 전체 코드는 이전 글에서 확인가능합니다)

반응형
Comments