ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 공휴일API 사용 및 xml파싱해서 값가져오기
    API/API 사용하기 2022. 5. 16. 07:46
    728x90

    1.사이트 접속해서 회원가입후 api 키 발급

    사이트주소 : https://www.data.go.kr/data/15012690/openapi.do

     

    한국천문연구원_특일 정보

    (천문우주정보)국경일정보, 공휴일정보, 기념일정보, 24절기정보, 잡절정보를 조회하는 서비스 입니다. 활용시 날짜, 순번, 특일정보의 분류, 공공기관 휴일 여부, 명칭을 확인할 수 있습니다.

    www.data.go.kr

     

    해당 사이트에 들어가보면 예제코드가 있긴한데 대체 어떻게 값을 뽑아먹는거야?? 라고 고민에 빠지게 됩니다~ㅎ

    그래서 아래 예제를 통해 실행해보시고 각자의 상황에 맞게 값을 꺼내다가 요긴하게 쓰시면 되겠습니다.

     

     

    #샘플코드1번 : 위 사이트에서 java 샘플코드 내용그대로입니다

    package test;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
     
    import javax.xml.parsers.ParserConfigurationException;
     
    import org.xml.sax.SAXException;
     
    public class TestRun2 {
        public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException{
            StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo"); /*URL*/
            urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "="); /*Service Key*/
            urlBuilder.append("&" + URLEncoder.encode("solYear","UTF-8") + "=" + URLEncoder.encode("2021", "UTF-8")); /*연*/
            urlBuilder.append("&" + URLEncoder.encode("solMonth","UTF-8") + "=" + URLEncoder.encode("10", "UTF-8")); /*월*/
            URL url = new URL(urlBuilder.toString());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Content-type", "application/json");
            
            System.out.println("Response code: " + conn.getResponseCode());
            
            BufferedReader rd;
            if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
                rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            } 
            else {
                rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
            }
            
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = rd.readLine()) != null) {
                sb.append(line);
            }
            rd.close();
            conn.disconnect();
            
            System.out.println(sb.toString());
         }
    }

     

    #샘플코드2번 : 위 소스를  수정해서 만든코드입니다. xml파싱해서 리스트에 담기

     

    package test;
     
    import java.io.IOException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.ArrayList;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
     
    public class TestRun {
     
        public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException{
            String apiKey = "요기에 발급받은 api 키값이 들어가면 됩니다";
            String sc_year = "2021";
            String sc_month = "10";
            
            StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getRestDeInfo"); /*URL*/
            urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=" + apiKey); /*Service Key*/
            urlBuilder.append("&" + URLEncoder.encode("solYear","UTF-8") + "=" + URLEncoder.encode(sc_year, "UTF-8")); /*연*/
            urlBuilder.append("&" + URLEncoder.encode("solMonth","UTF-8") + "=" + URLEncoder.encode(sc_month, "UTF-8")); /*월*/
            URL url = new URL(urlBuilder.toString());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Content-type", "application/json");
            
            //System.out.println("Response code: " + conn.getResponseCode());
            
            Document document = null;
            NodeList nList = null;
            
            if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                document = db.parse(conn.getInputStream());
                document.getDocumentElement().normalize();
                nList = document.getElementsByTagName("item");
            } 
            
            conn.disconnect();
            
            ArrayList<String> holidayList = new ArrayList<String>();
            
            if(nList != null && nList.getLength() > 0) {
                //System.out.println(nList.getLength());
                for(int i=0; i<nList.getLength(); i++) {
                    Node nNode = nList.item(i);
                    //System.out.println(nNode.getNodeName());
                    //System.out.println(nNode.getNodeType());
                    if(nNode.getNodeType() == Node.ELEMENT_NODE) {
                        Element eElement = (Element) nNode;
                        String dateName = eElement.getElementsByTagName("dateName").item(0).getTextContent();
                        String locdate = eElement.getElementsByTagName("locdate").item(0).getTextContent();
                        String ymd = locdate.substring(0,4) + "-" + locdate.substring(4,6) + "-" + locdate.substring(6); 
                        System.out.println(dateName + " : " + ymd);
                        holidayList.add(ymd);
                    }
                }
            }
            
            //return holidayList;
         }
    }

     

     

    #샘플코드2번 실행결과

     

    728x90

    댓글

Designed by Tistory.