- open api 사용 방법 -
Open API로 휴일 정보를 가져왔다. 그런데, 만들고자 하는 API에서는 휴일 날짜만 필요했다.
즉, json객체에서 locdate라는 이름의 값만 필요했다.
그래서 json 객체의 이름을 이용해서 값을 추출했다.
open API에서 특정 연도 공휴일 날짜를 출력하는 Spring Boot Controller이다.
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.IOException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@ResponseBody
@RequestMapping("/openAPItest_v2")
public String openAPItest_v2(String organization, String yearMonth) throws IOException{
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("_type","UTF-8") + "=" + URLEncoder.encode("json", "UTF-8")); /*타입*/
urlBuilder.append("&" + URLEncoder.encode("solYear","UTF-8") + "=" + URLEncoder.encode("2022", "UTF-8")); /*연*/
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("365", "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;
StringBuilder sb = new StringBuilder();
try {
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream(), "UTF-8"));
}
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(rd); // JSON 데이터로 JSON object 생성
JSONObject responseResult = (JSONObject)jsonObject.get("response"); // json name으로 추출
JSONObject bodyInfo = (JSONObject)responseResult.get("body");
JSONObject itemsInfo = (JSONObject)bodyInfo.get("items");
JSONArray itemInfo = (JSONArray)itemsInfo.get("item"); //item이라는 이름을 가진 json 객체들을 배열로 생성
for(int i=0; i<itemInfo.size(); i++) {
JSONObject day = (JSONObject)itemInfo.get(i); // 배열에 인덱스로 접근
sb.append(day.get("locdate").toString()).append("\n"); // 객체에서 locdate 이름의 값(=휴일)을 추출
}
System.out.println(itemInfo.size());
rd.close();
}catch(Exception e) {
e.printStackTrace();
}
conn.disconnect();
return sb.toString();
}
json 라이브러리를 사용하기 위해 pom.xml에 라이브러리를 추가했다.
(복붙 했을 때는 오류가 생길 수 있는데, 그럴 때 타이핑하면 해결될 수 있다. - 저는 그랬어요:D )
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
결과
공휴일 날짜만 파싱 성공!!
참고 사이트
'WEB > Spring' 카테고리의 다른 글
공공데이터 오픈 API 사용하기(휴일 정보 - 한국천문연구원_특일 정보) (0) | 2022.06.13 |
---|---|
Spring: log4j.xml 에러 (0) | 2022.03.27 |
Spring: root-context.xml 에러 (0) | 2022.03.27 |
Spring : Tomcat 설정 (0) | 2022.03.24 |
Spring : Eclipse 설치하고 spring 개발 환경 세팅하기 for MAC (0) | 2022.03.24 |