PHP

[PHP] 카카오 REST API를 사용해보자

dev-mint 2022. 3. 3. 13:44

 

<1> 카카오 개발자 사이트에서 앱키 발급받기

 

1. 카카오 개발자사이트에 로그인 

 

애플리케이션 추가하기 클릭

 

앱 이름과 사업자명을 입력후 저장 클릭하여 신규 앱을 생성

 

생성된 앱을 클릭하여 앱 키를 확인합니다.

여기서 REST API 키를 사용할 거에요.

 

 

 


 

 

<2> 좌표로 주소 변환하기

 

카카오 로컬 API를 사용하여 좌표로 주소 변환해보겠습니다.

API에 대한 요청, 응답값에 대한 자세한 설명은 아래 링크를 참조해 주세요.

 

https://developers.kakao.com/docs/latest/ko/local/dev-guide#coord-to-address

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

<?php
// 현재 위치를 담은 배열
$parameter = array(
    'x' => 127.423084873712,
    'y'=>37.0789561558879,
    'input_coord'=>'WGS84'
);

// Request 정보
$host = "https://dapi.kakao.com/v2/local/geo/coord2address";
$api_key = "발급받은 REST API 키값";
$headers = array("Authorization: KakaoAK {$api_key}");

$query = http_build_query($parameter);
$content_type = "json";

$opts = array(
    CURLOPT_URL => $host . '.' . $content_type . '?' . $query,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSLVERSION => 1,
    CURLOPT_HEADER => false,
    CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

// 결과 배열로 변환
$decode = json_decode($return_data, true);

if (curl_errno($curl_session)) {
    // 통신 실패
    throw new Exception(curl_error($curl_session));
} else {
    // 성공
    curl_close($curl_session);
}

 

결과값으로 받은 json data를 배열로 변환하여 출력해보면 

도로명과 지번주소를 받을 수 있습니다. (도로명은 좌표에 따라 반환되지 않을 수도 있어요)

 

/*
Array 
(
	[meta] => Array
	(
	    [total_count] => 1
	)

	[documents] => Array
	(
	    [0] => Array
		(
		    [road_address] => Array
			(
			    [address_name] => 경기도 안성시 죽산면 죽산초교길 69-4
			    [region_1depth_name] => 경기
			    [region_2depth_name] => 안성시
			    [region_3depth_name] => 죽산면
			    [road_name] => 죽산초교길
			    [underground_yn] => N
			    [main_building_no] => 69
			    [sub_building_no] => 4
			    [building_name] => 무지개아파트
			    [zone_no] => 17519
			)

		    [address] => Array
			(
			    [address_name] => 경기 안성시 죽산면 죽산리 343-1
			    [region_1depth_name] => 경기
			    [region_2depth_name] => 안성시
			    [region_3depth_name] => 죽산면 죽산리
			    [mountain_yn] => N
			    [main_address_no] => 343
			    [sub_address_no] => 1
			    [zip_code] => 
			)

		)

	)
)
*/

 


 

<3> 카카오 REST API용 함수를 만들어서 사용해보자!

 

통신하는 방법은 똑같기 때문에 다른 REST API도 사용할 수 있는 함수로 만들어 보겠습니다.

 

* 공통 함수

<?php
//카카오 rest api 함수
function kakaoRestApi($type, $parameter=array(), $content_type='json') {
    // Request 정보
    $host = "https://dapi.kakao.com";
    $api_key = "311cbd76cb7e7d5f4f12d0647321b956";
    $headers = array("Authorization: KakaoAK {$api_key}");

    $query = http_build_query($parameter);
    $path = "";

     switch ($type) {
        case "coord2address" :      // 좌표로 주소변환
            $path = "/v2/local/geo/coord2address";
            break;

        case "address" :            // 주소 검색
            $path = "/v2/local/search/address";
            break;

        case "coord2regioncode" :   // 좌표로 행정구역정보 받기
            $path = "/v2/local/geo/coord2regioncode";
            break;

        default :
            // 올바른 API 구분이 아닌 경우 return;
            return array('api_result' => false, 'err_msg' => 'API 구분을 올바르게 입력해 주세요.');
    }

    $opts = array(
        CURLOPT_URL => $host . $path . '.' . $content_type . '?' . $query,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSLVERSION => 1,
        CURLOPT_HEADER => false,
        CURLOPT_HTTPHEADER => $headers
    );

    $curl_session = curl_init();
    curl_setopt_array($curl_session, $opts);
    $return_data = curl_exec($curl_session);

    // response 정보
    $decode = json_decode($return_data,true);

    if (curl_errno($curl_session)) {
        throw new Exception(curl_error($curl_session));
        $decode['api_result'] = false;
    } else {
        curl_close($curl_session);
        $decode['api_result'] = true;
    }

    return $decode;
}


* 사용예시 (카카오 주소 검색하기)

<?
$params = array(
    'query' => '서울시 종로구 효자로 12',
);

$result = kakaoRestApi('address', $params);

 

이 외에 사용하고 싶은 카카오 API가 있으면

switch문에 코드를 추가하여 간단하게 처리하는 방법을 해보았습니다.