使用百度接口获取天气

        此前,我一直在找一个可以使用 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);


你可能感兴趣的:(百度地图)