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

류재성's avatar
Jun 10, 2024
[Java] 공공 데이터를 활용한 날씨 프로그램 만들기 1 - 공공 데이터 페이지 둘러보기
 

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

💡
공공데이터(Public Data)는 정부, 공공기관, 지방자치단체 등이 법령에 따라 생성, 수집, 관리하는 데이터로서, 누구나 자유롭게 이용할 수 있도록 공개된 데이터를 의마한다.
 
 
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 샘플 코드 테스트

 
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};