Skip to content

날씨 api Research

seonuk edited this page Dec 27, 2020 · 5 revisions

기상청

request

항목명(국문) 항목명(영문) 항목크기 항목구분 샘플데이터 항목설명
서비스키 ServiceKey 4 필수 -
페이지 번호 pageNo 4 필수 1
한 페이지 결과 수 numOfRows 4 필수 10
응답자료형식 dataType 4 옵션 XML
발표일자 base_date 8 필수 20151201 15년 12월 1일발표
발표시각 base_time 4 필수 0500
예보지점 X 좌표 nx 2 필수 1
예보지점 Y 좌표 ny 2 옵션 1
  • nx, ny 키 excel 파일에 정의되어있음

response

코드 요소
POP 강수확률 %
PTY 강수형태 없음(0), 비(1), 비/눈(2), 눈(3), 소나기(4), 빗방울(5), 빗방울/눈날림(6), 눈날림(7)
R06 6시간 강수량 범주 (1 mm)
REH 습도 %
S06 6시간 신적설 범주(1 cm)
SKY 하늘상태 코드값
T3H 3시간 기온
TMN 아침 최저기온
TMX 낮 최고기온
UUU 풍속(동서성분) m/s
VVV 풍속(남북성분) m/s
WAV 파고 M
VEC 풍향 m/s
WSD 풍속 m/s

사용 승인법

공공데이터포털 : https://data.go.kr/index.do , 동네예보 서비스 활용신청

샘플 코드

/* NodeJs 샘플 코드 */


var request = require('request');

var url = 'http://apis.data.go.kr/1360000/VilageFcstInfoService/getUltraSrtNcst';
var queryParams = '?' + encodeURIComponent('ServiceKey') + '=서비스키'; /* Service Key*/
queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('1'); /* */
queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('10'); /* */
queryParams += '&' + encodeURIComponent('dataType') + '=' + encodeURIComponent('JSON'); /* */
queryParams += '&' + encodeURIComponent('base_date') + '=' + encodeURIComponent('20151201'); /* */
queryParams += '&' + encodeURIComponent('base_time') + '=' + encodeURIComponent('0600'); /* */
queryParams += '&' + encodeURIComponent('nx') + '=' + encodeURIComponent('18'); /* */
queryParams += '&' + encodeURIComponent('ny') + '=' + encodeURIComponent('1'); /* */

request({
    url: url + queryParams,
    method: 'GET'
}, function (error, response, body) {
    //console.log('Status', response.statusCode);
    //console.log('Headers', JSON.stringify(response.headers));
    //console.log('Reponse received', body);
});

유의사항

  • 사용 시 클라이언트에서 보내준 좌표값 또는 도시명의로 nx, ny 검색 후 사용하는 로직 필요

  • 바로 전날 기준으로 데이터 개수만큼 보여줌 과거 날짜 사용 불가

  • 최대 1일전 관측 시간대: 0200, 0500, 0800, 1100, 1400, 1700, 2000, 2300 (1일 8회)

  • 3시간단위로 위 response 15개씩 나타남

ex) image

Open weather

https://openweathermap.org/forecast16#geo16

Daily Forecast 16 Days api 사용 시 한달의 40USD

https://openweathermap.org/api/one-call-api#current

One calls api 사용 시 무료 대신 7일 뒤까지만 예측 가능 (하루의 천번만 무료 한달의 100만번 호출가능)

위 두가지가 유사하므로 아래는 Daily Forecast 16 Days api에 대한 예시만 존재,
one calls api랑 데이터 개수만 다르고 다른 부분 유사

request

api.openweathermap.org/data/2.5/forecast/daily?lat={lat}&lon={lon}&cnt={cnt}&appid={API key}

유저의 좌표값으로 요청 시 아래와 같이 해당 날짜로부터 16개의 데이터가 나타남

