- 공공데이터 포털에서 필요한 데이터에 대한 키워드로 검색하여 찾았다. 당초 기획대로라면 기상 예보까지 필요했는데 그렇게 되면 Api를 5개 사용해야해서 예보에 대한 부분은 생략했다.
- 강원도라는 지역으로 제한을 두었는데, 강원도내의 지역도 많기때문에 주요 여행지 5곳을 미리 정해서 해당 지역의 정보로 프로젝트를 구성했다. (강릉, 속초, 고성, 양양, 평창)
1. 실시간 미세먼지 수치 데이터를 받기 위한 Api
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073861
한국환경공단_에어코리아_대기오염정보
각 측정소별 대기오염정보를 조회하기 위한 서비스로 기간별, 시도별 대기오염 정보와 통합대기환경지수 나쁨 이상 측정소 내역, 대기질(미세먼지/오존) 예보 통보 내역 등을 조회할 수 있다.
www.data.go.kr
2. 지역별 과거 일평균 미세먼지 수치 데이터를 받기 위한 Api
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073855
한국환경공단_에어코리아_대기오염통계 현황
대기오염 통계 정보를 조회하기 위한 서비스로 각 측정소별 농도 정보와 기간별 통계수치 정보를 조회할 수 있다. ※ 운영계정으로 사용하고자 할 경우 "한국환경공단 에어코리아 OpenAPI 기술문
www.data.go.kr
3. 실시간 기온, 강수확률 데이터를 받기 위한 Api
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15084084
기상청_단기예보 ((구)_동네예보) 조회서비스
초단기실황, 초단기예보, 단기((구)동네)예보, 예보버전 정보를 조회하는 서비스입니다. 초단기실황정보는 예보 구역에 대한 대표 AWS 관측값을, 초단기예보는 예보시점부터 6시간까지의 예보를,
www.data.go.kr
- 지역별 측정소 이름이 전부 다르기때문에 측정소 에어코리아 사이트를 참조하여 측정소명을 찾았다. https://www.airkorea.or.kr/web/sidoQualityCompare?itemCode=10008&pMENU_NO=102
고성:고성(DMZ) / 강릉: 주문진읍 / 속초 :금호동 / 평창: 평창읍 / 양양: 양양읍
- 사용해야하는 3개의 API에 대해서 문서를 보고 필요한 parameter을 정리했다.
- postman으로 Open API활용가이드를 보며 데이터를 제대로 받는지 확인했다.
- 사용하는 API가 3개이다보니 필요한 데이터를 받아오려면 순서를 정하고, API 요청변수에 맞게 지역을 변환해야했다. 내가 원하는 기능대로 구현하기 위해서는의 순서대로 통신을 해야했다.
->5개 지역의 실시간 미세먼지 수치 API → 가장 적은 지역을 선별하여 기상청 단기예보 API → 5개 지역별 과거 미세먼지 일평균 수치 API
의 순서대로 통신을 해야했다.
- 인증키는 깃허브에 올라가지 않도록 하기위해 전역파일에 .gitignore, .env 생성하여 숨기려 했다. 그런데 console 창에서 키값을 제대로 다 불러오는것을 확인했는데도 이상하게 SERVICE_KEY_IS_NOT_REGISTERED_ERROR’ 라는 에러 메세지가 떴다.
-> Web, App 개발을 하다보면 API_KEY, 포트번호 등 외부에 공개되면 안되는 값들이 있다. 즉, git 등의 오픈소스에 올리면 안되는 값들이 있다. 이 때 필요한 것이 dotenv 패키지이고, 환경변수 파일을 외부에 만들어 API_KEY 등을 저장시켜 소스코드 내에 하드코딩하지 않고 사용할 수 있다. .env 파일은 프로젝트의 최상위 루트에 위치하여야 한다.
- 처음엔 타이밍 문제로 추측했고, useEffect안에 의존성 배열로 넣어보고 콘솔로 확인 해봤지만 문제가 없어보였다. 네트워크탭에서 어떻게 호출 하는지키 값을 확인해보니 나의 인증키가 아닌 이상한 문자열로 요청보내고 있었던것으로 확인 되었다.
- 인증키를 외부변수로 빼지않고 URL에 직접 기입하니 통신이 잘 되었다. 원하는 방식은 아니지만 이대로 진행했다.
- 미세먼지 수치가 가장 적은 지역의 실시간 기상정보를 불러오기위해 기상청 단기 예보 API를 확인하니
- 기상청 단기예보의 parameter에는 하루 8번의 정해진 시간만 전달할 수 있고, 또 날이 바뀌는 자정부터 새벽2시까지는 전날의 예보만 확인 할 수 있어서 이것도 별도의 로직을 짜야 했다. 현재의 시간을 받아서 분기처리하여 8개의 시간으로 나누고 받아온 데이터의 예보시각을 확인하여 현재 시간과 제일 가까운 시간의 기온과 강수량을 추출한다.
-
export const specialTime = date => { let hour = date.getHours(); let minute = date.getMinutes(); let now = hour * 100 + minute; switch (true) { case now >= 210 && now <= 509: return '0200'; case now >= 510 && now <= 809: return '0500'; case now >= 810 && now <= 1109: return '0800'; case now >= 1110 && now <= 1409: return '1100'; case now >= 1410 && now <= 1709: return '1400'; case now >= 1710 && now <= 2009: return '1700'; case now >= 2010 && now <= 2309: return '2000'; // 밤 1110부터 새벽 0209까지 case now >= 2310 || now <= 209: return '2300'; default: return null; } }; // 기상청 api 날짜 - 현재 시간이 밤 12시부터 새벽 2시 이전이면 전날 날짜를 보내는 로직 export const specialDate = date => { let hour = date.getHours(); let minute = date.getMinutes(); let now = hour * 100 + minute; if (now >= '0000' && now <= '0209') { return getYesterdaysStringDate(date); } else return getArabicDate(date); };
'프로젝트' 카테고리의 다른 글
문제해결_ 공공데이터 일일 트래픽 초과 ( 결국엔 로컬 스토리지1 ) (0) | 2024.03.12 |
---|---|
문제해결_ Recoil과 API 통신의 비효율성 (0) | 2024.03.12 |
상태 관리 - 전역 데이터를 위한 Recoil (0) | 2024.03.12 |
기능 구현을 위한 라이브러리 (0) | 2024.03.12 |
Fineday-Gangwon 기획 (0) | 2024.03.12 |