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
<?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문에 코드를 추가하여 간단하게 처리하는 방법을 해보았습니다.