JAVA调用新浪天气预报代码(返回xml格式)

今天再写一个JAVA调用新浪天气预报的代码,这个返回的是xml格式的,所以这里要用到xml解析,这里采用的是dom4解析,所以这里要导入dom4j的jar包,另外需要建立远程连接还需要导入httpclient这个jar包,具体不多说了,直接上代码。

 

注:由于新浪用的是gbk的编码 所以我们要转码。

1.第一方法是获取新浪天气的代码:

public static String getWeather(String cityname){
		String city=URLEncoder.encode(cityname);
		String url="http://php.weather.sina.com.cn/xml.php?city="+city+"&password=DJOYnieT8234jlsK&day=0";
		String returnStr = "";
		HttpClient client = new HttpClient();
		PostMethod getMethod = new PostMethod(url);
		try {
			client.executeMethod(getMethod);
			returnStr = new String(getMethod.getResponseBodyAsString()
					.getBytes("iso-8859-1"), "UTF-8");// 链接返回来的信息
		} catch (HttpException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return returnStr;


2.这个是根据获取回来的信息进行dom解析的代码:

public static String weather(String cityname){
		String ss=getWeather(cityname);
		StringBuffer buff = new StringBuffer();
		Document doc = null;
		try {
			doc = DocumentHelper.parseText(ss); // 将字符串转为XML
			Element rootElt = doc.getRootElement(); // 获取根节点
			System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
			Iterator iter = rootElt.elementIterator("Weather"); // 获取根节点下的子节点Weather
			// 遍历head节点
			while (iter.hasNext()) {
				Element recordEle = (Element) iter.next();
				String city = recordEle.elementTextTrim("city"); // 拿到Weather节点下的子节点title值
				buff.append("您好,我是小V,以下是今天的天气情况!").append("\n\n");
				String date=recordEle.elementTextTrim("savedate_weather");
				buff.append("当前日期:").append(date).append("\n");
				buff.append("城市:" + city).append("\n");
				String status1 = recordEle.elementTextTrim("status1");
				String status2 = recordEle.elementTextTrim("status2");
				buff.append("天气情况:" + status1 + "转" + status2).append("\n");
				String temperature1 = recordEle.elementTextTrim("temperature1");
				String temperature2 = recordEle.elementTextTrim("temperature2");
				buff.append("温度:" + temperature1 + "~~" + temperature2 + "摄氏度")
						.append("\n");
				String chy_shuoming = recordEle.elementTextTrim("chy_shuoming");
				buff.append("建议穿衣:" + chy_shuoming).append("\n");
				String gm_s = recordEle.elementTextTrim("gm_s");
				buff.append("需要注意:" + gm_s).append("\n");
				buff.append("很高兴为您服务").append("\n");
				buff.append("回复 ? 显示需要的帮助。").append("\n\n");
				;
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return buff.toString();


3.另外你可以自行写个main方法测试一下效果,这里就不再写出了,相对简单,希望能帮助到你。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值