使用YahooService实现天气预报

王朝other·作者佚名  2008-05-19
宽屏版  字体: |||超大  

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

寻遍了国内所有的气象站点,没找见提供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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有