공공데이터 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" 값을 추가해주었습니다.
터미널에서 테이블 내용 보기를 하면 잘 보이는 것을 확인할 수 있습니다.