'Developer Gom/JAVA'에 해당되는 글 1건
- 2011.03.05 Console 용 JAVA 기상정보 프로그램
* 2012년 8월 현재부터 구글 날씨 API 서비스가 지원되지 않는 관계로 이 프로그램은 정상적으로 동작하지 않습니다 *
// Google 기상 예보 XML 정보를 바탕으로 지원되는 지역의
// 기상정보를 Parsing 해서 보여주는 프로그램
import java.io.*;
import java.net.URL;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.util.Vector;
public class XML {
enum MODE { NULL,CURRENT,FORECAST };
public static void main(String args[]) throws Exception {
MODE mode = MODE.NULL;
InputStream is = null;
Vector vt = new Vector();
WEATHER_DATA wd = new WEATHER_DATA();
boolean isFirst = true;
if( args.length <= 0 ) {
System.out.println("Usage : [Program Name] [City Name]");
System.exit(0);
}
is = new URL("http://www.google.com/ig/api?weather="+args[0]+"&ie=utf-8&oe=utf-8&hl=ko").openStream();
XMLInputFactory xmlif = XMLInputFactory.newInstance();
XMLStreamReader xmler = xmlif.createXMLStreamReader(is);
int event = 0;
do {
if( xmler.hasNext()) {
event = xmler.next();
if( event == xmler.START_ELEMENT ){
String nodeName = xmler.getName().toString();
// MODE Read Mode 선택
if( nodeName.equals("current_conditions")){
mode = MODE.CURRENT;
continue;
}
else if(nodeName.equals("forecast_conditions")){
mode = MODE.FORECAST;
continue;
}
switch(mode) {
case CURRENT:
if( nodeName.equals("condition")){
wd.condition = xmler.getAttributeValue(0);
}else if( nodeName.equals("temp_c")) {
wd.temp = xmler.getAttributeValue(0);
} else if( nodeName.equals("humidity")) {
wd.humidity = xmler.getAttributeValue(0);
} else if( nodeName.equals("wind_condition")) {
wd.wind = xmler.getAttributeValue(0);
wd.city = args[0];
vt.add(wd);
wd = new WEATHER_DATA();
}
break;
case FORECAST:
if( !isFirst ){
if( nodeName.equals("day_of_week")) {
wd.day_of_week = xmler.getAttributeValue(0);
} else if( nodeName.equals("low")) {
wd.low = xmler.getAttributeValue(0);
} else if( nodeName.equals("high")) {
wd.high = xmler.getAttributeValue(0);
} else if( nodeName.equals("condition")){
wd.condition = xmler.getAttributeValue(0);
wd.city = args[0];
vt.add(wd);
wd = new WEATHER_DATA();
}
}
//
if( isFirst && nodeName.equals("condition"))
isFirst = false;
break;
default:
break;
}
}
}
else {
if( isFirst )
System.out.println("도시 "+args[0]+"은(는) 지원되지 않는 도시입니다.");
break;
}
} while(true);
for(int i=0; i<vt.size(); i++){
WEATHER_DATA dt = (WEATHER_DATA) vt.get(i);
if( !dt.day_of_week.equals(""))
System.out.println("\n** "+dt.day_of_week+"요일 **");
else
System.out.println("** "+args[0]+"의 현재날씨 **");
System.out.println("날씨: "+dt.condition);
if( !dt.temp.equals(""))
System.out.println("기온: "+dt.temp+"℃");
if( !dt.low.equals(""))
System.out.println("최저기온: "+dt.low+"℃");
if( !dt.high.equals(""))
System.out.println("최고기온: "+dt.high+"℃");
if( !dt.humidity.equals(""))
System.out.println(dt.humidity);
if( !dt.wind.equals(""))
System.out.println(dt.wind);
}
}
}
// Weather Data Class
public class WEATHER_DATA {
public String day_of_week;
public String city;
public String condition;
public String temp;
public String low;
public String high;
public String humidity;
public String wind;
public String icon;
public WEATHER_DATA(){
reset();
}
public void reset() {
day_of_week="";
city="";
condition="";
temp="";
low="";
high="";
humidity="";
wind="";
icon="";
}
}