文档章节

使用百度接口获取天气

Seederland
 Seederland
发布于 2014/12/10 17:44
字数 824
阅读 41
收藏 0

        此前,我一直在找一个可以使用 url 获取天气信息的接口。直至今天我才找到。为了加深印象我决定写下这篇博客。。废话不说了,“上菜”。。。

    首先先定义一个实体类保存城市天气的信息。如下所示

import java.util.List;
import java.util.Map;

/**
 * This class is about the city weather information.
 * @author VictorFeng
 *
 */
 public class CityBean {
	
	//Response error code. If you want to know about more information about this
	//you can go to the document in baidu
	private int errorCode;
	
	//Response status string
	private String status;
	
	//The date
	private String date;
	
	//Current city name
	private String currentCity;
	
	//PM2.5
	private String PM2point5;
	
	//This is some suggestions
	private List<Map<String, String>> index;
	
	//Important. This is the weather data string  
	private List<Map<String, String>> weather_data;
	
	//*********************************************************************
	/**=============get&set=============*/
	public int getErrorCode() {
		return errorCode;
	}
	
	public void setErrorCode(int errorCode) {
		this.errorCode = errorCode;
	}
	
	public String getStatus() {
		return status;
	}
	
	public void setStatus(String status) {
		this.status = status;
	}
	
	public String getData() {
		return date;
	}
	
	public void setData(String data) {
		this.date = data;
	}
	
	public String getCurrentCity() {
		return currentCity;
	}
	
	public void setCurrentCity(String currentCity) {
		this.currentCity = currentCity;
	}
	
	public String getPM2point5() {
		return PM2point5;
	}
	
	public void setPM2point5(String pM2point5) {
		PM2point5 = pM2point5;
	}
	
	public List<Map<String, String>> getIndex() {
		return index;
	}
	
	public void setIndex(List<Map<String, String>> index) {
		this.index = index;
	}
	
	public List<Map<String, String>> getWeather_data() {
		return weather_data;
	}
	
	public void setWeather_data(List<Map<String, String>> weather_data) {
		this.weather_data = weather_data;
	}
	
	//**********************************************
	/**=============override the Method=============*/
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		String result = "Response Status is : "+status+
				"\nThe Error code is : "+errorCode+
				"\nRequest Date is : "+date+
				"\nCity's name is : "+currentCity+
				"\nPM2.5 : "+PM2point5+"\n";
		if (index != null) {
			for (int i = 0; i < index.size(); i++) {
				Map<String, String> map = index.get(i);
				String title = map.get("title");
				String zs = map.get("zs");
				String tipt = map.get("tipt");
				String des = map.get("des");
				result+= 
						title +" : "+zs+"\n"+
						tipt+" : "+des+"\n"; 
			}
		}
		
		if(weather_data != null){
			for (int i = 0; i < weather_data.size(); i++) {
				Map<String, String> map = weather_data.get(i);
				String date = map.get("date");
				String weather = map.get("weather");
				String wind = map.get("wind");
				String temp = map.get("temperature");
				result+= 
						"Date : "+date+
						"\nWeather forecast : "+weather+
						"\nWind : "+wind+
						"\nTemperature : "+temp+"\n";
			}
		}
		return result;
	}
}

接着写处理的方法:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import entity.CityBean;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * This class is parser the json string
 * @author VictorFeng
 *
 */
 public class JsonParse {
	
	
	public static CityBean parseJson(String jsonString){
		CityBean bean = new CityBean();
		JSONObject obj = JSONObject.fromObject(jsonString);
		
		
		//set the error code
		bean.setErrorCode(obj.getInt("error"));
		
		//set the status
		bean.setStatus(obj.getString("status"));
		
		//set the date
		bean.setData(obj.getString("date"));
		if (obj.getInt("error")==0) {
			JSONArray results = obj.getJSONArray("results");
			JSONObject obj2 = results.getJSONObject(0);

			//set the current city name
			bean.setCurrentCity(obj2.getString("currentCity"));
			
			//set the PM 2.5 
			bean.setPM2point5(obj2.getString("pm25"));
			
			//set the suggestion list
			bean.setIndex(getIndexs(obj2.getJSONArray("index")));
			
			//set the weather data list
			bean.setWeather_data(getWeathers(obj2.getJSONArray("weather_data")));
		}
		return bean;
	}
	
	/**
	 * parser the suggest lists
	 * @param array
	 * @return
	 */
	private static List<Map<String, String>> getIndexs(JSONArray array){
		List<Map<String, String>> lists = new ArrayList<Map<String,String>>();
		Map<String, String> map;
		for (int i = 0; i < array.size(); i++) {
			JSONObject obj = array.getJSONObject(i);
			map  = new HashMap<String, String>();
			map.put("title", obj.getString("title"));
			map.put("zs", obj.getString("zs"));
			map.put("tipt", obj.getString("tipt"));
			map.put("des", obj.getString("des"));
			lists.add(map);
		}
		return lists;
	}
	
	/**
	 * Parser the weather data
	 * @param array
	 * @return
	 */
	private static List<Map<String, String>> getWeathers(JSONArray array){
		List<Map<String, String>> lists = new ArrayList<Map<String,String>>();
		Map<String, String> map;
		for (int i = 0; i < array.size(); i++) {
			JSONObject obj = array.getJSONObject(i);
			map  = new HashMap<String, String>();
			map.put("date", obj.getString("date"));
			map.put("dayPictureUrl", obj.getString("dayPictureUrl"));
			map.put("nightPictureUrl", obj.getString("nightPictureUrl"));
			map.put("weather", obj.getString("weather"));
			map.put("wind", obj.getString("wind"));
			map.put("temperature", obj.getString("temperature"));
			lists.add(map);
		}
		return lists;
	}
}

