inblog logo
|
{CODE-RYU};
    java

    [Java] 공공 데이터를 활용한 날씨 프로그램 만들기 1 - 공공 데이터 페이지 둘러보기

    류재성's avatar
    류재성
    Jun 10, 2024
    [Java] 공공 데이터를 활용한 날씨 프로그램 만들기 1 - 공공 데이터 페이지 둘러보기
    Contents
    1. 공공 데이터 포털 둘러보기2. Java 샘플 코드 테스트
     

    1. 공공 데이터 포털 둘러보기

    💡
    공공데이터(Public Data)는 정부, 공공기관, 지방자치단체 등이 법령에 따라 생성, 수집, 관리하는 데이터로서, 누구나 자유롭게 이용할 수 있도록 공개된 데이터를 의마한다.
     
    공공데이터 포털
    국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다.
    공공데이터 포털
    https://www.data.go.kr/index.do
    공공데이터 포털
     
    notion image
     
    공공데이터 포털에서 기상청_단기예보 API 를 선택, 활용신청을 선택한.
     
    notion image
     
    목적을 선택 후 활용 신청을 한다.
     
    notion image
     
    마이 페이지 - 데이터 활용 - Open API - 활용 신청 현황을 들어간다.
     
    notion image
     
    💡
    End Point : 클라이언트가 요청을 보내는 URL 일반 인증키(Encoding) : URL에 포함될 수 있도록 특수 문자를 인코딩한 형태. 인코딩된 키는 URL의 쿼리 파라미터로 사용하기 적합하다 일반 인증키(Decoding) : URL 인코딩이 되지 않은 순수한 문자열이다. == 같은 문자는 키워드 값으로 URL에 사용할 수 없다. 주소를 파싱하는데 기준이 되는 키워드이기 때문이다. 따라서 인코딩된 인증키를 URL에 사용해야 한다. 다만 브라우저나 특정 라이브러리는 자동으로 변환해주기 때문에 디코딩 인증키를 사용해보고 안되면 인코딩 인증키를 사용하자.
    notion image
     
    notion image
     
    아래에 활용신청 상세기능정보에서 값을 넣어 테스트를 해볼 수 있다. dataType을 json으로 넣고 테스트한다.
     
    https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst?serviceKey=GwP4SAIbheNGehkwEohRbKiZarjkYCbbT0%2FKzCWnPd7XL0vo97Tvx8b1Q4wwORGuGx47qa34CKrCDe4AL4vCrw%3D%3D&pageNo=1&numOfRows=1000&dataType=json&base_date=20240607&base_time=1900&nx=55&ny=127
     
    notion image
     
    미리보기를 누르면 데이터가 조회된다.
     
    notion image
     
    💡
    어떤 값이 온도인지는 참고문서를 확인하면 알 수 있다. T1H가 온도이다.
     
     

    2. Java 샘플 코드 테스트

     
    기상청_단기예보 ((구)_동네예보) 조회서비스
    초단기실황, 초단기예보, 단기((구)동네)예보, 예보버전 정보를 조회하는 서비스입니다. 초단기실황정보는 예보 구역에 대한 대표 AWS 관측값을, 초단기예보는 예보시점부터 6시간까지의 예보를, 단기예보는 예보기간을 글피까지 확장 및 예보단위를 상세화(3시간→1시간)하여 시공간적으로 세분화한 예보를 제공합니다.
    기상청_단기예보 ((구)_동네예보) 조회서비스
    https://www.data.go.kr/data/15084084/openapi.do#tab_layer_detail_function
    기상청_단기예보 ((구)_동네예보) 조회서비스
    notion image
     
    /* Java 1.8 샘플 코드 */ import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.io.BufferedReader; import java.io.IOException; public class ApiExplorer { public static void main(String[] args) throws IOException { StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst"); /*URL*/ urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=서비스키"); /*Service Key*/ urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지번호*/ urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("1000", "UTF-8")); /*한 페이지 결과 수*/ urlBuilder.append("&" + URLEncoder.encode("dataType","UTF-8") + "=" + URLEncoder.encode("XML", "UTF-8")); /*요청자료형식(XML/JSON) Default: XML*/ urlBuilder.append("&" + URLEncoder.encode("base_date","UTF-8") + "=" + URLEncoder.encode("20210628", "UTF-8")); /*‘21년 6월 28일 발표*/ urlBuilder.append("&" + URLEncoder.encode("base_time","UTF-8") + "=" + URLEncoder.encode("0600", "UTF-8")); /*06시 발표(정시단위) */ urlBuilder.append("&" + URLEncoder.encode("nx","UTF-8") + "=" + URLEncoder.encode("55", "UTF-8")); /*예보지점의 X 좌표값*/ urlBuilder.append("&" + URLEncoder.encode("ny","UTF-8") + "=" + URLEncoder.encode("127", "UTF-8")); /*예보지점의 Y 좌표값*/ 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()); } }
     
    오픈API 상세 페이지 하단에서 샘플코드를 확인할 수 있다.
     
    notion image
     
    새로운 자바 프로젝트를 만든다.
     
    notion image
     
    샘플 코드를 넣고 실행하면 이런 출력을 볼 수 있다.
    Share article

    {CODE-RYU};

    RSS·Powered by Inblog