본문 바로가기
Spring

2023-01-17 JAVA 미세먼지API

by HTT 2023. 1. 17.

활용신청 후 인증키받기

https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073861

 

한국환경공단_에어코리아_대기오염정보

각 측정소별 대기오염정보를 조회하기 위한 서비스로 기간별, 시도별 대기오염 정보와 통합대기환경지수 나쁨 이상 측정소 내역, 대기질(미세먼지/오존) 예보 통보 내역 등을 조회할 수 있다.

www.data.go.kr

 

public String GetData() throws IOException {
    StringBuilder urlBuilder = new StringBuilder(
            "http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty"); /* URL */
    urlBuilder.append("?" + URLEncoder.encode("serviceKey", "UTF-8")
            + "인증키"); /*
                                                                                                                             * 서비스
                                                                                                                             */
    urlBuilder.append("&" + URLEncoder.encode("returnType", "UTF-8") + "="
            + URLEncoder.encode("json", "UTF-8")); /* xml 또는 json */
    urlBuilder.append("&" + URLEncoder.encode("numOfRows", "UTF-8") + "="
            + URLEncoder.encode("100", "UTF-8")); /* 한 페이지 결과 수 */
    urlBuilder
            .append("&" + URLEncoder.encode("pageNo", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /* 페이지번호 */
    urlBuilder.append("&" + URLEncoder.encode("sidoName", "UTF-8") + "=" + URLEncoder.encode("제주",
            "UTF-8")); /*
                         * 시도 이름(전국, 서울, 부산, 대구, 인천, 광주, 대전, 울산, 경기, 강원, 충북, 충남, 전북, 전남, 경북, 경남, 제주, 세종)
                         */
    urlBuilder.append(
            "&" + URLEncoder.encode("ver", "UTF-8") + "=" + URLEncoder.encode("1.0", "UTF-8")); /* 버전별 상세 결과 참고 */
    URL url = new URL(urlBuilder.toString());
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setRequestProperty("Content-type", "application/json");
    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();
    return sb.toString();
}

 

후에 json parser를 이용해 만들어진 문자열 데이터를 객체화한다.

public List<AirqualityDTO> DataSaveDust(String result) {
    List<AirqualityDTO> dustList = new ArrayList<AirqualityDTO>();
    JSONParser parser = new JSONParser();
    JSONObject obj;
    try {
        obj = (JSONObject) parser.parse(result);
        JSONObject parse_response = (JSONObject) obj.get("response");
        JSONObject parse_body = (JSONObject) parse_response.get("body");
        JSONArray parse_items = (JSONArray) parse_body.get("items");
        JSONObject data;
        String dataTime = ((JSONObject) parse_items.get(0)).get("dataTime").toString();
        for (int i = 0; i < parse_items.size(); i++) {
            AirqualityDTO dust = new AirqualityDTO();
            data = (JSONObject) parse_items.get(i);
            Object pm10Value = data.get("pm10Value");
            Object pm25Value = data.get("pm25Value");
            Object stationName = data.get("stationName");
            dust.setPm10value((String) pm10Value);
            dust.setPm25value((String) pm25Value);
            dust.setStationname((String) stationName);
            dust.setDatatime(dataTime);
            dustList.add(dust);
            }
    } catch (ParseException e) {
        e.printStackTrace();
    }
    System.out.println(dustList);
    return dustList;
}

필요한 데이터(충전소이름과 미세먼지 농도, 초미세먼지 농도)를 추출해 알맞은 DTO타입 객체에 담아 JSP에서 구현하였다.

 

 

 

 

'Spring' 카테고리의 다른 글

[ Spring ] 스프링 개념정리  (0) 2023.02.09
프레임워크(Framework)와 라이브러리(Library)의 차이점  (0) 2023.01.19
Maven이란?  (0) 2023.01.16
2023-01-16 JSON, AJAX 랭킹정보  (0) 2023.01.16
2023-01-04 트랜잭션 처리하기  (0) 2023.01.04

댓글