2019. 7. 25. 19:11ㆍJAVA
#1 API가 제공하는 XML문서를 파싱하여 사용한다.
#2 제공되는 XML은 다음과 같다.
#3 먼저 console에서 확인해보기 위한 코드이다.
package com.myproject.myapi; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; public class apitest { public static void main(String[] args) { // 지역코드 List에 담기 List<String> regId = new ArrayList<String>(); String strid = "11B10101@" + "11B20201@" + "11B20601@" + "11B20605@" + "11B20602@" + "11B10103@" + "11B10102@" + "11B20606@" + "11B20603@" + "11B20609@" + "11B20612@" + "11B20610@" + "11B20611@" + "11B20604@" + "11B20503@" + "11B20501@" + "11B20502@" + "11B20504@" + "11B20701@" + "11B20703@" + "11B20702@" + "11B20301@" + "11B20302@" + "11B20305@" + "11B20304@" + "11B20401@" + "11B20402@" + "11B20403@" + "11B20404@" + "11B20101@" + "11B20102@" + "11B20202@" + "11B20204@" + "11B20203@" + "11A00101@" + "11H20201@" + "11H20101@" + "11H20304@" + "11H20102@" + "11H20301@" + "11H20601@" + "11H20603@" + "11H20604@" + "11H20602@" + "11H20701@" + "11H20704@" + "11H20402@" + "11H20502@" + "11H20503@" + "11H20703@" + "11H20501@" + "11H20401@" + "11H20403@" + "11H20404@" + "11H20405@" + "11H10701@" + "11H10702@" + "11H10703@" + "11H10704@" + "11H10705@" + "11H10601@" + "11H10602@" + "11H10603@" + "11H10604@" + "11H10605@" + "11H10501@" + "11H10502@" + "11H10503@" + "11H10302@" + "11H10301@" + "11H10303@" + "11H10401@" + "11H10402@" + "11H10403@" + "11H10101@" + "11H10102@" + "11H10201@" + "11H10202@" + "1.10E+102@" + "1.10E+103@" + "11F20501@" + "11F20503@" + "11F20502@" + "11F20504@" + "11F20505@" + "21F20102@" + "21F20101@" + "21F20801@" + "21F20804@" + "21F20802@" + "21F20201@" + "21F20803@" + "11F20701@" + "11F20603@" + "11F20405@" + "11F20402@" + "11F20601@" + "11F20602@" + "11F20301@" + "11F20303@" + "11F20304@" + "11F20302@" + "11F20401@" + "11F20403@" + "11F20404@" + "11F10201@" + "11F10202@" + "21F10501@" + "11F10203@" + "21F10502@" + "11F10401@" + "21F10601@" + "11F10302@" + "21F10602@" + "11F10403@" + "11F10204@" + "11F10402@" + "11F10301@" + "11F10303@" + "11C20401@" + "11C20404@" + "11C20402@" + "11C20602@" + "11C20403@" + "11C20601@" + "11C20301@" + "11C20302@" + "11C20303@" + "11C20101@" + "11C20102@" + "11C20103@" + "11C20104@" + "11C20201@" + "11C20202@" + "11C20502@" + "11C20501@" + "11C10301@" + "11C10304@" + "11C10303@" + "11C10102@" + "11C10101@" + "11C10103@" + "11C10201@" + "11C10202@" + "11C10302@" + "11C10403@" + "11C10402@" + "11C10401@" + "11D10101@" + "11D10102@" + "11D10201@" + "11D10202@" + "11D10301@" + "11D10302@" + "11D10401@" + "11D10402@" + "11D10501@" + "11D10502@" + "11D10503@" + "11D20201@" + "11D20401@" + "11D20402@" + "11D20403@" + "11D20501@" + "11D20601@" + "11D20602@" + "11D20301@" + "11G00201@" + "11G00401@" + "11G00101@" + "11G00501@" + "11G00302@" + "11G00601@" + "11G00800@" + "12F00200@" + "12F00100@" + "12B20100@" + "12B20200@" + "12B10100@" + "12D00000@" + "1.20E+01@" + "12C10100@" + "12C10201@" + "12C10202@" + "12C30100@" + "12C30200@" + "12C20100@" + "12C20200@" + "12A30100@" + "12A30201@" + "12A30202@" + "12A10100@" + "12A10200@" + "12A20200@" + "12A20100@" + "12G00000@" + "12B10400@" + "12B10300@" + "12A20102@" + "12A20101@" + "12B20103@" + "12C10101@" + "12B20102@" + "12B20101@" + "12B20104@" + "12C10102@" + "12C10103@" + "22A30103@" + "22A30104@" + "22A30105@" + "12B10101@" + "12B10102@" + "22A30101@" + "22A30102@" + "12A20103@" + "12A20104@" + "12C20103@" + "12C20102@" + "12C20101@" + "12B10302@" + "12B10303@" + "12B10301@" + "12B10304@" + "12B10201@" + "12B10202@"; String[] strid2 = strid.split("@"); for (int i = 0; i < strid2.length; i++) { regId.add(strid2[i]); } BufferedReader br = null; String serviceKey = "인증키"; for (int k = 0; k < regId.size(); k++) { String urlstr = "http://newsky2.kma.go.kr/service/ForecastZoneInfoService/ForecastZoneCodeDataInfo?" + "regId=" + regId.get(k) // 구역 코드 + "&" + "pageNo=1" // 페이지 수 + "&numOfRows=1" + "&" + "ServiceKey=" + serviceKey; try { URL url = new URL(urlstr); HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection(); urlconnection.setRequestMethod("GET"); br = new BufferedReader(new InputStreamReader(urlconnection.getInputStream(), "UTF-8")); String result = ""; String line; while ((line = br.readLine()) != null) { result = result + line + "\n"; } // while System.out.println(result); } catch (Exception e) { System.out.println(e.getMessage()); } // catch } }// main }
|
#4 XML을 파싱하여 사용해보자
package com.myproject.myapi;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
public class xmlParing { //item 정보를 가져오는 메소드 private static String getTagValue(String tag, Element ele) { NodeList nodeList = ele.getElementsByTagName(tag).item(0).getChildNodes(); Node nValue = (Node) nodeList.item(0); if(nValue == null) { return null; } return nValue.getNodeValue(); }// getTagValue
public static void main(String[] args) { String serviceKey = "인증키"; int page =1; //페이지 초기값 try { while(true) { //parsing할 url 지정 String url = "http://newsky2.kma.go.kr/service/ForecastZoneInfoService/ForecastZoneCodeDataInfo?" + "regId=11B10101" // 구역 코드 + "&" + "pageNo="+page // 페이지 수 + "&numOfRows=1" + "&" + "ServiceKey=" + serviceKey; DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(url);
//root tag doc.getDocumentElement().normalize(); System.out.println("Root Element : "+doc.getDocumentElement().getNodeName());
// parsing tag NodeList nodeList = doc.getElementsByTagName("item"); System.out.println("파싱할 리스트 수 : "+ nodeList.getLength()); for(int temp =0; temp<nodeList.getLength(); temp++) { Node nNode = nodeList.item(temp); if(nNode.getNodeType()==Node.ELEMENT_NODE) { Element element = (Element) nNode; System.out.println("##########################"); System.out.println("위도: "+getTagValue("lat", element)); System.out.println("경도: "+getTagValue("lon", element)); System.out.println("예보구역명(영문): "+getTagValue("regEn", element)); System.out.println("예보구역코드: "+getTagValue("regId", element)); System.out.println("예보구역명(한글): "+getTagValue("regName", element)); System.out.println("지역특성: "+getTagValue("regSp", element)); System.out.println("상위구역코드: "+getTagValue("regUp", element)); System.out.println("순번: "+getTagValue("seq", element)); System.out.println("3시간예보관서: "+getTagValue("stnF3", element)); System.out.println("종료시각: "+getTagValue("tmEd", element)); System.out.println("시작시각: "+getTagValue("tmSt", element)); }//if }//for page += 1; if(page >12) { break; } }//while } catch (Exception e) { e.printStackTrace(); } }//main }
|
'JAVA' 카테고리의 다른 글
공공데이터 API를 활용한 XML 파싱 (0) | 2020.02.28 |
---|---|
일정 시간단위로 반복되는 배치 수행 (0) | 2019.05.21 |
난수생성 후 중복없이 출력 (0) | 2019.05.09 |
DTO & DAO의 이해 , DB에서 새로운 사용자 생성하기 (0) | 2019.02.11 |
2019.02.07 JAVA로 DB연동하기-Service객체 사용하기(Proxy) (0) | 2019.02.07 |