[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;
}
%>

이 글을 본 방문자들에게 도움이 되었으면 좋겠습니다. 궁금한 것이 있으면 댓글 남겨주세요. 아는 부분한에서 최대한 답해드리겠습니다.

댓글

Designed by JB FACTORY