기상청 초단기실황조회 서비스

HU·2021년 11월 19일
0

공공 API 연동

목록 보기
1/2

초단기 실황 조회

공공 API 사이트

// 기상청 API 통신하는 메소드.
public ApiResponse weatherResponse(final AreaVo areaVo) throws Exception
{
    StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst"); /* URL */
    urlBuilder.append("?" + URLEncoder.encode("serviceKey", "UTF-8") + "="
                      + "YmgxLOhRlM%2Fl%2BHXxBpeUmMLOrD%2B3hG%2F8DbgNobpKNyjpcP1Zq%2FFdPeZvRZdpzzHQ8kBBQOwXbRn2nd0XXv39ZQ%3D%3D"); /* Service Key */
    urlBuilder.append("&" + URLEncoder.encode("serviceKey", "UTF-8") + "=" + URLEncoder.encode("-", "UTF-8")); /* 공공데이터포털에서 받은 인증키 */
    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("JSON", "UTF-8")); /* 요청자료형식(XML/JSON) Default: XML */
    urlBuilder.append("&" + URLEncoder.encode("base_date", "UTF-8") + "=" + URLEncoder.encode(areaVo.getBaseDate(), "UTF-8")); /* ‘21년 6월 28일 발표 */
    urlBuilder.append("&" + URLEncoder.encode("base_time", "UTF-8") + "=" + URLEncoder.encode(areaVo.getBaseTime(), "UTF-8")); /* 06시 발표(정시단위) */
    urlBuilder.append("&" + URLEncoder.encode("nx", "UTF-8") + "=" + URLEncoder.encode(areaVo.getPointX(), "UTF-8")); /* 예보지점의 X 좌표값 */
    urlBuilder.append("&" + URLEncoder.encode("ny", "UTF-8") + "=" + URLEncoder.encode(areaVo.getPointY(), "UTF-8")); /* 예보지점의 Y 좌표값 */

    URI uri = new URI(urlBuilder.toString());

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<ApiResponse> responseEntity = restTemplate.getForEntity(uri, ApiResponse.class);

    log.info("status code : {}", responseEntity.getStatusCode());
    log.info("body : {}", responseEntity.getBody());

    return responseEntity.getBody();
}

코드 리뷰

1. Return type

public ApiResponse weatherResponse

return type으로 ApiResponse라 지정된 것은 요청한 자료를 JSON 형식으로 받되 Response 값을 VO의 형태로 가지고 있고 싶어서 JSON 형태의 VO 클래스를 생성했다.

응답 데이터의 형태 ↓

위와 같은 형태의 객체로 만들기 위해서 필요한 클래스는
가장 마지막을 이루는 item에 속한 필드를 제외한 태그들은 모두 클래스를 생성해서 상위 클래스에 인스턴스의 형태로 선언해놓았고, 최상단 클래스는 Response까지 전부 담고 있는 ApiResponse 클래스로 했기에 해당 인스턴스가 Return type이 된 것이다.


2. Parameter

public * * (AreaVo areaVo){ }

한 번에 값을 전달하기 위해 VO 형태로 된 AreaVo라는 클래스를 만들어 안에 필드들을 담아두었다.


API 출처
기상청_단기예보 조회서비스

profile
지식 쌓기

0개의 댓글