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

2022. 1. 9. 18:58·앱 프로그래밍/Flutter
반응형

에어코리아 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
'앱 프로그래밍/Flutter' 카테고리의 다른 글
  • 플러터 DateFormat 요일 한국어로 출력
  • 플러터로 기상청 날씨 앱 만들기 일지 5. 기상청 API 데이터 연동 오류 수정(HTTP service에러는 해결 불가능...)
  • 플러터 API key 숨기기
  • 플러터로 기상청 날씨 앱 만들기 일지 3. 역지오코딩(위도, 경도 -> 주소 불러오기)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    Jiraynor Programming
    프로젝트
    웹사이트
    d3
    mysql
    리액트
    블로그 제작
    공식문서
    포트폴리오
    클론 프로젝트
    ZeroCho
    알고리즘
    Til
    강의내용정리
    SWEA
    구현
    Next.js
    AWS
    bfs
    자바스크립트
    타입스크립트
    파이썬
    자바
    백준
    플러터
    컴퓨터네트워크
    뉴렉처
    React
    프로그래머스
    spring boot
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
플러터로 기상청 날씨 앱 만들기 일지 4. 데이터 연동2(에어코리아 API)
상단으로

티스토리툴바