본문 바로가기
앱 프로그래밍/flutter

플러터로 기상청 날씨 앱 만들기 일지 4. 데이터 연동2(에어코리아 API)

by 청량리 물냉면 2022. 1. 9.
반응형

에어코리아 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';

위 관측소 정보를 토대로 미세먼지/초미세 먼지 측정 정보를 받아온다.

 

 

결과

위치가 달라져도 해당 지역의 데이터를 잘 불러온다. 

 

 

 

*오류 발생시에는 다음과 같이 뜨도록 처리했다.

생각보다 예외처리할 데이터가 많다.

코드 정리와 예외처리는 가장 마지막에 해야겠다. 우선 주간날씨부터 해결하자.

반응형