본문 바로가기

Java/실습

[Java] 미세먼지 - 종합 실습

서울 열린 데이터 광장에서  미세먼지 데이터를

오픈 api 주소로 받아와서 실습해보는 시간을 가져보겠습니다.

 

요구조건

미세먼지 -> 파싱 -> 값들을 -> txt파일에 담기

프로그램실행시 출력 : 날짜, 측정 구 , 미세먼지 ,초미세먼지, 오존 , 이산화질소 , 일산화탄소, 아황산가스

날짜형식 : 연-월-일-오전/오후 -시 - 요일 (프로그램 실행 날짜 / 시간)

 

 

public class AirPollMain2 {

public static void main(String[] args) {

try {

InputStream is = puftHttpClient.download(//api주소)

XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();

XmlPullParser xpp = xppf.newPullParser();

xpp.setInput(is, "UTF-8");

int type = xpp.getEventType();

 

먼저 api주소를 InputStream 변수에 넣어주고

Parsing을 위한 초기설정을 해줍니다.

 

BufferedWriter bw = null;

 

txt파일에 담아야하기 때문에 BufferedWriter 변수를 선언해줍니다.

 

Date d = new Date();

 

현재 시간을 반영한 Date 객체입니다.

 

SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd-a-hh-E");

String now = sdf.format(d);

 

출력할 날짜 형식에 맞춰 포맷시켜줍니다.

그리고 문자열에 해당 포맷시킨 날짜를 넣어줍니다.

 

("YYYY-MM-dd-a-hh-E");

 

각각 연도 - 월 - 일 - 오전/오후 - 시간 - 요일(첫 글자)

 

FileWriter fw = new FileWriter("C:\\Users\\sdedu\\Desktop\\실습코드\\pollution.txt", true);

bw = new BufferedWriter(fw);

 

파일에 적기 위한 FileWriter 변수를 선언해줍니다.

 

String tagName = null;

while(type != XmlPullParser.END_DOCUMENT) {

if(type == XmlPullParser.START_TAG) {

tagName = xpp.getName();

}else if(type == XmlPullParser.TEXT) {

if(tagName.equals("PM10")) {

System.out.println();

System.out.print(now + " ");

bw.write(now + " ");

System.out.printf(xpp.getText());

bw.write(xpp.getText() + ",");

}else if(tagName.equals("PM25")) {

System.out.printf(","+ xpp.getText());

bw.write(xpp.getText()+ ",");}

else if(tagName.equals("O3")) {

System.out.printf(","+ xpp.getText());

bw.write(xpp.getText()+ ",");}

else if(tagName.equals("NO2")) {

System.out.printf(","+ xpp.getText());

bw.write(xpp.getText()+ ",");

}else if(tagName.equals("CO")) {

System.out.printf(","+ xpp.getText());

bw.write(xpp.getText()+ ",");

}else if(tagName.equals("SO2")) {

System.out.printf(","+ xpp.getText());

bw.write(xpp.getText() + "\r\n");

}

}else if(type == XmlPullParser.END_TAG) {

tagName = " ";}

xpp.next(); 

type = xpp.getEventType(); 

bw.flush();

}

 

각 XML 데이터에 맞는 변수에 따라서

데이터를 bw.write를 사용해서

txt파일에 write합니다.

 

마지막엔 bw.flush()를 사용해서

버퍼를 비웁니다.

 

} catch (Exception e) {

e.printStackTrace();

}

}}

 

try-catch를 사용해서 에러처리까지 해줬습니다.

 

txt파일

 

 

 

Date 기능, 파일 입출력 기능, 데이터 통신 기능을 종합한

실습이었습니다.

txt파일에 넣을 때 데이터가 들어올 때마다 반점이나

줄바꿈 처리를 해야하는 작업이 번거로웠던 것 같습니다.

줄바꿈을 첫번째 데이터가 넘어오기 전이 아닌,

다른 곳에서 하면 데이터가 이상하게 출력되기도 했습니다.

Parsing 구조를 완벽히 이해하는 것이 필요합니다.

 

 

 

'Java > 실습' 카테고리의 다른 글

[Java] 맛집 탐색  (1) 2024.12.20
[Java] 지하철 - JSON 실습  (0) 2024.12.19
[Java] 기상청 (HTTP 실습)  (0) 2024.12.18
[Java] HTTP통신  (2) 2024.12.18
[Java] Split과 Date 실습  (1) 2024.12.17