어제는 카카오로그인을 하기위한 카카오api를 활용하기 위해서
json파서를 활용을 해보앗고 오늘은 공공데이터를 활용하면서
xml파일을 파싱하는법을 배운다 ! 드가자잇!
일단 xml파싱을 하기위해 라이브러리가 하나 필요하다 !
JDOM이라는 라이브러리이다!
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.6</version>
</dependency>
pom.xml에 이쁘게 추가를 해주자 ! 항상 Dependencies카테고리에 제대로 추가가 되었는지 보고 넘어가즈앗!
이렇게 하고나서 신청했던 공공데이터에 보면인증키와 api문서가 있다 ! 문서를 보면 사용법과 인증키를 넣는 곳이 이쁘게 잘 나와있다!!
이렇게 하고 나서 vo객체를 하나 만들었다.
vo객체에 변수명은 내가가져오고싶은 공공데이터의 프로퍼티명과 같은 이름으로 했다 !
private String title, tel, addr1, addr2, firstimage,
firstimage2, createdtime, mapx, mapy;
이렇게 만들었다!!
이제 공데에서 필수로 보내달라한 값들을 전달해보즈아!
컨트롤러를 하나 만들자
@RequestMapping("/")
public String index(Model m) throws Exception{
StringBuffer sb = new StringBuffer("http://api.visitkorea.or.kr/openapi/service/rest/KorService/areaBasedList?");
sb.append("ServiceKey={서비스키}");
sb.append("&areaCode=35");
sb.append("&MobileOS=ETC");
sb.append("&MobileApp=AppTest");
sb.append("&pageNo=1");
sb.append("&numOfRows=10");
URL url = new URL(sb.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
문서에보면 필수적으로 보내줘야하는 값들이 있다!
하라는대로 보내주자 !! 서비스키에는 내가 발급받은 키를 넣어주자!
이렇게보내주고 나서 응답을 받을 데이터의 형식!(마임타입)과
어떤 요청을 할것인지 담았으니 보내보자!!
conn.setRequestProperty("Content-Type","application/xml");
conn.connect();
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(conn.getInputStream());
Element root = document.getRootElement();
//루트의 자식!이니까 child를 얻어야한다!
Element body = root.getChild("body");
//body안에 있는 items라는 엘리먼트를 얻어야한다.
Element items = body.getChild("items");
//items안에있는 자식들을 가져오자 ! 여러개니까 리스트여야겠지 ? 타입은 엘리먼트 !!
List<Element> item_list = items.getChildren("item");
DataVO[] ar = new DataVO[item_list.size()];
int i = 0;
for(Element item:item_list) {
String title = item.getChildText("title");
String createdtime = item.getChildText("createdtime");
String addr1 = item.getChildText("addr1");
String addr2 = item.getChildText("addr2");
String firstimage = item.getChildText("firstimage");
String firstimage2 = item.getChildText("firstimage2");
String mapx = item.getChildText("mapx");
String mapy = item.getChildText("mapy");
String tel = item.getChildText("tel");
DataVO vo = new DataVO(title, tel, addr1, addr2, firstimage, firstimage2, createdtime, mapx, mapy);
ar[i++] = vo;
이렇게 받아온 데이터를 list라는 이름으로 세션에 저장하고
index페이지에 표현하자 !
m.addAttribute("list", ar);
return "index";
good~