[Open API] 날씨 API 사용 | Openweathermap, 공공데이터

pos++·2023년 9월 15일
1

프로젝트 개발에 비, 눈, 미세먼지, 자외선 API가 필요했는데, Openweathermap의 무료 API로는 네가지의 데이터를 모두 사용하지는 못해서 공공데이터에서 미세먼지와 자외선 데이터를 가져오기로 하였다.

API의 사용법을 정리해보았다.

Openweathermap

https://openweathermap.org/forecast5
비, 눈 데이터를 가져오기 위해 5일간의 날씨 예보를 3시간 간격으로 제공하는 위의 API를 사용하기로 했다.

API call 방법은 다음과 같다.

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

API response fields를 살펴보자.
list.weather.main로 비, 눈 등의 정보를 알 수 있다.

list.dt_txt로 해당 날씨의 시간을 알 수 있다.
UTC는 세계 표준 시간으로, 한국 시간은 UTC + 9 이다.


예시로 서울시 강남구의 날씨를 받아보았다.

서울시 강남구의 경도(lon)는 127.0495556, 위도(lat)는 37.514575 이다.

https://api.openweathermap.org/data/2.5/forecast?lat=37.514575&lon=127.0495556&appid={키}

결과는 다음과 같이 JSON으로 받아볼 수 있다.


공공데이터

https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073861
한국환경공단 에어코리아 대기오염정보 API를 사용하여 미세먼지 데이터를 받아오기로 했다.

https://www.data.go.kr/data/15085288/openapi.do
자외선 정보는 기상청 생활기상지수 조회서비스 API를 사용하기로 했다.

각 API의 기술문서를 다운로드해 읽어보면 API 사용법을 알 수 있다.

공공데이터 포털에서 데이터 활용신청을 하면 바로 승인을 해준다.
발급된 인증키를 복사해서 사용하면 된다.

에러 발생과 해결

처음에 발급받은 인증키를 사용해 API를 호출했더니 SERVICE_ACCESS_DENIED_ERROR 가 발생하여 데이터를 받을 수 없었다. 검색 결과 이 에러는 공공 데이터 포털에서 서비스키를 발급했지만, 해당 서비스키가 제공기관(기상청)에는 동기화되지 않았기 때문에 발생하는 에러라고 해서 며칠을 기다려봤으나, 해결이 되지 않았다.

결국 인증키 재발급을 받고, 몇시간 뒤에 다시 시도했더니 에러 없이 정상적으로 데이터를 받을 수 있었다.


미세먼지 데이터

API call 방법은 다음과 같다.

http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?sidoName={시도명}&pageNo=1&numOfRows=100&returnType=JSON&serviceKey={키}&ver=1.3

url 파라미터

  • sidoName → ex) 서울
    - 시도명 → 서울, 부산, 대구, 인천, 광주, 대전, 울산, 경기, 강원, 충북, 충남, 전북, 전남, 경북, 경남, 제주, 세종
  • serviceKey → 인증키

API response fields

  • 날짜/시간 → items.dataTime ("2023-08-26 17:00”)
  • 측정소 이름 → items.stationName (“관악구”)
    • 도시대기 측정값만 걸러서 보기 → items.mangName: "도시대기"
  • 미세먼지 24시간 등급 → items.pm10Grade
  • 초미세먼지 24시간 등급 → items.pm25Grade
  • 미세먼지 1시간 등급 → items.pm10Grade1h
  • 초미세먼지 1시간 등급 → items.pm25Grade1h
    • (1: 좋음 / 2: 보통 / 3: 나쁨 / 4: 매우나쁨)

예시로 서울시 실시간 미세먼지 데이터를 받아보았다.

http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?sidoName=서울&pageNo=1&numOfRows=100&returnType=JSON&serviceKey={키}&ver=1.3

호출 결과는 다음과 같다.


자외선 데이터

API call 방법은 다음과 같다.

https://apis.data.go.kr/1360000/LivingWthrIdxServiceV4/getUVIdxV4?serviceKey={키}&numOfRows=10&pageNo=1&areaNo={행정구역코드}&time={년월일시}&dataType=JSON

url 파라미터

  • areaNo → 행정구역코드
    - 행정구역코드로 지역 지정
    - 행정구역코드는 검색해 보면 알 수 있다.

  • serviceKey → 인증키

  • time → 년월일시 ex) 2023082618


API response fields

  • 날짜/시간 → items.item.date ("2023082618”)
    • 20230826 06시에 20230826 06시 자료 호출시
      • 첫번째 데이터는 06시~09시 데이터
      • 3시간 간격 * 75 예측값 제공
  • 시간대별 자외선지수 예측값 → items.item.h0 ~ items.item.h75
    • (위험: 11 이상 / 매우높음: 8~10 / 높음: 6~7 / 보통: 3~5 / 낮음: 0~2)

자외선 예시로는 경기도 성남시 백현동의 자외선지수를 받아보았다.
성남시 백현동의 행정구역코드는 4113565700이다.

https://apis.data.go.kr/1360000/LivingWthrIdxServiceV4/getUVIdxV4?serviceKey={키}&numOfRows=10&pageNo=1&areaNo=4113565700&time=2023091518&dataType=JSON

호출 결과는 다음과 같다.

profile
밀린 TIL 업로드 조금씩 정리중...

2개의 댓글

comment-user-thumbnail
2023년 9월 15일

우와😲

1개의 답글