API 목록으로
☁️ 날씨무료

기상청 단기예보 API

기상청 (공공데이터포털) · KMA Short-term Forecast API

인증 방식

🔑 API Key

요금

무료 (일 1,000건~협의)

Base URL

apis.data.go.kr/1360000/VilageFcstInfoService_2.0

태그

날씨, 기상청

서비스 소개

기상청에서 공공데이터포털(data.go.kr)을 통해 제공하는 공식 날씨 API입니다. 격자 좌표 기반으로 전국 어느 지점의 날씨 정보도 조회할 수 있으며, 기온·강수량·풍속·습도·하늘상태 등을 제공합니다. 완전 무료이며 하루 10만 건 이상 호출 가능합니다.

🚀 시작하기

  1. 1

    data.go.kr 회원가입

    공공데이터포털(data.go.kr) 회원가입

  2. 2

    API 활용 신청

    "기상청_단기예보 조회서비스" 검색 → 활용 신청 (자동 승인)

  3. 3

    서비스 키 확인

    마이페이지 → 개발계정 → 서비스 키 → Decoding 키 복사

  4. 4

    격자 좌표 변환

    경위도→격자 변환 공식 또는 변환 라이브러리 사용 (nx, ny 파라미터)

📋 응답 예시

{
  "response": {
    "body": {
      "items": {
        "item": [
          { "baseDate": "20240101", "baseTime": "0500",
            "category": "TMP", "fcstDate": "20240101",
            "fcstTime": "0600", "fcstValue": "-3",
            "nx": 60, "ny": 127 }
        ]
      }
    }
  }
}

💡 코드 예제

JavaScriptJavaScript (fetch)
const API_KEY = process.env.WEATHER_API_KEY // data.go.kr 서비스 키 (Decoding)

async function getForecast(nx: number, ny: number) {
  const now = new Date()
  const baseDate = now.toISOString().slice(0, 10).replace(/-/g, '')
  const baseTime = '0500' // 0200,0500,0800,1100,1400,1700,2000,2300

  const url = new URL(
    'https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst'
  )
  url.searchParams.set('serviceKey', API_KEY)
  url.searchParams.set('pageNo', '1')
  url.searchParams.set('numOfRows', '100')
  url.searchParams.set('dataType', 'JSON')
  url.searchParams.set('base_date', baseDate)
  url.searchParams.set('base_time', baseTime)
  url.searchParams.set('nx', String(nx))
  url.searchParams.set('ny', String(ny))

  const res = await fetch(url.toString())
  const data = await res.json()
  return data.response.body.items.item
}

// 서울 중구 기준 nx=60, ny=127
const items = await getForecast(60, 127)
const temp = items.find(i => i.category === 'TMP')
console.log('현재 기온:', temp?.fcstValue + '°C')
PythonPython
import requests
from datetime import datetime

API_KEY = "YOUR_DECODING_KEY"  # Decoding 키 사용

def get_forecast(nx: int, ny: int) -> list:
    params = {
        "serviceKey": API_KEY,
        "pageNo": 1,
        "numOfRows": 100,
        "dataType": "JSON",
        "base_date": datetime.now().strftime("%Y%m%d"),
        "base_time": "0500",
        "nx": nx,
        "ny": ny,
    }
    res = requests.get(
        "https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst",
        params=params,
    )
    return res.json()["response"]["body"]["items"]["item"]

# 서울 중구: nx=60, ny=127
items = get_forecast(60, 127)
for item in items:
    if item["category"] == "TMP":
        print(f"기온: {item['fcstValue']}°C")
cURLcURL
curl "https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst\
?serviceKey=YOUR_DECODING_KEY\
&pageNo=1&numOfRows=100&dataType=JSON\
&base_date=20240101&base_time=0500\
&nx=60&ny=127"

같은 카테고리 API