[Jsp] 웹에서 공공기관 api 파싱하기

웹개발을 하다보면 웹사이트에 공공기관 api를 파싱해야될 상황이 올때가 있습니다. 저는 부산 여행 웹사이트를 제작하면서 부산 여행지 api를 가지고 와야 하는 부분이 있어 파싱을 하게 되었고, 다른 예로는 홈페이지에 날씨정보를 띄우고싶어 기상청 정보를 들고 오고 싶을때(?) 정도가 있겠군요.


이번 웹사이트를 만들면서 제일 어려웠던 부분이 파싱부분이였습니다. 제가 몇일동안 밤을 지새면서 알아낸 코드를 공유합니다. JSP에서 공공기관 API를 노드형식으로 파싱하는 코드입니다.


웹에서 공공기관 api파싱하기

<%
String dataUrl = null;
double dataUrl2;//X좌표
double dataUrl3;//Y좌표
String dataUrl4;//제목
String dataUrl5;//이미지

boolean indataUrl=false;
boolean indataUrl2=false;
boolean indataUrl3=false;
boolean indataUrl4=false;
boolean indataUrl5=false;

String option=list.get(select);

try {
    String strUrl = "http://tourapi.busan.go.kr/openapi/service/BusanTourInfoService/getStayDetail?
ServiceKey=iOsw4MlgRU0JZpvuR5AkLUfkX%2FAOl0Q03HF78VRzR2g0dz6iD0esiw6HmLHKly6PVvGVP2PPgRpqtpULJBWSHg%3D%3D&
data_sid="+option;

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(strUrl);
    
    NodeList nodeUrl = document.getElementsByTagName("dataContent"); //파싱하고싶은 태그
    dataUrl = nodeUrl.item(0).getFirstChild().getNodeValue();
    
    NodeList nodeUrl2 = document.getElementsByTagName("wgsx"); //파싱하고싶은 태그
    dataUrl2 =Double.parseDouble(document.getElementsByTagName("wgsx").item(0).getFirstChild().getNodeValue());
    
    NodeList nodeUrl3 = document.getElementsByTagName("wgsy"); //파싱하고싶은 태그
    dataUrl3 =Double.parseDouble(nodeUrl3.item(0).getFirstChild().getNodeValue()); // 2014.03.29 수정
    
    NodeList nodeUrl4 = document.getElementsByTagName("dataTitle"); //파싱하고싶은 태그
    dataUrl4 = nodeUrl4.item(0).getFirstChild().getNodeValue();
    
    NodeList nodeUrl5 = document.getElementsByTagName("img1thumb"); //파싱하고싶은 태그
    dataUrl5 = nodeUrl5.item(0).getFirstChild().getNodeValue();
    
} catch(Exception e) {
    throw e;
}%>
위에 보이시는 strUrl에다가는 자신이 파싱하고싶은 공공기관 api의 URL을 넣으면 됩니다.
(API를 신청하면 딸려오는 기술문서를 참고)

이렇게 파싱해서 받아온 정보를 맵(Map)에 넣을수도 있습니다.

<%
Map<string,string>list = new HashMap<string,string>();
Iterator<string> iterator = list.keySet().iterator();

String select = request.getParameter("textfield");
select = new String(select.getBytes("8859_1"),"euc-kr"); 

try {
    String strUrl = "http://tourapi.busan.go.kr/openapi/service/BusanTourInfoService/getLuxuryTourList?
ServiceKey=iOsw4MlgRU0JZpvuR5AkLUfkX%2FAOl0Q03HF78VRzR2g0dz6iD0esiw6HmLHKly6PVvGVP2PPgRpqtpULJBWSHg%3D%3D&numOfRows=112";
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(strUrl);
    NodeList nodeUrl = document.getElementsByTagName("dataTitle");
    NodeList nodeUrl2 = document.getElementsByTagName("dataSid");

for(int i=0;i<112;i++)
{
    list.put(nodeUrl.item(i).getFirstChild().getNodeValue(),nodeUrl2.item(i).getFirstChild().getNodeValue());
} 
}catch(Exception e) {
    throw e;
}
%>

이 글을 본 방문자들에게 도움이 되었으면 좋겠습니다.

궁금한것이 있으면 댓글남겨주세요. 아는부분한에서 최대한 답해드리겠습니다.


[Android] 공공기관 API 신청 및 파싱하기(검색기능구현)


댓글(3)

  • 1234
    2017.11.07 20:34

    자바 오픈 API 로 받은 상품내역이 있는데 정렬이 하나도 안되어있어요.. 파싱해서 정렬 할 수 있는 방법이 있을까요?

    • 2017.11.07 20:45 신고

      어떤식으로 정렬하실 생각이시죠? 저같으면 파싱한정보를 리스트에 넣고 정렬할 방법을 찾아볼거같아요

  • ㅁㄴㅇㄹ
    2018.03.30 22:31

    좋은 코드 감사합니다

Designed by JB FACTORY