'Developer Gom/JAVA'에 해당되는 글 1건

  1. 2011.03.05 Console 용 JAVA 기상정보 프로그램
2011. 3. 5. 19:39

* 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="";
    }
}

JWeather.jar

Posted by 나이스곰