【第29篇】通过HttpClient+Gson解析中国天气网的天气预报信息


http://jilongliang.iteye.com/blog/1932110

package com.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;

import com.entity.Weatherinfo;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

/**
 *@Author:liangjilong
 *@Date:2013-8-28
 *@CopyRight:liangjilong
 *@Email:[email protected]
 *@Description:
 *http://cj.weather.com.cn/
 *解析中国天气网的天气预报信息
 */
@SuppressWarnings("all")
public class TestWeather {
	/**
	 * 读配置文件
	 * @param fileName
	 * @return key-value
	 * @throws Exception
	 */
	public static Map read(String fileName) throws Exception{
		Map map=new HashMap();
		BufferedReader reader=null;
		FileReader fr=null;
		//String root=TestWeather.class.getClassLoader().getResource(".").toURI().getPath();
		//fileName=root+fileName;
		File file=null;
		file=new File(fileName);
		fr=new FileReader(file);
		reader=new BufferedReader(fr);
		String text=reader.readLine();
		while(text!=null){
			String value[]=text.split(":");//:分开
			if(value.length>0){
				String key=value[0];// 
				map.put(key, value[1]);
			}
			 text=reader.readLine();
		}
		return map;
	}
	/**
	 * 根据城市去获取天气信息
	 * @param city
	 * @param fileName
	 * @return
	 * @throws Exception
	 */
	public  static Weatherinfo getWeather(String city,String fileName){
		Weatherinfo weatherinfo=null; GetMethod method=null;
		try {
			Map map=read(fileName);
			List list=new ArrayList(map.keySet());
			for (Iterator iterator = list.iterator(); iterator.hasNext();) {
				String key = (String) iterator.next();//城市
				String value=map.get(key).toString();//编码
				if(city.equals(key)){
					 String url="http://m.weather.com.cn/data/"+value+".html";
					 HttpClient httpClient=new HttpClient();
					 method=new GetMethod(url);
					 int status=httpClient.executeMethod(method);
					 if(status==HttpStatus.SC_OK){
						 String json=method.getResponseBodyAsString();
						 int start=json.indexOf("weatherinfo")+13;
						 String newJson=json.substring(start,json.lastIndexOf("}"));
						 weatherinfo= new Gson().fromJson(newJson, Weatherinfo.class);
					 }else{
						 System.err.println("网络异常!");
					 }
				}
			}
		} catch (JsonSyntaxException e) {
			e.printStackTrace();
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(method!=null)
			 method=null;
			 method.releaseConnection();
		}
		return weatherinfo;
	} 
	
	
	public static void main(String[] args) throws Exception{
		String city="广州";
		String fileName="src/city.txt";
		Weatherinfo weatherinfo=getWeather(city,fileName);
		String City= weatherinfo.getCity();
		String Date_y=weatherinfo.getDate_y();
		String Week=weatherinfo.getWeek();
		String temp1=weatherinfo.getTemp1();
		String weather1=weatherinfo.getWeather1();
		String weather2=weatherinfo.getWeather2();
		String weather3=weatherinfo.getWeather3();
		String weather4=weatherinfo.getWeather4();
		String weather5=weatherinfo.getWeather5();
		String weather6=weatherinfo.getWeather6();
		String index=weatherinfo.getIndex();
		String index_d=weatherinfo.getIndex_d();
		weatherinfo.getIndex48();
		weatherinfo.getIndex48_d();
		System.out.println("今天是"+Week+",天气情况如下:"+weather1+weather2+weather3+weather4+weather5+weather6+","+index_d);
	}
}

Weatherinfo.java类可以根据打开的Api去封装或者根据上面的main方法的可以去封装,由于这篇文章是写了好久的了


 city.txt
