공공데이터포털(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;
}
대충 이런 식으로 하시면 됩니다.
'Programming > PHP' 카테고리의 다른 글
문자열 랜덤으로... (0) | 2020.04.20 |
---|---|
위, 아래 br 제거 (0) | 2020.03.13 |
파일 확장자 갖고 오기 (0) | 2020.02.15 |
자신이 쓰고 있는 호스팅이 32인지 64인지... (0) | 2020.02.13 |
[PDO]SQLSTATE[HY000]: General error: 2014 Cannot execute queries... (0) | 2020.02.13 |