岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> XML >> WebServices >> Java正文
SAX读取Yahoo Service天气预报数据
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-23 0:05:10
    天气预报是非常有用的服务,如果能在网站上集成天气预报,能极大地方便用户查询.
    寻遍了国内所有的气象站点,没找见提供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事件:
import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import javax.xml.parsers.SAXParserFactory;

import javax.xml.parsers.SAXParser;

import org.xml.sax.helpers.DefaultHandler;

import java.net.URL;

import java.io.InputStream;

import java.util.Date;

import java.util.Locale;



import java.text.SimpleDateFormat;





/**

* 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); } public static void main(String args[]){ try{ 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()); }catch(Exception e){ System.out.println(e.toString()); } } }

运行结果: C:\java>java YahooHandler
Weather: Mostly Cloudy, low=17, high=28
Weather: AM Clouds/PM Sun, low=16, high=26

Yahoo会返回当天和第二天的Weather预报。

[1] [2] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    传世私服 传奇世界私服 天龙八部私服 bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365