城市代码CityCode
北京:101010100
海淀:101010200
朝阳:101010300
顺义:101010400
怀柔:101010500
通州:101010600
昌平:101010700
延庆:101010800
丰台:101010900
石景山:101011000
大兴:101011100
房山:101011200
密云:101011300
门头沟:101011400
平谷:101011500
八达岭:101011600
佛爷顶:101011700
汤河口:101011800
密云上甸子:101011900
斋堂:101012000
霞云岭:101012100
北京城区:101012200
天津:101030100
宝坻:101030300
东丽:101030400
西青:101030500
北辰:101030600
蓟县:101031400
汉沽:101030800
静海:101030900
津南:101031000
塘沽:101031100
大港:101031200
武清:101030200
宁河:101030700
上海:101020100
宝山:101020300
嘉定:101020500
南汇:101020600
浦东:101021300
青浦:101020800
松江:101020900
奉贤:101021000
崇明:101021100
徐家汇:101021200
闵行:101020200
金山:101020700
石家庄:101090101
张家口:101090301
承德:101090402
唐山:101090501
秦皇岛:101091101
沧州:101090701
衡水:101090801
邢台:101090901
邯郸:101091001
保定:101090201
廊坊:101090601
郑州:101180101
新乡:101180301
许昌:101180401
平顶山:101180501
信阳:101180601
南阳:101180701
开封:101180801
洛阳:101180901
商丘:101181001
焦作:101181101
鹤壁:101181201
濮阳:101181301
周口:101181401
漯河:101181501
驻马店:101181601
三门峡:101181701
济源:101181801
安阳:101180201
合肥:101220101
芜湖:101220301
淮南:101220401
马鞍山:101220501
安庆:101220601
宿州:101220701
阜阳:101220801
亳州:101220901
黄山:101221001
滁州:101221101
淮北:101221201
铜陵:101221301
宣城:101221401
六安:101221501
巢湖:101221601
池州:101221701
蚌埠:101220201
杭州:101210101
舟山:101211101
湖州:101210201
嘉兴:101210301
金华:101210901
绍兴:101210501
台州:101210601
温州:101210701
丽水:101210801
衢州:101211001
宁波:101210401
重庆:101040100
合川:101040300
南川:101040400
江津:101040500
万盛:101040600
渝北:101040700
北碚:101040800
巴南:101040900
长寿:101041000
黔江:101041100
万州天城:101041200
万州龙宝:101041300
涪陵:101041400
开县:101041500
城口:101041600
云阳:101041700
巫溪:101041800
奉节:101041900
巫山:101042000
潼南:101042100
垫江:101042200
梁平:101042300
忠县:101042400
石柱:101042500
大足:101042600
荣昌:101042700
铜梁:101042800
璧山:101042900
丰都:101043000
武隆:101043100
彭水:101043200
綦江:101043300
酉阳:101043400
秀山:101043600
沙坪坝:101043700
永川:101040200
福州:101230101
泉州:101230501
漳州:101230601
龙岩:101230701
晋江:101230509
南平:101230901
厦门:101230201
宁德:101230301
莆田:101230401
三明:101230801
兰州:101160101
平凉:101160301
庆阳:101160401
武威:101160501
金昌:101160601
嘉峪关:101161401
酒泉:101160801
天水:101160901
武都:101161001
临夏:101161101
合作:101161201
白银:101161301
定西:101160201
张掖:101160701
广州:101280101
惠州:101280301
梅州:101280401
汕头:101280501
深圳:101280601
珠海:101280701
佛山:101280800
肇庆:101280901
湛江:101281001
江门:101281101
河源:101281201
清远:101281301
云浮:101281401
潮州:101281501
东莞:101281601
中山:101281701
阳江:101281801
揭阳:101281901
茂名:101282001
汕尾:101282101
韶关:101280201
南宁:101300101
柳州:101300301
来宾:101300401
桂林:101300501
梧州:101300601
防城港:101301401
贵港:101300801
玉林:101300901
百色:101301001
钦州:101301101
河池:101301201
北海:101301301
崇左:101300201
贺州:101300701
贵阳:101260101
安顺:101260301
都匀:101260401
兴义:101260906
铜仁:101260601
毕节:101260701
六盘水:101260801
遵义:101260201
凯里:101260501
昆明:101290101
红河:101290301
文山:101290601
玉溪:101290701
楚雄:101290801
普洱:101290901
昭通:101291001
临沧:101291101
怒江:101291201
香格里拉:101291301
丽江:101291401
德宏:101291501
景洪:101291601
大理:101290201
曲靖:101290401
保山:101290501
呼和浩特:101080101
乌海:101080301
集宁:101080401
通辽:101080501
阿拉善左旗:101081201
鄂尔多斯:101080701
临河:101080801
锡林浩特:101080901
呼伦贝尔:101081000
乌兰浩特:101081101
包头:101080201
赤峰:101080601
南昌:101240101
上饶:101240301
抚州:101240401
宜春:101240501
鹰潭:101241101
赣州:101240701
景德镇:101240801
萍乡:101240901
新余:101241001
九江:101240201
吉安:101240601
武汉:101200101
黄冈:101200501
荆州:101200801
宜昌:101200901
恩施:101201001
十堰:101201101
神农架:101201201
随州:101201301
荆门:101201401
天门:101201501
仙桃:101201601
潜江:101201701
襄樊:101200201
鄂州:101200301
孝感:101200401
黄石:101200601
咸宁:101200701
成都:101270101
自贡:101270301
绵阳:101270401
南充:101270501
达州:101270601
遂宁:101270701
广安:101270801
巴中:101270901
泸州:101271001
宜宾:101271101
内江:101271201
资阳:101271301
乐山:101271401
眉山:101271501
凉山:101271601
雅安:101271701
甘孜:101271801
阿坝:101271901
德阳:101272001
广元:101272101
攀枝花:101270201
银川:101170101
中卫:101170501
固原:101170401
石嘴山:101170201
吴忠:101170301
西宁:101150101
黄南:101150301
海北:101150801
果洛:101150501
玉树:101150601
海西:101150701
海东:101150201
海南:101150401
济南:101120101
潍坊:101120601
临沂:101120901
菏泽:101121001
滨州:101121101
东营:101121201
威海:101121301
枣庄:101121401
日照:101121501
莱芜:101121601
聊城:101121701
青岛:101120201
淄博:101120301
德州:101120401
烟台:101120501
济宁:101120701
泰安:101120801
西安:101110101
延安:101110300
榆林:101110401
铜川:101111001
商洛:101110601
安康:101110701
汉中:101110801
宝鸡:101110901
咸阳:101110200
渭南:101110501
太原:101100101
临汾:101100701
运城:101100801
朔州:101100901
忻州:101101001
长治:101100501
大同:101100201
阳泉:101100301
晋中:101100401
晋城:101100601
吕梁:101101100
乌鲁木齐:101130101
石河子:101130301
昌吉:101130401
吐鲁番:101130501
库尔勒:101130601
阿拉尔:101130701
阿克苏:101130801
喀什:101130901
伊宁:101131001
塔城:101131101
哈密:101131201
和田:101131301
阿勒泰:101131401
阿图什:101131501
博乐:101131601
克拉玛依:101130201
拉萨:101140101
山南:101140301
阿里:101140701
昌都:101140501
那曲:101140601
日喀则:101140201
林芝:101140401
台北县:101340101
高雄:101340201
台中:101340401
海口:101310101
三亚:101310201
东方:101310202
临高:101310203
澄迈:101310204
儋州:101310205
昌江:101310206
白沙:101310207
琼中:101310208
定安:101310209
屯昌:101310210
琼海:101310211
文昌:101310212
保亭:101310214
万宁:101310215
陵水:101310216
西沙:101310217
南沙岛:101310220
乐东:101310221
五指山:101310222
琼山:101310102
长沙:101250101
株洲:101250301
衡阳:101250401
郴州:101250501
常德:101250601
益阳:101250700
娄底:101250801
邵阳:101250901
岳阳:101251001
张家界:101251101
怀化:101251201
黔阳:101251301
永州:101251401
吉首:101251501
湘潭:101250201
南京:101190101
镇江:101190301
苏州:101190401
南通:101190501
扬州:101190601
宿迁:101191301
徐州:101190801
淮安:101190901
连云港:101191001
常州:101191101
泰州:101191201
无锡:101190201
盐城:101190701
哈尔滨:101050101
牡丹江:101050301
佳木斯:101050401
绥化:101050501
黑河:101050601
双鸭山:101051301
伊春:101050801
大庆:101050901
七台河:101051002
鸡西:101051101
鹤岗:101051201
齐齐哈尔:101050201
大兴安岭:101050701
长春:101060101
延吉:101060301
四平:101060401
白山:101060901
白城:101060601
辽源:101060701
松原:101060801
吉林:101060201
通化:101060501
沈阳:101070101
鞍山:101070301
抚顺:101070401
本溪:101070501
丹东:101070601
葫芦岛:101071401
营口:101070801
阜新:101070901
辽阳:101071001
铁岭:101071101
朝阳:101071201
盘锦:101071301
大连:101070201
锦州:101070701 



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。