Map(WEB)

오픈 API를 이용한 법정동 코드 조회(4) - PHP(1)

별동산 2025. 2. 27. 08:11
반응형

JavaScript로 작성한 funciton을 PHP로 구현해 보겠습니다.
 
WebHosting은 대부분 APM(Apache + PHP + MySql)으로 구성된 것이 많으므로 PHP를 이용할 수 있습니다.

PHP는 서버단에서 작동하는 언어라는 것이 자바스크립트와 다릅니다.
 
html과 php를 연결해서 구현하려고 하다 보니 어려워서 PHP 먼저 하고,
다음 편에서 두 개를 연결하는 것을 해보겠습니다.
 

1. 코드 1

 

가. 코드

파일명은 get_legal_code.php입니다.

<?php
include "./wp-admin/config.php";

/*
$dong = isset($_GET['dong']) ? $_GET['dong'] : '';

if (empty($dong)) {
    die("URL parameter is missing");
}
*/

$dong = '서울특별시 영등포구 여의도동';

$HttpUrl = "http://apis.data.go.kr/1741000/StanReginCd/getStanReginCdList";

$parameter = "?" . "ServiceKey" . "=" . $DatagokrKey;
$parameter .= "&" . "type" . "=" . "json";
$parameter .= "&" . "locatadd_nm" . "=" . urlencode($dong);

$searchUrl = $HttpUrl . $parameter;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $searchUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, FALSE);    
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");  

$response = curl_exec($ch);
//echo $response;

curl_close($ch);

// JSON을 PHP 배열로 변환
$data = json_decode($response, true);

// region_cd 값 뽑아내기
$region_cd = $data['StanReginCd'][1]['row'][0]['region_cd'];

// 결과 출력
echo $region_cd;

?>

 
 

나. 코드 설명

 
(1) 인증 키 정보 불러오기

include "wp-admin\config.php";

 
config.php 파일을 불러들이는 것입니다.
config.php 파일에 공공데이터포털의 인증키가 $DatagokrKey로 등록되어 있고, Vworld의 인증키로 등록해 놓았습니다.

<?
$DatagokrKey='R2DQ7b...';
$VworldKey='57BB...';
?>

 
 
(2) 동 정보 처리하기

/*
$dong = isset($_GET['dong']) ? $_GET['dong'] : '';

if (empty($dong)) {
    die("URL parameter is missing");
}
*/


$dong = '서울시 영등포구 여의도동';

 
isset($_GET['dong']) ? $_GET['dong'] : '';
 => 동 정보가 있으면 $dong에 정보를 입력하고 없으면 ''(공백)으로 합니다.
 
if (empty($dong)) {
    die("URL parameter is missing");
}
 => 동 정보가 비어 있으면 'URL parameter가 없다는 메시지를 보이고 프로그램을 종료합니다.
 
html과 연결해서 처리하지 않기 때문에 get 변수로 '동 이름'이 넘어오지 않아서 프로그램이 종료되기 때문에 주석 처리하고,
 
$dong = '서울시 영등포구 여의도동'; 으로 $dong에 직접 '동 이름'을 지정했습니다.
 
 
(3) 법정동 검색 URL 만들기

$HttpUrl = "http://apis.data.go.kr/1741000/StanReginCd/getStanReginCdList";

$parameter = "?" . "ServiceKey" . "=" . $DatagokrKey;
$parameter .= "&" . "type" . "=" . "json";
$parameter .= "&" . "locatadd_nm" . "=" . urlencode($dong);

$searchUrl = $HttpUrl . $parameter;

 
JavaScript로 했던 것과 유사한데, 변수명에 $가 붙어 있고, 문자열을 연결하는 것이 +가 아니라 .(마침표)인 것이 다릅니다.


또한 $dong에 공백이 들어가 있어서(예, 서울특별시 영등포구 여의도동) urlencode 함수를 사용했습니다.
 
 
(4) 법정동 코드 검색하기

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $searchUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, FALSE);    
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");  

$response = curl_exec($ch);
//echo $response;

curl_close($ch);

 
몇십 년 전부터 curl을 사용했는데 
요즈음도 이것을 사용하는지 모르겠네요.
 
위와 같이 초기화하고, 환경을 설정한 다음, curl_exec($ch)로 검색을 실행합니다.
 
그리고, 그 결과를 $response에 넣고, echo로 브라우저 창에 표시합니다.
 
curl_close($ch); 는 curl을 닫는 것입니다.
 
 
(5) JSON Parsing
JavaScript와 약간 다릅니다.

// JSON을 PHP 배열로 변환
$data = json_decode($response, true);

// region_cd 값 뽑아내기
$region_cd = $data['StanReginCd'][1]['row'][0]['region_cd'];

// 결과 출력
echo $region_cd;

 
json_decode를 이용해 JSON 파일을 디코딩하고,
 
배열과 키를 이용해서 region_cd의 값을 구해서 $region_cd 변수에 담고
echo $region_cd를 이용해 브라우저 창에 표시합니다.

 

JavaScript와 PHP의 JSON 파싱을 비교하면 아래와 같습니다.

JavaScript PHP
const obj = JSON.parse(this.responseText);
console.log(obj);
const regionCd = obj.StanReginCd[1].row[0].region_cd;
$data = json_decode($response, true);

$region_cd = $data['StanReginCd'][1]['row'][0]['region_cd'];
① JSON.parse 함수 사용
② 키(Key)를 점(.)으로 연결
① json_decode 함수 사용
② 키 (Key) 를 대괄호와 작은 따옴표 안에 표시
③ 배열을 지정하는 것은 대괄호 안에 인덱스 지정으로 동일


 

다. 실행 결과

실행하면 여의도동의 법정동 코드가 브라우저 창에 표시됩니다.

 
그런데 이상하게 
echo $response;와
echo $region_cd;가 모두 있으면
첫 번째 $response의 결과만 표시되고,
두 번째 $region_cd의 결과는 표시되지 않아 첫 번째 echo 문은 주석처리했습니다.

반응형