#java实现天气预报

那么这篇文章将给大家介绍:java如何实现天气预报。

开始之前还是先给大家看看我做的天气预报效果吧。

下面这个是我用exe4j已经打包成的exe文件,在桌面上可以直接双击运行

java调用天气预报接口

双击运行 “天气预报”,运行效果如下图,当前城市已经自动定位到我所在的城市:衡阳,当然了,这里的查询城市是可以进行手动切换的

java调用天气预报接口

想要实现如上功能,你需要掌握以下三个知识点:

1.swt编程(界面编程)

2.天气接口的调用

3.json或者xml数据的解析

第一点我就不多说了,感兴趣的同学可以去研究研究,说一下第二点和第三点

第二点:天气接口的调用:

像这种天气数据,我们自己是没办法生成的,只能通过接口的调用来拿数据#java实现天气预报,我说下我是如何调用天气接口的,网上天气接口很多,大家随便就可以找到很多。这些接口一般返回的数据分为json和xml格式java调用天气预报接口,我调用的是:

 这个接口

下面是调用接口的代码:

package com.yc.weather;
import java.io.InputStream;
import java.io.StringReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import org.apache.commons.io.IOUtils;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
/**
 * 天气预报接口
 * 
 * @author Administrator
 *
 */
public class WeatherApi {
	/**
	 * 以Json返回
	 * 
	 * @param City
	 * @throws Exception
	 */
	public static void json(String City) throws Exception {
		// 参数url化
		String city = URLEncoder.encode(City, "utf-8");
		// 拼地址
		String apiUrl = String.format("https://www.sojson.com/open/api/weather/json.shtml?city=%s", city);
		// 开始请求
		URL url = new URL(apiUrl);
		URLConnection open = url.openConnection();
		InputStream input = open.getInputStream();
		// 这里转换为String
		String result = IOUtils.toString(input, "utf-8");
		// 输出
		System.out.println(result);
	}
	/**
	 * 以xml返回
	 * 
	 * @param City
	 * @return
	 * @throws Exception
	 */
	public static Document xml(String City) throws Exception {
		// 参数url化
		String city = URLEncoder.encode(City, "utf-8");
		// 拼地址
		String apiUrl = String.format("https://www.sojson.com/open/api/weather/xml.shtml?city=%s", city);
		// 开始请求
		URL url = new URL(apiUrl);
		URLConnection open = url.openConnection();
		InputStream input = null;
		try {
			input = open.getInputStream();
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 这里转换为String
		String result = IOUtils.toString(input, "utf-8");
		// 输出
		System.out.println(result);
		StringReader sr = new StringReader(result);
		InputSource is = new InputSource(sr);
		Document doc = (new SAXBuilder()).build(is);
		return doc;
	}
	/**
	 * 测试一下
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		xml("衡阳");
		json("衡阳");
	}
}

该接口有两种返回数据:json和xml,我用的是xml格式的数据,并用Jdom进行数据解析。

第三点:json或者xml数据的解析

下面是利用Jdom进行xml数据解析的核心代码:

package com.yc.weather;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
/**
 * 天气数据xml解析
 * @author Administrator
 *
 */
public class WeatherJdom {
	public static Weather xml(String City) throws Exception {
		Weather weather = new Weather();
		// 使用的是sax遍历
		SAXBuilder builder = new SAXBuilder();
		// builder返回值是一个document类型的值,给出需要解析的xml的路径,可能会抛异常
		Document document = null;
		try {
			document = WeatherApi.xml(City);
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 获取根节点,返回值是一个元素类型的值

java调用天气预报接口

Element resp = document.getRootElement(); // 获取根节点下的子节点,返回类型为List类型的值 Element city = resp.getChild("city");// 获得city元素 weather.setCity(city.getText()); Element updatetime = resp.getChild("updatetime"); weather.setUpdatetime(updatetime.getText()); Element wendu = resp.getChild("wendu"); weather.setWendu(wendu.getText()); Element fengli = resp.getChild("fengli"); weather.setFengli(fengli.getText()); Element shidu = resp.getChild("shidu"); weather.setShidu(shidu.getText()); Element fengxiang = resp.getChild("fengxiang"); weather.setFengxiang(fengxiang.getText()); Element sunrise = resp.getChild("sunrise_1"); weather.setSunrise(sunrise.getText()); Element sunset = resp.getChild("sunset_1"); weather.setSunset(sunset.getText()); Element yesterday = resp.getChild("yesterday"); Element date_1 = yesterday.getChild("date_1"); weather.setYesterday_date(date_1.getText()); Element high_1 = yesterday.getChild("high_1"); weather.setYesterday_high(high_1.getText()); Element low_1 = yesterday.getChild("low_1"); weather.setYesterday_low(low_1.getText()); Element day_1 = yesterday.getChild("day_1"); Element type_1 = day_1.getChild("type_1"); weather.setYesterday_day_type(type_1.getText()); Element fx_1 = day_1.getChild("fx_1"); weather.setYesterday_day_fx(fx_1.getText()); Element fl_1 = day_1.getChild("fl_1"); weather.setYesterday_day_fl(fl_1.getText()); Element night_1 = yesterday.getChild("night_1"); Element night_type_1 = night_1.getChild("type_1"); weather.setYesterday_night_type(night_type_1.getText()); Element night_fx_1 = night_1.getChild("fx_1"); weather.setYesterday_night_fx(night_fx_1.getText()); Element night_fl_1 = night_1.getChild("fl_1"); weather.setYesterday_night_fl(night_fl_1.getText()); Element forecast = resp.getChild("forecast"); List weather_list = forecast.getChildren(); weather.list_weather = new ArrayList(); for (int i = 0; i < weather_list.size(); i++) { Element Weather = (Element) weather_list.get(i); ForecastWeather ForecastWeather = new ForecastWeather(); ForecastWeather.setDate(Weather.getChildText("date")); ForecastWeather.setHigh(Weather.getChildText("high")); ForecastWeather.setLow(Weather.getChildText("low")); Element weather_day = Weather.getChild("day"); ForecastWeather.setDay_type(weather_day.getChildText("type")); ForecastWeather.setDay_fengxiang(weather_day.getChildText("fengxiang")); ForecastWeather.setDay_fengli(weather_day.getChildText("fengli")); Element weather_night = Weather.getChild("night"); ForecastWeather.setNight_type(weather_night.getChildText("type")); ForecastWeather.setNight_fengxiang(weather_night.getChildText("fengxiang")); ForecastWeather.setNight_fengli(weather_night.getChildText("fengli")); weather.list_weather.add(ForecastWeather); } Element zhishu = resp.getChild("zhishus"); List zhishu_list = zhishu.getChildren(); weather.list_zhishu = new ArrayList(); for (int j = 0; j < zhishu_list.size(); j++) { Element Zhishu = (Element) zhishu_list.get(j); Zhishu ZH = new Zhishu(); ZH.setName(Zhishu.getChildText("name")); ZH.setValue(Zhishu.getChildText("value")); ZH.setDetail(Zhishu.getChildText("detail")); weather.list_zhishu.add(ZH); } System.out.println(weather); System.out.println(weather.list_weather); return weather; } /** * 测试一下 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { xml("衡阳"); } }

另外还有两个辅助解析的实体类:

第一个,天气预报实体类

package com.yc.weather;
/**
 * 天气预报实体类
 * @author Administrator
 *
 */
public class ForecastWeather {
	private String date="";
	private String high="";
	private String low="";
	// day
	private String day_type="";
	private String day_fengxiang="";
	private String day_fengli="";
	// night
	private String night_type="";
	private String night_fengxiang="";
	private String night_fengli="";
	public String getDate() {
		return date;
	}
	public void setDate(String date) {
		this.date = date;
	}
	public String getHigh() {
		return high;
	}
	public void setHigh(String high) {
		this.high = high;
	}
	public String getLow() {
		return low;
	}
	public void setLow(String low) {
		this.low = low;
	}
	public String getDay_type() {
		return day_type;
	}
	public void setDay_type(String day_type) {
		this.day_type = day_type;
	}
	public String getDay_fengxiang() {
		return day_fengxiang;
	}
	public void setDay_fengxiang(String day_fengxiang) {
		this.day_fengxiang = day_fengxiang;
	}
	public String getDay_fengli() {
		return day_fengli;
	}
	public void setDay_fengli(String day_fengli) {
		this.day_fengli = day_fengli;
	}
	public String getNight_type() {
		return night_type;
	}
	public void setNight_type(String night_type) {
		this.night_type = night_type;
	}
	public String getNight_fengxiang() {
		return night_fengxiang;
	}
	public void setNight_fengxiang(String night_fengxiang) {
		this.night_fengxiang = night_fengxiang;
	}
	public String getNight_fengli() {
		return night_fengli;
	}
	public void setNight_fengli(String night_fengli) {
		this.night_fengli = night_fengli;
	}
	@Override
	public String toString() {
		return "ForecastWeather [date=" + date + ", high=" + high + ", low=" + low + ", day_type=" + day_type
				+ ", day_fengxiang=" + day_fengxiang + ", day_fengli=" + day_fengli + ", night_type=" + night_type
				+ ", night_fengxiang=" + night_fengxiang + ", night_fengli=" + night_fengli + "]";
	}
}

第二个:天气指数类

package com.yc.weather;
/**
 * 天气指数类
 * @author Administrator
 *
 */
public class Zhishu {
	private String name="";
	private String value="";
	private String detail="";
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	public String getDetail() {
		return detail;
	}
	public void setDetail(String detail) {
		this.detail = detail;
	}
	@Override
	public String toString() {
		return "Zhishu [name=" + name + ", value=" + value + ", detail=" + detail + "]";
	}
	
	
}

解析天气数据,我们还需要导两个jar包:org.jdom 和 mons.io 这两个包,大家可以在网上找到。

下面是测试结果:

这样子,我们就拿到了天气数据了,这个接口可以展示最近一周内的天气#java实现天气预报,经本人测试java调用天气预报接口,准确率90%左右,还挺不错。

拿到天气数据后,接下来就是对数据进行展示了,这个就很简单了,我就不多说了,再配合之前我们讲过的:根据IP自动定位,拿到地理位置后,传到该接口拉取天气数据java调用天气预报接口,然后进行展示,这样就可以实现天气预报功能了。

好了,关于java实现天气预报的经验分享到此,谢谢大家的参阅。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » #java实现天气预报

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们