<?
$search = "가산 에이스";
$url = "http://post.phpschool.com/phps.kr";
$data = array("addr"=>"$search", "ipkey"=>"인증메일에서안내", "charset"=>"EUC-KR", "type"=>"new");
// charset이 UTF-8일경우 "UTF-8" 로 기재
// ipkey는 인증메일에서 안내합니다.
// 지번주소로 도로명주소를 찾기위한 검색 "type"=>"newdong" /* "가산동 371-50" 식으로 동/번지입력 */
// 지번주소로 찾기의 경우 http://post.phpschool.com/post.html 예를 참조바랍니다.
// 구주소검색일경우(구 우편번호로만 찾기) "type"=>"old"
$output = (HTTP_Post($url, $data));
$output = substr($output, strpos($output,"\r\n\r\n")+4);
$output = unserialize($output);
$result = $output['result'];
if ($result > 0) {
$post_data = unserialize($output['post']);
echo "검색건수 : {$output[result]}\n";
echo "검색시간 : {$output[time]}\n";
echo "조회횟수 : {$output[cnt]}\n";
echo "조회한도 : {$output[maxcnt]}\n";
for ($i=0; $i<$result; $i++) {
//$post_data[$i]['postnew']; // 새우편번호 (5자리)
//$post_data[$i]['post']; // 우편번호 (6자리)
//$post_data[$i]['addr_1']; // 시/도
//$post_data[$i]['addr_2']; // 구
//$post_data[$i]['addr_3']; // 도로명
//$post_data[$i]['addr_4']; // 동/건물
//$post_data[$i]['addr_5']; // 구주소 (도로명주소1:1매칭) 도로명주소검색일경우만 리턴
//$post_data[$i]['addr_eng']; // 영문주소 / 도로주소검색일경우만 리턴
print_r($post_data[$i]);
}
} else if ($result == 0) {
echo "검색결과가 없습니다.";
} else if ($result == -1) {
echo "검색결과가 너무 많습니다. 입력하신 검색어 $search 뒤에 단어를 추가해서 검색해보세요.";
} else if ($result < 0) {
echo "검색실패 : ".$output['message'];
}
// $result "-1" 일경우 : 너무많은검색결과 1000건이상
// $result "-2" 일경우 : 서버 IP 미인증
// $result "-3" 일경우 : 조회횟수초과
// $result "-4" 일경우 : 미인증 사용자
// 실제 구현 소스는 위에까지입니다. 아래는 소켓함수(curl로 구현가능)
function HTTP_Post($URL,$data) {
$URL_Info=parse_url($URL);
if(!empty($data)) foreach($data AS $k => $v) $str .= urlencode($k).'='.urlencode($v).'&';
$path = $URL_Info["path"];
$host = $URL_Info["host"];
$port = $URL_Info["port"];
if (empty($port)) $port=80;
$result = "";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
$http = "POST $path HTTP/1.0\r\n";
$http .= "Host: $host\r\n";
$http .= "Content-Type: application/x-www-form-urlencoded\r\n";
$http .= "Content-length: " . strlen($str) . "\r\n";
$http .= "Connection: close\r\n\r\n";
$http .= $str . "\r\n\r\n";
fwrite($fp, $http);
while (!feof($fp)) { $result .= fgets($fp, 4096); }
fclose($fp);
return $result;
}
?>
|
PHP json 예제
<?
$search = "가산 에이스"; // json은 UTF-8만 지원합니다. (결과값도 UTF-8로 리턴)
$url = "http://post.phpschool.com/json.phps.kr";
$data = array("addr"=>$search, "ipkey"=>"인증메일에서안내", "type"=>"new");
// ipkey는 인증메일에서 안내합니다.
// 구주소검색일경우 array("addr"=>$search, "ipkey"=>"XXX", "type"=>"old");
// 지번주소로 도로명주소를 찾기위한 검색 "type"=>"newdong" /* "가산동 371-50" 식으로 동/번지입력 */
// 지번주소로 찾기의 경우 http://post.phpschool.com/post.html 예를 참조바랍니다.
// 구주소검색일경우(구 우편번호로만 찾기) "type"=>"old"
$output = (HTTP_Post($url, $data));
$output = substr($output, strpos($output,"\r\n\r\n")+4);
$json = json_decode($output);
if ($json->result > 0) {
echo "검색건수 : {$json->result}\n";
echo "검색시간 : {$json->time}\n";
echo "조회횟수 : {$json->cnt}\n";
echo "조회한도 : {$json->maxcnt}\n";
foreach ($json->post as $key=>$value) {
//$value->postnew; // 새우편번호 (5자리)
//$value->post; // 우편번호 (6자리)
//$value->addr_1; // 시/도
//$value->addr_2; // 구
//$value->addr_3; // 도로명
//$value->addr_4; // 동/건물
//$value->addr_5; // 구주소 (도로명주소1:1매칭) // 도로명주소검색일경우만 리턴
//$value->addr_eng; // 영문주소 // 도로명주소검색일경우만 리턴
print_r($value);
}
} else if ($json->result == 0) {
echo "검색결과가 없습니다.";
} else if ($json->result == -1) {
echo "검색결과가 너무 많습니다. 입력하신 검색어 $search 뒤에 단어를 추가해서 검색해보세요.";
} else if ($json->result < 0) {
echo "검색실패 : ".$json->message;
}
// $result "-1" 일경우 : 너무많은검색결과 1000건이상
// $result "-2" 일경우 : 서버 IP 미인증
// $result "-3" 일경우 : 조회횟수초과
// $result "-4" 일경우 : 미인증 사용자
// 실제 구현 소스는 위에까지입니다. 아래는 소켓함수(curl로 구현가능)
function HTTP_Post($URL,$data) {
$URL_Info=parse_url($URL);
if(!empty($data)) foreach($data AS $k => $v) $str .= urlencode($k).'='.urlencode($v).'&';
$path = $URL_Info["path"];
$host = $URL_Info["host"];
$port = $URL_Info["port"];
if (empty($port)) $port=80;
$result = "";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
$http = "POST $path HTTP/1.0\r\n";
$http .= "Host: $host\r\n";
$http .= "Content-Type: application/x-www-form-urlencoded\r\n";
$http .= "Content-length: " . strlen($str) . "\r\n";
$http .= "Connection: close\r\n\r\n";
$http .= $str . "\r\n\r\n";
fwrite($fp, $http);
while (!feof($fp)) { $result .= fgets($fp, 4096); }
fclose($fp);
return $result;
}
?>
|
|
* 검색어 가이드 *
1. 우편번호 검색가능 : "153787" 또는 "153-787"
2. 여러단어 검색가능 : "가산디지털 에이스하이엔드" 또는 "서울 금천 가산 에이스"
3. 도로명주소와 1:1 매치되는 구주소제공(도로명주소 밑에 구주소표시때 사용)
4. 검색결과가 1000건이상의 경우 -1값 리턴 (소스참조)
5. 구주소로 도로명주소 찾기( type=newdong)
TEST페이지처럼 동과 번지를 분리 입력받고, 검색어값은 "가산동 371-50" 처럼
API에 사용하시면 됩니다!
도로명주소에 매치되는 구주소의 경우 DB에 "고척1동/고척2동 => 고척동" 으로 통일되서
제공되기때문에 자동으로 "고척동"으로 치환제공합니다.
"고척2동 339" "고척동 339번지" "고척 339" "고척2동 339"
=> 검색결과 같음
=> 번지앞만 입력해도 결과값을 받을 수 있니다.
(지마켓의 경우 동/번지가 일치해야 결과제공, "고척2동" 검색안됨)
- 페이징을 제공안하는 이유
검색결과가 많을경우 수천건을 수십페이지를 눌러가며 찾는것보다 검색단어를 한번더
입력하는게 더 효율적이기 때문입니다.
- 서울/부산등 지역 선택이 없는 이유
도로명이 중복되는 경우가 많지 않습니다. 따로 선택하는것이 의미가 없습니다.
지마켓등에서 실제 검색해보세요.ㅎ 너무나 불편합니다.
도로명주소의 경우 700만건에 이르는 데이터에서 검색하기때문에 충분한 안내가 필요합니다.
ex) 검색결과가 너무 많습니다. 입력하신 검색어 "가산" 뒤에 번지나 건물명을 추가입력해주세요.
|
|