Programming/PHP / / 2020. 3. 12. 09:50

공공데이터포털 API 사용 방법(feat. 나라장터)

728x90

공공데이터포털(https://www.data.go.kr)에 가입을 하셨고 로그인을 했다고 가정을 하고 시작합니다.

공공데이터포털에 이미 계정이 있고 인증키까지 받으셨다면 상관이 없지만 처음이라면 무조건 익스플로러로 접속하시는 게 정신 건강이 이롭습니다. 인증키를 발급받을 때 그렇게 떠요.

 

저는 보시듯이 공고명에 '홈페이지'로 검색을 했을 때 나오는 목록을 갖고 오도록 하겠습니다.

우선은 나라장터는 국가에서 운영(맞나요?)하는 데고 그러면 API가 존재할 거라고 확신(!!)을 하고 공공데이터포털을 뒤집니다.

총 17건이 나왔고 오픈API에 12건이나 있다고 합니다.

저는 여기에서 필요한 게 나라장터에 있는 입찰공고 목록이 필요한 것입니다.

다행스럽게도 있네요. 클릭을 해서 들어갑니다.

위에 보시면 버튼들이 보이는데 공공데이터포털이 처음이시면 딱 한 번 활용신청 버튼을 눌러서 아래 페이지로 이동을 합니다.

이제 여기에서 시스템 유형, 활용정보, 상세기능정보 등을 자신과 맞는 것으로 선택해서 신청을 합니다.

 

신청을 한 후 다시 마이페이지로 가서 보면 위처럼 활용 1건이라고 나옵니다. 그리고 하단에 승인이 되어 나오구요.

클릭을 해서 들어가면 위처럼 화면이 나옵니다. 서비스정보 부분에 보시면 일반 인증키(UTF-8)이 비어 있습니다. 아직 인증키를 신청한 상태가 아니니까요. 현재 페이지 상단에 보시면 일반 인증키 받기 버튼이 있으니 클릭을 해서 받으세요. 인증키는 대략 1시간 정도 지나야 활성화가 된다고 하니 최대한 빨리 받으시는 게 좋습니다.

인증키가 활성화되는 동안 참고문서 부분에 있는 파일을 다운로드 받아서 보세요. 매뉴얼이니 꼭 확인하셔야 합니다.

매뉴얼이라곤 하지만 페이지가 후덜덜합니다. 중요한 건 다 볼 필요는 없고 자기가 신청한 것만 보면 됩니다.

제가 신청한 것은 위에 서비스명에 나라장터 입찰공고정보서비스라고 나오네요. 이걸 그대로 복사해서 매뉴얼에서 찾아보세요. 띄어쓰기가 그대로 되어 있으니 검색될 겁니다.

여기서 중요한 것은 딱 두 가지입니다.

위에 End Point라고 된 부분에 있는 URL과 매뉴얼에 있는 오퍼레이션 목록이라고 된 부분입니다.

End Point : http://apis.data.go.kr/1230000/BidPublicInfoService

오퍼레이션 명 : getBidPblancListInfoServcPPSSrch

저는 나라장터에서 입찰공고에 대한 검색 결과를 받으면 됩니다. 아래 이미지를 보시면 홈페이지로 검색을 했을 때 나온 결과값인데 업무 부분에 용역이라고 되어 있습니다.

그래서 매뉴얼에 있는 오퍼레이션 목록에서 나라장터, 입찰공고, 용역 이 세 단어를 조합해서 찾아봤습니다.

그랬더니 오퍼레이션 명이 위처럼 나오네요.

이제 이 두 가지를 합칩니다.

http://apis.data.go.kr/1230000/BidPublicInfoService/getBidPblancListInfoServcPPSSrch 

여기에서 필수로 붙여야 하는 것들이 나옵니다.

inqryDiv : 조회 구분

inqryBgnDt : 조회 시작 일시

inqryEndDt : 조회 종료 일시

numOfRows : 한 페이지 결과 수(사실 한 페이지라고 되어 있지만 페이징이 귀찮아서 그냥 100)

encoding : UTF-8로 받아야 하니까

ServiceKey : 아까 받은 인증키

type : 결과를 xml로 받을지 json으로 받을지

bidNtceNm : 검색어

저는 필요한 게 대략 이 정도였네요.

이제 이것들을 다 조합해서 cURL을 이용해서 갖고 오면 됩니다.

 

파싱을 할 주소는 위 방법대로 하셔도 되지만 제일 좋은 방법은 위 이미지를 보시면 참고문서라고 된 게 있습니다. ms-word 파일인데 그 파일을 다운로드 후 열어 보시면 아래 이미지처럼 된 부분이 있습니다.

REST(URI)라고 된 부분의 주소를 그대로 복사해서 $url 변수에 넣어주시면 됩니다. 편하고 쉽습니다.

 

 

header("Content-Type: text/html; charset=UTF-8");
$url = "http://apis.data.go.kr/1230000/BidPublicInfoService/getBidPblancListInfoServcPPSSrch?inqryDiv=1&inqryBgnDt=202003010000&inqryEndDt=202003122359&pageNo=1&numOfRows=100&ServiceKey=&type=json&encoding=UTF-8&arrange=B&bidNtceNm=".urlencode('홈페이지');
curl_setopt($ch, CURLOPT_URL, $url);
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);
$datas = json_decode($response);

foreach($datas->response->body->items as $key => $value) {
	echo $value->bidNtceNm;
}

대충 이런 식으로 하시면 됩니다.

반응형