这样就完成了。最后当然是测试了。

新建一个据 junit 的测试类

然后如下所示的方式测试:

//"广州"可以换成你想要查询的城市的名字,注意我只测试了国内的,如果需要国外的话请自行百度
//"广州"可以换成经纬度的坐标系
String urldress = "http://api.map.baidu.com/telematics/v3/weather?location=广州&output=json&ak="百度的key";

		String res = "";
		try {
			URL url = new URL(urldress);
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			while(bufferedReader.read()!=-1){
				res = bufferedReader.readLine();
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		res = "{"+res+"}";
		CityBean bean = JsonParse.parseJson(res);
		System.out.println(bean);


© 著作权归作者所有

Seederland
粉丝 0
博文 2
码字总数 1814
作品 0
深圳
程序员
私信 提问
加载中

评论(0)

基于HTML5 geolocation 实现的天气预报功能

最近一直在学习HTML5,因为要开发手机项目所以先把HTML5学习下。 基本思路: 1. 用户未设置任何城市之前,根据HTML5 geolocation 获取用户所在的地理位置。 2. 根据用户设置的城市切换到所在...

随风随影
2013/08/20
2.5K
1
基于python的终端天气查询

一、 天气接口 网上搜了一个,最开始准备使用中国天气网的数据接口,但是需要注册,也行,注册就注册吧。 注册好了,又提示信息不完整,好吧,填写姓名、身份证... 最后,还要上传身份证信息...

yzbty23
2015/12/25
155
0
Java调用天气接口(百度天气)解析返回的JSON数据

简介:本文详细讲述了通过Java调用百度天气接口的方法,取得返回的JSON格式的数据,并且通过第三方包解析JSON格式的数据。 通过百度天气API调用网络编程接口接收返回的JSON格式的数据。 关于...

daydayupzzc
2014/08/27
0
0
分享定位和天气接口

正在做一个小项目,用到定位和天气功能,但又不想太麻烦,而且只是个辅助功能而已,就不想话太多时间在上面,但又找不到好的方法,网上都是说什么去注册然后获取key之类的,因为练手项目,不...

请叫我Mr-He
2016/12/08
60
0
微信公众平台整合百度天气API

由于自己闲着的时候写了一个微信公众平台的小应用 也参考了很多别人的源码 再此感谢那些被我参考过的大神们 本着开源的精神 http://git.oschina.net/bddiudiu/wechatSpring 我的项目也开源了...

阿丢丢
2014/05/09
1.4K
3

没有更多内容

加载失败,请刷新页面

加载更多

windows虚拟主机控制面板哪个比较好用?

相对于Linux发行版本的系统,大多人都比较习惯使用windows系统,同时windows虚拟主机对于 ASP.NET,PHP等热门程序也有了广泛的友好支持。因此,很多新手站长比较倾向于使用windows虚拟主机,...

好么好的_920
29分钟前
14
0
如何使用Elasticsearch中提供的RESTFul风格API? 快来快来,加入小案例需求 不要错过哦~~

前言: 本篇会以小案例需求的方式带你学习Elasticsearch中基于RESTFulApi操作。手敲几遍,想不会也难。加油~ 对了,这里使用的是Kibana和head进行的管理,如果没有接触,推荐看下面的博客,写的挺...

漫路h
48分钟前
23
0
Centos8 安装MySQL

MySQL 是最流行的开源关系数据库管理系统。在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 默认的CentOS 8存储库安装最新...

忧郁的熊
今天
23
0
Word文档中遇到不认识的字怎么办?word 2019 for Mac自带拼音功能你知道吗?

Word 2019 for Mac中遇到不认识的字怎么办?你是不是要告诉我,找百度!那如果没有网又该怎么办? 经常接触文档,总会遇到很多不认识的字,不用百度只用Word也能快速读对,一起来学学吧! wo...

mac小叮当
今天
24
0
docker下mysql8版本的安装运行及navicat的连接

一、下载 $ docker pull mysql:8.0.19 一般来说这个速度是比较慢的,我试了几次都不行,只好换一个国内的镜像: $ mkdier -p /etc/docker$ tee /etc/docker/daemon.json << 'EOF'{ 'r......

最深的夜
今天
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部