에어코리아 API 연결 및 데이터 불러오기
에어코리아-대기오염정보 api를 사용했다.(https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073861)
- 미세먼지: PM10
- 초미세먼지: PM2.5
API를 불러오자면 사용자 위치 근처의 측정소명을 알아야 하는데... 현재 위치에서 가장 가까운 측정소를 찾는 방법을 강구해 봐야겠다. 카카오맵 이용해서 가능한지 살펴봐야겠다.
우선 관측소명을 하드코딩해서 미세먼지 데이터를 불러온다.
api 호출 전
에어코리아 api 호출
String airConditon = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?'
'stationName=운정&dataTerm=DAILY&pageNo=1&ver=1.0'
'&numOfRows=1&returnType=json&serviceKey=$apiKey';
위 등급 구간별로 이미지와 텍스트가 변경되도록 처리했다.
결과
여기까지 완성.
근처 측정소 찾기 API
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073877
한국환경공단_에어코리아_측정소정보
대기질 측정소 정보를 조회하기 위한 서비스로 TM 좌표기반의 가까운 측정소 및 측정소 목록과 측정소의 정보를 조회할 수 있다. ※ 운영계정으로 사용하고자 할 경우 에어코리아 OpenAPI 사용자
www.data.go.kr
공공데이터의 에어코리아-측정소 정보 api를 이용해 근처의 측정소 정보를 받아온다.
tm x, y 좌표를 사용하기 때문에 일반 x, y좌표를 tm식으로 받아오기 위해 카카오맵 api를 이용했다.
카카오맵 좌표 변환 API
https://developers.kakao.com/docs/latest/ko/local/dev-guide
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
코드
//카카오맵 좌표계 변환
var kakaoXYUrl = Uri.parse('https://dapi.kakao.com/v2/local/geo/transcoord.json?'
'x=$userLongi&y=$userLati&input_coord=WGS84&output_coord=TM');
var kakaoTM = await http.get(kakaoXYUrl, headers: {"Authorization": "KakaoAK $kakaoApiKey"});
var TM = jsonDecode(kakaoTM.body);
tm_x = TM['documents'][0]['x'];
tm_y = TM['documents'][0]['y'];
근접 측정소 api 호출
//근접 측정소
var closeObs = 'http://apis.data.go.kr/B552584/MsrstnInfoInqireSvc/getNearbyMsrstnList?'
'tmX=$tm_x&tmY=$tm_y&returnType=json&serviceKey=$apiKey';
http.Response responseObs = await http.get(Uri.parse(closeObs));
if(responseObs.statusCode == 200) {
obsJson = jsonDecode(responseObs.body);
}
obs = obsJson['response']['body']['items'][0]['stationName'];
가장 가까운 측정소 정보를 obs 변수에 저장
String airConditon = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?'
'stationName=$obs&dataTerm=DAILY&pageNo=1&ver=1.0'
'&numOfRows=1&returnType=json&serviceKey=$apiKey';
위 관측소 정보를 토대로 미세먼지/초미세 먼지 측정 정보를 받아온다.
결과
위치가 달라져도 해당 지역의 데이터를 잘 불러온다.
*오류 발생시에는 다음과 같이 뜨도록 처리했다.
생각보다 예외처리할 데이터가 많다.
코드 정리와 예외처리는 가장 마지막에 해야겠다. 우선 주간날씨부터 해결하자.
'앱 프로그래밍 > Flutter' 카테고리의 다른 글
플러터로 기상청 날씨 앱 만들기 일지 6. 시간별 날씨, 3일간 오전/오후 날씨 아이콘 처리 (2) | 2022.01.16 |
---|---|
플러터 DateFormat 요일 한국어로 출력 (0) | 2022.01.14 |
플러터로 기상청 날씨 앱 만들기 일지 5. 기상청 API 데이터 연동 오류 수정(HTTP service에러는 해결 불가능...) (2) | 2022.01.14 |
플러터 API key 숨기기 (0) | 2022.01.09 |
플러터로 기상청 날씨 앱 만들기 일지 3. 역지오코딩(위도, 경도 -> 주소 불러오기) (0) | 2022.01.08 |
플러터로 기상청 날씨 앱 만들기 일지 2. 데이터 연동(기상청 API) (0) | 2022.01.05 |