본문 바로가기
서버 및 웹/PHP

[php] 공공데이터 API 불러온 뒤 mysql에 저장하기

by na.__.na 2019. 5. 15.

공공데이터 API의 데이터 정보를 mysql에 저장하는 예제입니다.

 

전체 코드

 

<?php
include_once('simple_html_dom.php');

$con = mysqli_connect($db_host,$db_user,$db_passwd,$db_name);

if(mysqli_connect_errno($con)){
  echo "데이터베이스 연결 실패했습니다.:  " . mysqli_connect_error();
}

mysqli_set_charset($con, "utf8");


$html = file_get_html('http://apis.data.go.kr/B553077/api/open/sdsc/storeListInPolygon?key=POLYGON%20((127.205640%2037.237152,127.206675%2037.237495,127.206961%2037.237515,127.207318%2037.237546,127.207636%2037.237537,127.208455%2037.237435,127.208589%2037.236252,127.206435%2037.236070,127.206392%2037.236309,127.205767%2037.236205))&ServiceKey=서비스키&numOfRows=1000&type=json');

$result_json = json_decode($html,true);
#print_r($result_json);


for ($i=0; $i<=1000; $i++) {

  foreach($result_json['body']['items'] as $arr){
      if(mysqli_query($con, "INSERT INTO NEW_Store (`num`,`market`,`lon`,`lat`) VALUES ('". $arr['bizesId'] ."','Yongin','". $arr['lon'] ."','". $arr['lat'] ."')")){
      }
  }
 }

     mysqli_close($con);

?>

 

 

코드를 한 줄씩 보도록 하겠습니다.

 

include_once('simple_html_dom.php');

 

php에서 크롤링 및 웹페이지 파싱을 하기 위해서는 정규식을 이용하여 원하는 html을 파싱해야하는데,

그러한 번거로움 없이 쉽게 해주는 것이 simplehtmldom입니다.  (https://simplehtmldom.sourceforge.io/)

위의 링크에서 다운 받은 후 사용하려는 php와 같은 폴더에 넣어주기만 하면 됩니다.

 

$con = mysqli_connect($db_host,$db_user,$db_passwd,$db_name);

if(mysqli_connect_errno($con)){
  echo "데이터베이스 연결 실패했습니다.:  " . mysqli_connect_error();
}

mysqli_set_charset($con, "utf8");


$html = file_get_html('http://apis.data.go.kr/B553077/api/open/sdsc/storeListInPolygon?key=POLYGON%20((127.205640%2037.237152,127.206675%2037.237495,127.206961%2037.237515,127.207318%2037.237546,127.207636%2037.237537,127.208455%2037.237435,127.208589%2037.236252,127.206435%2037.236070,127.206392%2037.236309,127.205767%2037.236205))&ServiceKey=서비스키&numOfRows=1000&type=json');

 

저는 소상공인진흥공단의 "다각형내 상가업소 조회" API를 사용하였습니다.

공공데이터포털(https://www.data.go.kr/search/index.do)에서 다운받을 수 있습니다.

데이터베이스에 연결한 뒤 메뉴얼의 형식대로 주소를 입력해줍니다.

해당 폴리곤 다각형은 용인중앙시장입니다.

 

$result_json = json_decode($html,true);
print_r($result_json);

불러온 API를 json으로 출력해봅시다.

 

결과: 다음 이미지와 같이 잘 출력되었음을 확인할 수 있습니다.

헤더에는 카테고리가, 바디에는 내용이 입력되어있음을 확인할 수 있습니다.

 

for ($i=0; $i<=1000; $i++) {

  foreach($result_json['body']['items'] as $arr){
      if(mysqli_query($con, "INSERT INTO NEW_Store (`num`,`market`,`lon`,`lat`) VALUES ('". $arr['bizesId'] ."','Yongin','". $arr['lon'] ."','". $arr['lat'] ."')")){
      }
  }
 }

 

 

body > items 속에 있는 'num', 'lon', 'lat'을 저의 데이터베이스 속의 "NEW_Store" 테이블에 넣어주었습니다.

그 중 'market'은 string으로 "Yongin" 값을 추가해주었습니다.

 

터미널에서 테이블 내용 보기를 하면 잘 보이는 것을 확인할 수 있습니다.