프로젝트 개발에 비, 눈, 미세먼지, 자외선 API가 필요했는데, Openweathermap의 무료 API로는 네가지의 데이터를 모두 사용하지는 못해서 공공데이터에서 미세먼지와 자외선 데이터를 가져오기로 하였다.
API의 사용법을 정리해보았다.
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: "도시대기"
items.pm10Grade
items.pm25Grade
items.pm10Grade1h
items.pm25Grade1h
예시로 서울시 실시간 미세먼지 데이터를 받아보았다.
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”)items.item.h0
~ items.item.h75
자외선 예시로는 경기도 성남시 백현동의 자외선지수를 받아보았다.
성남시 백현동의 행정구역코드는 4113565700이다.
https://apis.data.go.kr/1360000/LivingWthrIdxServiceV4/getUVIdxV4?serviceKey={키}&numOfRows=10&pageNo=1&areaNo=4113565700&time=2023091518&dataType=JSON
호출 결과는 다음과 같다.
우와😲