weather.jsp
上传用户:shjgzm
上传日期:2017-08-31
资源大小:2757k
文件大小:4k
源码类别:

Ajax

开发平台:

Java

  1. <%@ page contentType="text/plain; charset=UTF-8"%>
  2. <%@ page language="java"%>
  3. <%@ page import="java.util.*,java.io.*,org.dom4j.*,org.dom4j.io.*"%>
  4. <%!
  5.     //根据风向角度转换为风向信息
  6.     String getDirection(String degreeStr) {
  7.         int degree = Integer.parseInt(degreeStr);
  8.         String direction = null;
  9.         if(degree > 337 && degree <= 360) {
  10.             direction = "北风";
  11.         } else if(degree >= 0 && degree <= 22) {
  12.             direction = "北风";
  13.         } else if(degree > 22 && degree <= 67) {
  14.             direction = "东北风";
  15.         } else if(degree > 67 && degree <= 112) {
  16.             direction = "东风";
  17.         } else if(degree > 112 && degree <= 157) {
  18.             direction = "东南风";
  19.         } else if(degree > 157 && degree <= 202) {
  20.             direction = "南风";
  21.         } else if(degree > 202 && degree <= 247) {
  22.             direction = "西南风";
  23.         } else if(degree > 247 && degree <= 292) {
  24.             direction = "西风";
  25.         } else if(degree > 292 && degree <= 337) {
  26.             direction = "西北风";
  27.         }
  28.         return direction;
  29.     }
  30. %>
  31. <%
  32.     out.clear();                                        //清空当前的输出内容(空格和换行符)
  33.     String cityCode = request.getParameter("cityCode"); //获取城市代码
  34.     SAXReader reader = new SAXReader();                 //创建一个SAXReader
  35.     //使用Reader解析远程服务器RSS信息
  36.     Document doc = reader.read("http://xml.weather.yahoo.com/forecastrss?p="+cityCode+"&u=c");
  37.     //将需要进一步处理的信息转换为Node对象
  38.     Node lastBuildDateNode = doc.selectSingleNode("//rss/channel/lastBuildDate");
  39.     Node windNode = doc.selectSingleNode("//rss/channel/yweather:wind");
  40.     Node atmosphereNode = doc.selectSingleNode("//rss/channel/yweather:atmosphere");
  41.     Node astronomyNode = doc.selectSingleNode("//rss/channel/yweather:astronomy");
  42.     Node conditionNode = doc.selectSingleNode("//rss/channel/item/yweather:condition");
  43.     Node forecastNode = doc.selectSingleNode("//rss/channel/item/yweather:forecast");
  44.     //获取需要的信息
  45.     String lastBuildDate = lastBuildDateNode.getText();                 //最后更新日期
  46.     String chill = "N/A";
  47.     String direction = "N/A";
  48.     String speed = "N/A";
  49.     if (windNode != null) {
  50.         chill = windNode.valueOf("@chill") + "℃";                      //感觉气温
  51.         direction = getDirection(windNode.valueOf("@direction"));       //风向
  52.         speed = windNode.valueOf("@speed") + "Kph";                     //风速
  53.     }
  54.     String humidity = "N/A";
  55.     String visibility = "N/A";
  56.     if (atmosphereNode != null) {
  57.         humidity = atmosphereNode.valueOf("@humidity") + "%";           //湿度
  58.         visibility = Double.parseDouble(atmosphereNode.valueOf("@visibility"))/100 + "km";//能见度
  59.     }
  60.     String sunrise = astronomyNode.valueOf("@sunrise");                 //日出时间
  61.     String sunset = astronomyNode.valueOf("@sunset");                   //日落时间
  62.     String condition = "N/A";
  63.     String temp = "N/A";
  64.     if (conditionNode != null) {
  65.         condition = conditionNode.valueOf("@text");                     //天气状况
  66.         temp = conditionNode.valueOf("@temp") + "℃";                   //实际气温
  67.     }
  68.     String low = forecastNode.valueOf("@low") + "℃";                   //最低气温
  69.     String high = forecastNode.valueOf("@high") + "℃";                 //最高气温
  70.     //将信息拼接为JSON格式
  71.     StringBuffer result = new StringBuffer("{");
  72.     result.append("'lastBuildDate':'" + lastBuildDate + "',");
  73.     result.append("'chill':'" + chill + "',");
  74.     result.append("'direction':'" + direction + "',");
  75.     result.append("'speed':'" + speed + "',");
  76.     result.append("'humidity':'" + humidity + "',");
  77.     result.append("'visibility':'" + visibility + "',");
  78.     result.append("'sunrise':'" + sunrise + "',");
  79.     result.append("'sunset':'" + sunset + "',");
  80.     result.append("'condition':'" + condition + "',");
  81.     result.append("'temp':'" + temp + "',");
  82.     result.append("'low':'" + low + "',");
  83.     result.append("'high':'" + high + "'");
  84.     result.append("}");
  85.     out.print(result.toString());     //输出天气信息
  86. %>