服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

使用yahoo service实现天气预报

天气预报是非常有用的服务,如果能在网站上集成天气预报,能极大地方便用户查询。

寻遍了国内所有的气象站点,没找见提供web服务的,太小气了,只能去国外找。noaa(www.weather.gov)提供一个web服务,但是死活连不上服务器,估计被屏蔽了,其他提供全球天气预报的有www.weather.com和yahoo,

不过weather.com的服务太麻烦,还需要注册,相比之下,yahoo的天气服务既简单又快速,只需一个http请求,然后解析返回的xml即可获得天气预报。

以北京为例,在weather.yahoo.com查找北京的城市代码为chxx0008,对应的url为:

http://xml.weather.yahoo.com/forecastrss?u=c&p=chxx0008

然后,通过sax解析返回的xml:

url url = new url("http://xml.weather.yahoo.com/forecastrss?u=c&p=chxx0008");
inputstream input = url.openstream();
saxparserfactory factory = saxparserfactory.newinstance();
factory.setnamespaceaware(false);
saxparser parser = factory.newsaxparser();
parser.parse(input, new yahoohandler());

自己定义一个yahoohandler来响应sax事件:

/**
 * for more information, please visit: http://www.crackj2ee.com
 * author: liao xuefeng
 */
public class yahoohandler extends defaulthandler {

    public void startelement(string uri, string localname, string qname, attributes attributes)

throws saxexception {
        if("yweather:condition".equals(qname)) {
            string s_date = attributes.getvalue(3);
            try {
                date publish = new simpledateformat("eee, dd mmm yyyy hh:mm a z",

locale.us).parse(s_date);
                //system.out.println("publish: " + publish.tostring());
            }
            catch (exception e) {
                e.printstacktrace();
                throw new saxexception("cannot parse date: " + s_date);
            }
        }
        else if("yweather:forecast".equals(qname)) {
            string s_date = attributes.getvalue(1);
            date date = null;
            try {
                date = new simpledateformat("dd mmm yyyy", locale.us).parse(s_date);
            }
            catch (exception e) {
                e.printstacktrace();
                throw new saxexception("cannot parse date: " + s_date);
            }
            int low = integer.parseint(attributes.getvalue(2));
            int high = integer.parseint(attributes.getvalue(3));
            string text = attributes.getvalue(4);
            int code = integer.parseint(attributes.getvalue(5));
            system.out.println("weather: "+ text + ", low=" + low + ", high=" + high);
        }
        super.startelement(uri, localname, qname, attributes);
    }
}

运行结果:

weather: partly cloudy, low=7, high=16
weather: sunny, low=7, high=20

扫描关注微信公众号