인증 방식
🔑 API Key
요금
무료 (일 1,000건~협의)
Base URL
apis.data.go.kr/1360000/VilageFcstInfoService_2.0
태그
날씨, 기상청
서비스 소개
기상청에서 공공데이터포털(data.go.kr)을 통해 제공하는 공식 날씨 API입니다. 격자 좌표 기반으로 전국 어느 지점의 날씨 정보도 조회할 수 있으며, 기온·강수량·풍속·습도·하늘상태 등을 제공합니다. 완전 무료이며 하루 10만 건 이상 호출 가능합니다.
🚀 시작하기
- 1
data.go.kr 회원가입
공공데이터포털(data.go.kr) 회원가입
- 2
API 활용 신청
"기상청_단기예보 조회서비스" 검색 → 활용 신청 (자동 승인)
- 3
서비스 키 확인
마이페이지 → 개발계정 → 서비스 키 → Decoding 키 복사
- 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"