개발 | 프로젝트/API

[API] 기상청 단기 예보 API 사용하기

seulll 2025. 5. 19. 15:22

학교 전공 강의 프로젝트로 개발 중인 앱에서 날씨 예보 정보가 필요해 기상청 단기 예보 API를 사용하려고 합니다.

 

1. API 신청 및 인증키 발급

https://www.data.go.kr/data/15084084/openapi.do

 

기상청_단기예보 ((구)_동네예보) 조회서비스

초단기실황, 초단기예보, 단기((구)동네)예보, 예보버전 정보를 조회하는 서비스입니다. 초단기실황정보는 예보 구역에 대한 대표 AWS 관측값을, 초단기예보는 예보시점부터 6시간까지의 예보를,

www.data.go.kr

위 포털에서 활용 신청을 한 후 인증키를 발급받습니다.

 

2. API 요청 URL 구성 방법

기상청 단기예보 API는 HTTP GET 방식으로 요청하며, 다음과 같은 기본 URL을 사용합니다.

http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst

 

여기서 http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/을 BASE_URL로 설정하고,

object WeatherAPI {
    private const val BASE_URL = "https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/"

    val api: WeatherService by lazy {
        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(WeatherService::class.java)
    }
}

 

참고 문서의 활용가이드를 보면 필수적으로 포함해야 하는 요청 메세지 명세는 다음과 같습니다.

 

이 요청 메세지 명세를 확인하며 날씨 정보를 요청하면

interface WeatherService {
    @GET("/getVilageFcst")
    suspend fun getForecast(
        @Query("serviceKey") serviceKey: String,
        @Query("numOfRows") numOfRows: Int,
        @Query("pageNo") pageNo: Int,
        @Query("dataType") dataType: String,
        @Query("base_date") baseDate: String,
        @Query("base_time") baseTime: String,
        @Query("nx") nx: Int,
        @Query("ny") ny: Int
    ): Response<WeatherResponse>
}

 

아래와 같은 응답 데이터를 받을 수 있습니다.

 

JSON 형식의 응답 예시

{
  "response": {
    "body": {
      "items": {
        "item": [
          {
            "fcstDate": "20250519",
            "fcstTime": "0900",
            "category": "TMP",
            "fcstValue": "21"
          },
          {
            "category": "SKY",
            "fcstValue": "3"
          }
        ]
      }
    }
  }
}