서울 열린 데이터 광장에서 미세먼지 데이터를
오픈 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를 사용해서 에러처리까지 해줬습니다.
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 |