`

调用天气预报

阅读更多

    随着项目的进行,总感觉以前写的东西不是很如意,或者说没有说到点子上去,比如说上次在“怎么在网站中插入天气预报,qq,发送邮件 ”,只是简单笼统的说了一下,并没有结合项目情况,现在假定项目中需要获取天气预报的信息而界面展示由程序员自己来设设计,ok,这里我们还是使用中国天气 这里提供的插件。

   下面我们在浏览器中输入:http://m.weather.com.cn/data/101221001.html,来查看显示的信息:

{"weatherinfo":{"city":"黄山","city_en":"huangshan","date_y":"2012年11月26日","date":"","week":"星期一","fchh":"11","cityid":"101221001","temp1":"11℃~2℃","temp2":"13℃~7℃","temp3":"13℃~9℃","temp4":"10℃~8℃","temp5":"13℃~8℃","temp6":"11℃~8℃","tempF1":"51.8℉~35.6℉","tempF2":"55.4℉~44.6℉","tempF3":"55.4℉~48.2℉","tempF4":"50℉~46.4℉","tempF5":"55.4℉~46.4℉","tempF6":"51.8℉~46.4℉","weather1":"多云转晴","weather2":"阴转小雨","weather3":"小雨","weather4":"阴","weather5":"小雨","weather6":"中雨转小雨","img1":"1","img2":"0","img3":"2","img4":"7","img5":"7","img6":"99","img7":"2","img8":"99","img9":"7","img10":"99","img11":"8","img12":"7","img_single":"1","img_title1":"多云","img_title2":"晴","img_title3":"阴","img_title4":"小雨","img_title5":"小雨","img_title6":"小雨","img_title7":"阴","img_title8":"阴","img_title9":"小雨","img_title10":"小雨","img_title11":"中雨","img_title12":"小雨","img_title_single":"多云","wind1":"西北风转东风小于3级","wind2":"东南风小于3级","wind3":"东北风小于3级","wind4":"微风","wind5":"微风","wind6":"微风","fx1":"西北风","fx2":"东风","fl1":"小于3级","fl2":"小于3级","fl3":"小于3级","fl4":"小于3级","fl5":"小于3级","fl6":"小于3级","index":"凉","index_d":"天气凉,建议着厚外套加毛衣等春秋服装。年老体弱者宜着大衣、呢外套加羊毛衫。","index48":"温凉","index48_d":"建议着夹衣或西服套装加薄羊毛衫等春秋服装。年老体弱者宜着夹衣或风衣加羊毛衫。","index_uv":"弱","index48_uv":"最弱","index_xc":"不宜","index_tr":"适宜","index_co":"较舒适","st1":"11","st2":"0","st3":"14","st4":"8","st5":"13","st6":"10","index_cl":"较适宜","index_ls":"基本适宜","index_ag":"极不易发"}}

 这里我们可以发现,返回的是一个JSON的字符串,那么我们可以通过定义实体类,通过GSON or json lib 来将JSON字符串转实体,然后将实体传到前台显示。

 

ok,下面我们再来理一下整体思路:

     1、上面http://m.weather.com.cn/data/101221001.html,这个地址因不同的城市而编码不同,所以我们需要根据提供的xml,通过name查找对应的编码,然后设置路径(这里需要涉及XML的解析)

     2、封装实体,将JSON转为对象

     3、将对象传到前台通过我们自己定义的样式展示出来,废话说完了,上代码

 

一、根据不同城市获取不同的编码

City.java

package com.iflytek.demo;

/**
 * @author xdwang
 * 
 * @create 2012-11-26 下午1:30:17
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 城市实体类
 * 
 */
public class City {

	/**
	 * 城市名称
	 */
	private String name;

	/**
	 * 城市对应的编码
	 */
	private String code;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

}

 

CitySaxHelper.java

package com.iflytek.demo;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * @author xdwang
 * 
 * @create 2012-11-26 下午1:33:37
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description XMLTO City by sax
 * 
 */
public class CitySaxHelper extends DefaultHandler {
	private List<City> cities = null; // 保存多条数据
	private City city = null;

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		if ("city".equals(qName)) {
			this.cities.add(this.city);
			this.city = null; // 准备保存下次的数据
		}
	}

	@Override
	public void startDocument() throws SAXException {
		this.cities = new ArrayList<City>(); // 表示开始解析文档,所以要设置集合
	}

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		if ("city".equals(qName)) { // 是一个city节点
			this.city = new City(); // 实例化city对象
		}
		for (int i = 0; i < attributes.getLength(); i++) {
			if (attributes.getLocalName(i) != null && attributes.getLocalName(i) != "" && attributes.getValue(i) != null && attributes.getValue(i) != "") {
				if ("name".equals(attributes.getLocalName(i))) {
					this.city.setName(attributes.getValue(i));
				}
				if ("code".equals(attributes.getLocalName(i))) {
					this.city.setCode(attributes.getValue(i));
				}
			}
		}

	}

	public List<City> getAll() {
		return cities;
	}

	/**
	 * @descrption 根据城市获取城市的编码 注意这里的黄山没有,只有黄山区、黄山站,其他可能还会存在相同情况,这里就不特殊处理了
	 * @author xdwang
	 * @create 2012-11-26下午2:54:36
	 * @param CityName
	 * @return
	 */
	public String getCodeByCityName(String CityName) {
		CityName = CityName.trim();
		if (CityName == null || CityName == "") {
			return null;
		}
		for (City city : cities) {
			if (city.getName().equals(CityName)) {
				return city.getCode();
			}
		}
		return null;
	}
}
 

WeatherInfo.java

package org.elongcom.common;

/**
 * @author xdwang
 * 
 * @create 2012-11-25 下午2:32:01
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 天气实体类
 * 
 */
public class WeatherInfo {
	/**
	 * 当天温度
	 */
	private String temp1;

	/**
	 * 第二天温度
	 */
	private String temp2;

	/**
	 * 当天天气,多云
	 */
	private String weather1;

	/**
	 * 第二天天气,多云
	 */
	private String weather2;

	/**
	 * 当天的天气图片
	 */
	private String img1;

	/**
	 * 第二天的天气图片
	 */
	private String img2;

	/**
	 * 当天的风向
	 */
	private String wind1;

	/**
	 * 第二天的风向
	 */
	private String wind2;

	public String getTemp1() {
		return temp1;
	}

	public void setTemp1(String temp1) {
		this.temp1 = temp1;
	}

	public String getTemp2() {
		return temp2;
	}

	public void setTemp2(String temp2) {
		this.temp2 = temp2;
	}

	public String getWeather1() {
		return weather1;
	}

	public void setWeather1(String weather1) {
		this.weather1 = weather1;
	}

	public String getWeather2() {
		return weather2;
	}

	public void setWeather2(String weather2) {
		this.weather2 = weather2;
	}

	public String getImg1() {
		return img1;
	}

	public void setImg1(String img1) {
		this.img1 = img1;
	}

	public String getImg2() {
		return img2;
	}

	public void setImg2(String img2) {
		this.img2 = img2;
	}

	public String getWind1() {
		return wind1;
	}

	public void setWind1(String wind1) {
		this.wind1 = wind1;
	}

	public String getWind2() {
		return wind2;
	}

	public void setWind2(String wind2) {
		this.wind2 = wind2;
	}

}
 

 

通过网页上展示的JSON字符串可以发现这里需要两个对象,WeatherInfoTemp.java

package org.elongcom.common;

/**
 * @author xdwang
 * 
 * @create 2012-11-25 下午3:06:41
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description
 * 
 */
public class WeatherInfoTemp {

	private WeatherInfo weatherinfo;

	public WeatherInfo getWeatherinfo() {
		return weatherinfo;
	}

	public void setWeatherinfo(WeatherInfo weatherinfo) {
		this.weatherinfo = weatherinfo;
	}

}
 

读取网页内容,WeatherHelper.java

package org.elongcom.common;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @author xdwang
 * 
 * @create 2012-11-25 下午2:51:23
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 天气帮助类
 * 
 */
public class WeatherHelper {

	public static String getWeatherInfoStr(String urlPath) {
		if (urlPath == null || urlPath == "") {
			return "";
		}
		StringBuffer sb = new StringBuffer();
		try {
			URL url = new URL(urlPath);
			HttpURLConnection hConnect = (HttpURLConnection) url.openConnection();
			BufferedReader rd = new BufferedReader(new InputStreamReader(hConnect.getInputStream(),"UTF-8"));//这里需要指定编码格式,否则可能会出现乱码
			int ch;
			for (int length = 0; (ch = rd.read()) > -1; length++)
				sb.append((char) ch);
			rd.close();
			hConnect.disconnect();
		} catch (Exception e) {
		}
		return sb.toString();
	}

}
 

 

Controller

	SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser saxParser = null;
		CitySaxHelper citySaxHelper = new CitySaxHelper();
		saxParser = factory.newSAXParser();
		File file = new File("D:" + File.separator + "WeatherCity.Xml");
		saxParser.parse(file, citySaxHelper);
		String code = citySaxHelper.getCodeByCityName("黄山区");
		String weatherInfoStr = WeatherHelper.getWeatherInfoStr("http://m.weather.com.cn/data/"+code+".html");
		Gson gson = new Gson();
		WeatherInfoTemp temp = gson.fromJson(weatherInfoStr, WeatherInfoTemp.class);
		WeatherInfo weatherInfo = temp.getWeatherinfo();
		model.addAttribute("weather", weatherInfo);
 

 

 

分享到:
评论

相关推荐

    smartweather调用天气预报

    标题中的“smartweather调用天气预报”指的是使用特定的API(应用程序接口)或者服务来获取并展示天气预报信息。在本例中,"smartweather"可能是一个开发平台或工具,它提供了与天气预报数据交互的功能。这个过程...

    调用天气预报webservice

    这里我们关注的是“调用天气预报Web Service”使用Axis1.4,这是一个较老但仍然广泛使用的Java Web Service框架。下面将详细阐述相关知识点。 1. **Web Service**:Web Service是一种通过HTTP协议进行通信的服务,...

    WebService 的调用天气预报(附源码Demo)

    在这个示例中,我们关注的是如何使用WebService调用天气预报服务。 首先,我们需要了解`wsimport`工具。`wsimport`是Java SDK的一部分,用于从WSDL(Web Service Description Language)文件生成Java客户端存根类。...

    java 通过axis调用天气预报的webservice

    标题中的“Java通过Axis调用天气预报的WebService”是指使用Java编程语言,通过Apache Axis库来访问和使用公开的天气预报Web服务。Apache Axis是一个开放源码的SOAP(简单对象访问协议)工具包,它允许开发者创建和...

    asp.net 调用天气预报接口实现天气查寻源码

    在这个场景中,我们讨论的是如何利用ASP.NET技术调用天气预报接口,实现一个天气查询的功能。以下是对这个主题的详细解释: 一、ASP.NET Web API ASP.NET Web API 是ASP.NET框架的一部分,专门设计用来构建RESTful...

    JAVA调用天气预报WEB服务实例

    总的来说,通过这个`JAVA调用天气预报WEB服务实例`,你可以学习到如何在Java中创建Web服务客户端,理解SOAP请求和响应的处理过程,以及如何解析和使用返回的数据。这对于开发涉及跨系统通信的项目具有很高的实践价值...

    webservice接口调用天气预报例程

    4. **调用天气预报接口**: 使用生成的代理类,我们可以调用Web服务提供的方法,比如获取某个城市的天气预报。假设服务有一个名为`GetWeather`的方法,接受城市名称作为参数并返回天气信息,我们可以这样调用: `...

    c# winfrom 调用天气预报的webservice

    在本例中,我们将调用一个提供天气预报的WebService接口。 1. **安装NuGet包** 在C#项目中,我们需要使用`System.ServiceModel`库来处理WebService调用。可以通过Visual Studio的NuGet包管理器安装这个库,如果...

    Qt不规则窗体程序,含调用天气预报和翻译WebService

    总的来说,实现“Qt不规则窗体程序,含调用天气预报和翻译WebService”涉及到了Qt图形界面的自定义、网络请求的处理以及数据解析等多个方面。通过学习和实践,你可以创建出功能丰富、视觉效果独特的应用程序。

    Android之Webservice详解与调用天气预报Webservice完整实例

    5. **调用天气预报Webservice**:天气预报Webservice通常提供特定的URL和方法,如GET或POST请求,以及需要传递的参数,如城市名。在Android中,我们可以通过Ksoap2的 SoapSerializationEnvelope 和 HttpTransportSE ...

    VC++2012调用天气预报WebService

    VC++2012 调用 天气预报WebService 源代码,获取指定城市的天气信息 使用了GSOAP工具集,参考http://blog.csdn.net/startexcel/article/details/8208135

    一个使用HttpClient调用天气预报接口的例程

    在这个例程中,我们使用GET方法调用天气预报接口,将请求参数附在URL后面。 3. **JSON格式**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。天气...

    调用天气预报Web Services实例.rar

    本实例主要关注的是如何调用天气预报相关的Web Services,这是一个常见的跨平台、跨语言的数据交换技术,广泛应用于移动应用、网站以及企业级系统的集成。 首先,我们需要了解Web Services的基本概念。Web Services...

    webservice调用天气预报

    标题中的“webservice调用天气预报”指的是利用Web服务技术来获取和展示不同城市省份的天气预报信息。 在Java开发环境中,IntelliJ IDEA(简称IDEA)是一款广泛使用的集成开发环境,它提供了方便的工具来创建和消费...

    VC++调用天气预报Web services方法总结

    VC++调用天气预报Web services方法总结 本文将详细介绍如何使用VC++调用天气预报Web services方法,包括下载和安装gsoap_2.8.14.zip工具,生成头文件和源文件,编译和运行程序等步骤。 一、下载和安装gsoap_2.8.14...

    JAVA用WebService实现调用天气预报功能

    本项目名为"JAVA用WebService实现调用天气预报功能",其核心是利用Java技术对接中央气象台的Web服务接口,获取并显示实时天气信息。 首先,理解Java中的WebService调用原理至关重要。SOAP是用于在Web上交换结构化和...

    WebService调用天气预报小例子

    在这个“WebService调用天气预报小例子”中,我们将探讨如何利用WebService获取并显示实时天气预报信息。 首先,WebService是基于标准的XML(Extensible Markup Language)和SOAP(Simple Object Access Protocol)...

    java调用天气预报webservice

    Java调用天气预报WebService是一个常见的任务,特别是在开发集成多种服务的应用程序时。WebService是一种基于XML标准的、平台和语言无关的通信协议,用于在不同系统间交换数据。在这个场景中,我们将探讨如何使用...

    使用eclipse调用天气预报的测试代码WSDL

    标题中的“使用eclipse调用天气预报的测试代码WSDL”揭示了这是一个关于在Eclipse集成开发环境中,通过Web服务描述语言(WSDL)来访问天气预报API的教程。WSDL是一种XML格式,用于定义网络服务,特别是SOAP(简单...

Global site tag (gtag.js) - Google Analytics