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

John
6 min readMar 17, 2020

--

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

  1. Geocode by Awesome Table

바로 스프레드 시트에 address를 입력하면 위경도를 반환해주는 구글 스프레드 시트의 부가기능이 있었고,

2. 카카오 API

두 번째는 카카오 지도 API를 활용하는 방법이었다.

나는 그 중에서 번거롭지만 직접 코딩을 해서 위경도를 반환하는 카카오 지도 API를 활용하기로 했다.

1. 가입 및 설정

https://developers.kakao.com/

해당 링크를 통해 로그인을 하고 앱을 등록한다. (사진은 궂이 등록 안해도 됨)

앱 등록 후 앱 키를 꼭 복사해서 메모장에 붙여넣는다.

가입을 진행했으면, <내 애플리케이션>에 들어가 <설정>에서 <사용자 관리>를 들어간다.

여기서 중요한데, 사용자 관리를 활성화 해준 뒤 로그인 Redirect URL을 설정해주면 된다.

나같은 경우는 jupyter notebook의 기본 주소로 등록했다. (각자 사용환경에 맞게 등록하면 된다)

2. 코드 받기

https://kauth.kakao.com/oauth/authorize?client_id=REST API 키&redirect_uri=http://localhost:8888&response_type=code

각자 사용 환경과 앱키에 맞게 주소값을 입력한 후 url을 복사하여 주소창에 넣어준다.

그러면 개인정보 제공 동의에 대한 팝업이 뜨고 동의를 누르면 자신의 Jupyter notebook 환경으로 접속 된다.

3. 코드 내용 확인

해당 jupyter notebook의 주소창을 보면

http://localhost:8888/tree?code=코드값

으로 주소창이 구성되어 있는 것을 볼 수 있다. 여기서 해당 주소 끝부분이 코드값이다. 그럼 이제 토큰을 받으러 가면 된다.

4. 토큰 생성

https://kauth.kakao.com/oauth/token?grant_type=authorization_code&client_id=REST API값&redirect_uri=http://localhost:8888&code=드값

이렇게 세 가지를 붙여서 주소창에 붙여넣으면,

{"access_token":"ZLl~~~","token_type":"bearer","refresh_token":"r7LX~~~","expires_in":21599,"scope":"age_range birthday account_email gender profile","refresh_token_expires_in":~~~}

이런식으로 성공적으로 뜰 것이다.

이제 access_token을 발급 받았으니 코드를 통해 위경도를 추출해내면 끝!

5. 코드 작성

def getLatLng(addr):
url = 'https://dapi.kakao.com/v2/local/search/address.json?query=' + addr
headers = {"Authorization": "KakaoAK 073a393656181c6073880062d3507191"}
result = json.loads(str(requests.get(url, headers=headers).text))
match_first = result['documents'][0]['address']
return float(match_first['y']), float(match_first['x'])
getLatLng('서울 마포구 모래내로1길 20')

6. 토큰 재발급

해당 토큰은 12–24시간 동안 유효하다고 한다. 그렇기에 만료 1달 이내에 토큰 갱신 요청을 하면 어세스 토큰과 리프레시 토큰이 생성 된다고 한다.

https://kauth.kakao.com/oauth/token?grant_type=refresh_token&client_id=REST API 값&refresh_token=4에서 받은 refresh token 값

해당 주소를 입력하면 어세스 토큰이 재 발급 된다.

{"access_token":"~~","token_type":"bearer","expires_in":21599}

--

--