🖥️ IT, 컴퓨터/🐍 Python

[Python] 카카오 모빌리티 API를 이용하여 네트워크 거리 계산하기 (feat. chatGPT)

김 홍시 2023. 8. 21.
반응형

[Python] Calculating network distance using Kakao Map API

 

https://developers.kakaomobility.com/docs/navi-api/directions/

 

카카오모빌리티 디벨로퍼스

카카오모빌리티 디벨로퍼스

developers.kakaomobility.com

 

 

문제 상황

 

모든 파란 별과 초록 네모 사이의 네트워크 거리를 구해야 한다.

 

 

카카오 모빌리티 길찾기 API 확인 

 

 

이와 같이 설명된 문서를 확인할 수 있다.

 

요청 파라미터를 확인한다.

이 중에서 필요한 것만 고르자.

 

 

필자의 경우 이 두 가지의 요청 파라미터만 사용한다.

 

요청코드 예제

curl -v -X GET "https://apis-navi.kakaomobility.com/v1/directions?origin=127.11015314141542,37.39472714688412&destination=127.10824367964793,37.401937080111644&waypoints=&priority=RECOMMEND&car_fuel=GASOLINE&car_hipass=false&alternatives=false&road_details=false" \
    -H "Authorization: KakaoAK ${REST_API_KEY}" // 카카오디벨로퍼스에서 발급 받은 API 키 값

 

 

GPT 4.0이 만들어준 코드

chatGPT 4.0을 이용하여 코드를 만들어달라고 요청했다.

https://chat.openai.com/share/35159c69-3936-4d9b-8f52-506c57e5e953

 

ChatGPT

A conversational AI system that listens, learns, and challenges

chat.openai.com

 

pip install requests

 

먼저 requests가 설치되지 않은 경우, 위 명령어를 입력하자.

 

내가 사용한 코드는 아래와 같다.

import requests
import json

def get_directions(api_key, origin, destination):
    url = "https://apis-navi.kakaomobility.com/v1/directions"
    
    # 파라미터 추가
    params = {
        "origin": origin,
        "destination": destination
    }
    
    headers = {
        "Authorization": f"KakaoAK {api_key}",
        "Content-Type": "application/json"
    }

    response = requests.get(url, headers=headers, params=params)

    if response.status_code == 200:
        return response.json()
    else:
        return None

if __name__ == "__main__":
    REST_API_KEY = "당신의_API_코드"
    
    origin_input = 126.970186, 37.556011
    destination_input = 126.924234, 37.521718
    
    result = get_directions(REST_API_KEY, origin_input, destination_input)
    if result:
        print(json.dumps(result, indent=4))
    else:
        print("API 호출에 실패했습니다.")

 

 

결과 확인

결과를 확인해보자.

서울역 - 여의도역 길찾기 경로를 예시로 들어보자.

카카오맵 상으로 6.4km, 18분, 택시비 9,500원이다.

 

서울역과 여의도역의 위도 경도를 입력하였다.

서울역 

126.970186, 37.556011

 

여의도역

126.924234, 37.521718

 

코드를 돌린 결과

택시요금은 9,200원이, 이동 거리는 6.456km가, 이동 시간은 1105초 (18분 25초)가 소요된다는 결과가 나타났다.

 

즉 카카오맵과 거의 동일한 결과가 나타나, 코드가 정확하게 작성되었음을 알 수 있다. 

 

여러 경우에 대해 계산해야 하는 경우

# 여러 개인 경우

import requests
import json

def get_directions(api_key, origin, destination):
    url = "https://apis-navi.kakaomobility.com/v1/directions"

    # 파라미터 추가
    params = {
        "origin": origin,
        "destination": destination,
        "priority": "DISTANCE"
    }

    headers = {
        "Authorization": f"KakaoAK {api_key}",
        "Content-Type": "application/json"
    }

    response = requests.get(url, headers=headers, params=params)

    if response.status_code == 200:
        return response.json()
    else:
        return None

if __name__ == "__main__":
    REST_API_KEY = "8fae3c0f2015c366e0f4592f961bf873"


import pandas as pd

# 원하는 컬럼 이름으로 값을 가져옵니다. 이 예에서는 'origin_longitude', 'origin_latitude', 'dest_longitude', 'dest_latitude'라는 컬럼명을 사용했습니다.
origin_longitude = df['O_x'].tolist()
origin_latitude = df['O_y'].tolist()
dest_longitude = df['D_x'].tolist()
dest_latitude = df['D_y'].tolist()


    # 결과를 저장할 리스트 선언
results_list = []
for i in range(len(origin_longitude)):
    origin_input = (origin_longitude[i], origin_latitude[i])
    destination_input = (dest_longitude[i], dest_latitude[i])

    result = get_directions(REST_API_KEY, origin_input, destination_input)

    if result:
        results_list.append(result)
        for i in range(len(results_list)):
          info = results_list[i]['routes'][0]
        if info['result_code'] == 0:
             distance = results_list[i]['routes'][0]['summary']['distance']
             print(f"Distance for index {i}: {distance}")
        else:
              print("길찾기 불가능")


    else:
        print("API 호출에 실패했습니다.")

 

특히 마지막 for 문에서는

routes라는 딕셔너리 안에 거리가 저장된다는 점에서 코드를 이와 같이 작성하였음

 

그 결과, 이와 같이 각 index에 대해 거리(m 기준)만 나오게 된다.

반응형

댓글