오픈 API를 이용한 법정동 코드 조회(4) - PHP(1)
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 문은 주석처리했습니다.