-
공휴일API 사용 및 xml파싱해서 값가져오기API/API 사용하기 2022. 5. 16. 07:46728x90
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