response 예시

 {
   "cod":"200",
   "message":0,
   "city":{
      "geoname_id":1907296,
      "name":"Tawarano",
      "lat":35.0164,
      "lon":139.0077,
      "country":"JP",
      "iso2":"JP",
      "type":"",
      "population":0
   },
   "cnt":10,
   "list":[
      {
         "dt":1485741600,
         "temp":{
            "day":285.51,
            "min":285.51,
            "max":285.51,
            "night":285.51,
            "eve":285.51,
            "morn":285.51
         },
         "pressure":1013.75,
         "humidity":100,
         "weather":[
            {
               "id":800,
               "main":"Clear",
               "description":"sky is clear",
               "icon":"01n"
            }
         ],
         "speed":5.52,
         "deg":311,
         "clouds":0
      },
      {
         "dt":1485828000,
         "temp":{
            "day":282.27,
            "min":282.27,
            "max":284.66,
            "night":284.66,
            "eve":282.78,
            "morn":282.56
         },
         "pressure":1023.68,
         "humidity":100,
         "weather":[
            {
               "id":800,
               "main":"Clear",
               "description":"sky is clear",
               "icon":"01d"
            }
         ],
         "speed":5.46,
         "deg":66,
         "clouds":0
      },
      {
         "dt":1485914400,
         "temp":{
            "day":284.83,
            "min":283.21,
            "max":285.7,
            "night":284.16,
            "eve":285.49,
            "morn":283.21
         },
         "pressure":1017.39,
         "humidity":100,
         "weather":[
            {
               "id":800,
               "main":"Clear",
               "description":"sky is clear",
               "icon":"02d"
            }
         ],
         "speed":13.76,
         "deg":260,
         "clouds":8
      },
      {
         "dt":1486000800,
         "temp":{
            "day":283.71,
            "min":281.86,
            "max":285.13,
            "night":283.81,
            "eve":284.76,
            "morn":281.86
         },
         "pressure":1017.36,
         "humidity":100,
         "weather":[
            {
               "id":800,
               "main":"Clear",
               "description":"sky is clear",
               "icon":"01d"
            }
         ],
         "speed":8.95,
         "deg":288,
         "clouds":0
      },
      {
         "dt":1486087200,
         "temp":{
            "day":280,
            "min":275.68,
            "max":283.75,
            "night":278.79,
            "eve":283.75,
            "morn":275.68
         },
         "pressure":996.2,
         "humidity":0,
         "weather":[
            {
               "id":500,
               "main":"Rain",
               "description":"light rain",
               "icon":"10d"
            }
         ],
         "speed":5.92,
         "deg":295,
         "clouds":0
      },
      {
         "dt":1486173600,
         "temp":{
            "day":279.4,
            "min":276.69,
            "max":283.22,
            "night":277.58,
            "eve":283.22,
            "morn":276.69
         },
         "pressure":998.07,
         "humidity":0,
         "weather":[
            {
               "id":800,
               "main":"Clear",
               "description":"sky is clear",
               "icon":"01d"
            }
         ],
         "speed":3.71,
         "deg":314,
         "clouds":0
      },
      {
         "dt":1486260000,
         "temp":{
            "day":280.88,
            "min":276.28,
            "max":284.66,
            "night":281.2,
            "eve":284.66,
            "morn":276.28
         },
         "pressure":997.4,
         "humidity":0,
         "weather":[
            {
               "id":500,
               "main":"Rain",
               "description":"light rain",
               "icon":"10d"
            }
         ],
         "speed":2.1,
         "deg":337,
         "clouds":66,
         "rain":0.28
      },
      {
         "dt":1486346400,
         "temp":{
            "day":281.58,
            "min":278.74,
            "max":283.76,
            "night":278.74,
            "eve":283.76,
            "morn":279.15
         },
         "pressure":991.11,
         "humidity":0,
         "weather":[
            {
               "id":501,
               "main":"Rain",
               "description":"moderate rain",
               "icon":"10d"
            }
         ],
         "speed":2.69,
         "deg":2,
         "clouds":4,
         "rain":3.72
      },
      {
         "dt":1486432800,
         "temp":{
            "day":277.62,
            "min":275.86,
            "max":281.14,
            "night":276.45,
            "eve":281.14,
            "morn":275.86
         },
         "pressure":993.37,
         "humidity":0,
         "weather":[
            {
               "id":800,
               "main":"Clear",
               "description":"sky is clear",
               "icon":"01d"
            }
         ],
         "speed":2.05,
         "deg":353,
         "clouds":47,
         "rain":0.52,
         "snow":0.03
      },
      {
         "dt":1486519200,
         "temp":{
            "day":279.26,
            "min":275.51,
            "max":281.61,
            "night":276.55,
            "eve":281.61,
            "morn":275.51
         },
         "pressure":991.72,
         "humidity":0,
         "weather":[
            {
               "id":500,
               "main":"Rain",
               "description":"light rain",
               "icon":"10d"
            }
         ],
         "speed":3.47,
         "deg":326,
         "clouds":2,
         "rain":0.35
      }
   ]
}
                     

response 설명

https://openweathermap.org/forecast16#JSON
링크로 대체.

유의사항

  • 한달의 100만건의 데이터 무료사용가능
  • 계정 등록 후 프리티어 버전으로 사용 one calls api로(7일 뒤까지 예측, 하루 1000번 호출가능 총 100만번)
  • 한달의 USD 40달러 내면 천만건까지 사용 가능 16일 예측