今天比较闲,可以自由的学习了,看到公司以前做项目中使用天气预报使用新浪的天气预报,解析过程不仅(ˇˍˇ) 想~大哭.%>_<%........
为客户提供一个天气预报的服务就那么难吗??
于是我在网上搜索终于找到一个比较好的天气预报?yohoo的天气预报,并测试一下可以使用!基本可以满足可以的需求吧?
思路如下:根据查询天气预报的外部的路径输入自己查询的参数这样既可窃取别人网站的果实,怎么样O(∩_∩)O哈哈哈~。
天气预报是非常有用的服务,如果能在网站上集成天气预报,能极大地方便用户查询。
寻遍了国内所有的气象站点,没找见提供Web服务的,太小气了,只能去国外找。www.weather.gov提供一个Web服务,但是死活连不上服务器,估计被屏蔽了,其他提供全球天气预报的有www.weather.com和yahoo,
不过weather.com的服务太麻烦,还需要注册,相比之下,yahoo的天气服务既简单又快速,只需一个http请求,然后解析返回的XML即可获得天气预报。
以北京为例,在weather.yahoo.com查找北京的城市代码为CHXX0008,对应的URL为:
package com.unutrip.weather.ws.xml;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 解析天气预报返回的信息(此处由于xml比较小采用DOm解析,^_^)
*
* @author longgangbai
*
*/
public class YahooHandler extends DefaultHandler {
public void startDocument() throws SAXException {
// no op
}
public void endDocument() throws SAXException {
// no op
}
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);
} 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);
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
}
}
package com.unutrip.weather.ws;
import java.io.InputStream;
import java.net.URL;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import com.unutrip.weather.ws.xml.YahooHandler;
/**
* 调用外网的地址的提供的服务信息
* @author longgangbai
*
*/
public class YahooWeather {
public static void main(String[] args) {
URL url;
try {
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());
} catch (Exception e) {
System.out.println(e);
}
}
}