今天再写一个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方法测试一下效果,这里就不再写出了,相对简单,希望能帮助到你。