공공데이터 오픈 API 사용 방법 - PHP버전(관광데이터 기준)

IT/빅데이터|2020. 5. 22. 12:27

정부에서 제공하는 공공데이터를 활용하여 워드프레스에서 제공하는 사이트 개발에 관심이 많아 몇몇 사이트를 개발하고 있습니다. 이미 한개의 사이트는 오픈해 봤네요.

 

7개국의 언어를 기반으로 사용자 현재 위치 기반 다양한 관광정보(문화센터, 음식, 관광지 등)를 제공하는 사이트

(지금은 사이트 폐쇄했써요...)

 

제가 사용한 공공데이터는 주로 관광데이터이고, 공공데이토포털에서는 친절하게 개발언어별 사용하는 가이드를 알려 주고 있습니다.

 

하지만 공공데이터 포털에서 제공하는 가이드를 따라하다 보니 여러 시행착오가 있어 제가 개발작업하면서 겪었던 에로사항 중 PHP를 가지고 오픈 API기반 공공데이터를 불러오고 사이트 화면에 표시하는 방법에 대해서 설명합니다. 

 

 

 

 

1. 공공데이터 포털에 계정을 생성합니다.

 

https://www.data.go.kr/

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다.

www.data.go.kr

공공데이터 포털은 정부에서 운영하는 공공데이트 제공 사이트 입니다. 파일 데이터, 오픈 API 등 다양한 방식으로 사용자의 편의에 따라 사용가능하도록 많은 데이터를 제공하고 있습니다.

 

 

제가 위 관광정보 제공 사이트를 개발하면서 사용한 데이터는 국문, 영문, 불어 등 언어별 관광정보 데이터 입니다. 오픈 API를 사용하여 데이터를 호출하는 방식으로 사용하고 있습니다.

 

위 사이트에 접속하여 먼저 사용자 계정을 만듭니다. 

 

2. 관광 데이터 사용을 신청합니다.

 

PHP를 사용하여 오픈API를 호출한 데이터 사용을 설명할 예정이므로 제가 한번 해본 방식기반으로 설명하겠습니다. PHP는 현재 워드프레스에서 사용하고 있는 웹기반 프로그래밍 언어입니다.

 

 

검색에 '국문관광'이라고 검색하고 오픈api탭으로 이동하면 '국문관광정보서비스'라는 메뉴가 있습니다. 이동하여 사용 신청을 합니다. 

 

 

- 개발과 운영을 신청할 수 있고 개발일 경우 사용 요청 시 자동승인 되며, 운영일 경우 별도 심사를 거쳐 사용 승인이 완료 됩니다.

 

 

 

데이터 사용 요청 시 개발을 선택하여 신청하도록 합니다. 이유는 개발은 별도 승인 절차 없이 자동 승인으로 신청 후 바로 사용이 가능합니다. 실습을 위해 우선 개발 사용을 선택하도록 합니다.

 

관광정보는 언어별로 신청할 수 있습니다. 사용이 용이한 국문관광정보를 우선 사용해 볼 예정입니다만 아래 단계까지 원활히 진행하여 추가적인 개발을 하고자 한다면 추가 언어 관광정보를 신청하여 사용하시면 됩니다.

 

3. 신청 완료 후 발급받은 서비스키를 별도 저장 관리 합니다.

 

오픈 API는 별도 인증받은 키값을 가지고 API호출하는 방식입니다. 방식은 키값을 호출하는 URL의 키 Filed에 입력하여 호출하면 데이터가 XML또는 JSON형태로 반환되는 구조 입니다.

 

 

이 키는 본인이 사용할 중요한 키 값이므로 보안에 유의하도록 합니다. 개발이라고 해도 일별 호출해서 사용할 수 있는 용량이 정해져 있으므로 과도한 테스트는 지양하도록 하세요.

 

4. 아래 PHP코드를 참고하여 오픈 API로 부터 데이터를 호출하여 PHP 변수에 저장합니다.

 

아래 예시는 제가 신청하여 사용하고 있는 관광 데이터 소스 내역이며 본인이 발급받은 서비스 키를 입력하면 됩니다. 

 

$ch = curl_init();
$url = 'http://api.visitkorea.or.kr/openapi/service/rest/KoeService/areaBasedList?serviceKey='본인의 서비스 키 입력'&numOfRows=1000&pageSize=10&pageNo=1&startPage=1&MobileOS=ETC&MobileApp=AppTest&listYN=Y&arrange=A";

curl_setopt($ch, CURLOPT_URL, $url . $queryParams);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

$object = simplexml_load_string($response );

echo $object;

소스를 간단히 설명하면 지역 기반으로 1000개의 관광정보를 호출하는 URL입니다. 위에 보이는 KorService가 국문관광정보 호출 서비스라는 식별 필드 입니다. 

 

영문이나 스페인어, 불어등과 같은 다른 언어를 신청하여 사용할 경우 URL 전체 구조는 동일하나 언어 식별 필드값이 변합니다. 유의해서 개발 진행하시기 바랍니다.

 

 

이렇게 호출한 데이터를 response라는 변수에 담습니다. 참고로 URL 마지막에 _type=json이라는 필드값이 별도로 없을 경우 응답되는 데이터 유형은 XML형태입니다.

 

response에 담겨진 XML데이터는 전체 1000개의 데이터 입니다. 이 데이터를 string 형식으로 object 변수에 넣고 echo문으로 호출하면 사이트에 1000개의 데이터가 xml포맷으로 출력됩니다.

 

응답받은 데이터 중 특정 컬럼만 추출해서 표시하고 싶다면 아래와 같이 사용하시면 됩니다. 

 

$contentId = $object->body->items->item->contentid;

 

여기서 contentid는 특정 관광 타입의 키값입니다. contentId라는 PHP변수를 선언하면서 응답받은 contentid값을 담으면 1000개의 contentid가 contentId변수로 입력되게 됩니다. 

 

이제 이렇게 입력받은 데이트를 변수에 넣은 다음 사이트 목적에 맞게 적절히 출력하거나 for문등으로 키값을 제어하여 리스트 형식으로 보여지는 개발을 진행하시면 됩니다. 

댓글()