[PHP] openapi를 이용한 도로명 주소 검색 예제
오픈소스 검색엔진을 사용해서 도로명 주소 검색 시스템을 개발해 서비스하고 있지만 최근에 openapi를 이용해서 도로명 주소 검색 서비스를 제공하는 경우가 있어 어떤 것인가 싶은 생각에 인증키 신청하고 테스트를 진행해봤는데.. 이건 사용할 게 아닌 것 같다는 생각이 들었다. 일단 검색이 너무 불편해서.. 강남대로37길 24 등과 같이 주소를 정확하게 입력해야만 검색이 되기 때문에 검색엔진에서 검색하듯 주소를 검색하면 욕먹기 딱 좋을 것 같았다. 그래서 결국은 테스트만 하고 끝냈는데.. 그래도 php용으로는 샘플코드를 제공하지 않아서 다른 분들께 도움이 될까 싶어 테스트 때 작성했던 코드를 공개한다.
<?php
include_once('./_common.php');
$serviceKey = 'abcd';
$charset = 'utf-8';
$searchSe = $_POST['searchSe'];
$srchwrd = urlencode($_POST['srchwrd']);
$url = 'http://openapi.epost.go.kr/postal/retrieveNewAdressService/retrieveNewAdressService/getNewAddressList?searchSe='.$searchSe.'&srchwrd='.$srchwrd.'&encoding='.$charset.'&serviceKey='.$serviceKey;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$output = curl_exec($ch);
$errno = curl_errno($ch);
if ($errno > 0) {
if ($errno === 28) {
echo "Connection timed out.";
}
else {
echo "Error #" . $errno . ": " . curl_error($ch);
}
}
else {
$xml = new SimpleXmlElement($output);
$count = count($xml->newAddressList);
for($i=0; $i<$count; $i++) {
$data = $xml->newAddressList[$i];
$zipcode = $data->zipNo;
$zip = explode('-', $zipcode);
$zip1 = $zip[0];
$zip2 = $zip[1];
$address = $data->lnmAdres;
preg_match('/^([^\(]+)/', $address, $m);
$addr1 = trim($m[1]);
$addr3 = trim(str_replace($m[1], '', $address));
$addr_ji = trim($data->rnAdres);
if($i == 0)
echo '<ul>'.PHP_EOL;
echo '<li>'.PHP_EOL;
echo '<span></span>';
echo '<a href="#" onclick="put_data(\''.$zip1.'\', \''.$zip2.'\', \''.trim($addr1).'\', \''.trim($addr3).'\', \''.$addr_ji.'\'); return false;">';
echo '<strong>'.$zipcode.'</strong>';
echo ' '.$addr1;
echo ' '.$addr3;
echo '</a>';
echo '<div>(지번주소) '.$addr_ji.'</div>';
echo '</li>'.PHP_EOL;
}
if($i > 0)
echo '</ul>';
else
echo '<div class="result_msg result_fail">검색결과가 없습니다.</div>';
}
curl_close($ch);
?>
인증키($serviceKey)는 http://data.go.kr 에 회원가입 후 오픈API 중 도로명주소조회서비스의 인증키를 신청하신 후 발급 받아서 설정하면 된다. 그리고 조회 요청때 php의 curl을 사용하기 때문에 curl을 사용할 수 있는 환경이어야 사용할 수 있다. 완전하게 정리된 코드가 아니고 테스트용으로 작성된 코드라는 점을 감안하고 사용하면 될 듯 하다.