天气预报进展

昨天下午和今天早上重新对程序进行了一下修改,增加了如下功能:

一、首次运行时会先暂停五秒,然后每24小时运行一次

二、每次运行程序的时候会先清空一次数据库,然后再执行抓取、解析、插入的工作

三、增加了程序30%的注释

四、部分类和主函数之间面向对象的实现得到了改善

五、发布了JSP的WEB页面,WEB页面有两个:Index和detail。Index主要显示数据库city_info中的数据项信息,detail主要通过页面传参的形式通过city_info及weather_info两张表的联合查询,显示出Index页面鼠标点击城市的对应天气信息。每个城市都有自己的id值,这个id值就是对外发布出去的HTTP接口,页面运行结果如以下几个页面的地址所示:

 http://localhost:8080/WeatherWeb/ShowDetail.jsp?id=101050301

{"weatherinfo":{"city":"牡丹江","date":2011年12月1日","year":辛卯年","week":星期四","description":天气寒冷,建议着厚羽绒服、毛皮大衣加厚毛衣等隆冬服装。年老体弱者尤其要注意保暖防冻。","temp1":"-7℃~-18℃","winddricetion1":"西风3-4级转微风","windpower1":"3-4级转小于3级 ","temp2":"-6℃~-15℃","winddricetion2":"西北风3-4级转微风","windpower2":"3-4级转小于3级
","temp3":"-6℃~-15℃","winddricetion3":"西南风3-4级转微风","windpower3":"3-4级转小于3级 ","temp4":"-6℃~-16℃","winddricetion4":"西南风3-4级转微风","windpower4":"3-4级转小于3级 ","temp5":"-6℃~-17℃","winddricetion5":"西南风3-4级转微风","windpower5":"3-4级转小于3级"}}

http://localhost:8080/WeatherWeb/ShowDetail.jsp?id=101060301

{"weatherinfo":{"city":"延吉","date":2011年12月1日","year":辛卯年","week":星期四","description":天气寒冷,建议着厚羽绒服、毛皮大衣加厚毛衣等隆冬服装。年老体弱者尤其要注意保暖防冻。","temp1":"-6℃~-17℃","winddricetion1":"西风转东风小于3级","windpower1":"小于3级 ","temp2":"-4℃~-12℃","winddricetion2":"东风转西风小于3级","windpower2":"小于3级
","temp3":"-4℃~-12℃","winddricetion3":"西风3-4级转小于3级","windpower3":"3-4级转小于3级 ","temp4":"-2℃~-13℃","winddricetion4":"西风小于3级","windpower4":"小于3级 ","temp5":"-3℃~-11℃","winddricetion5":"西风小于3级","windpower5":"小于3级"}}

http://localhost:8080/WeatherWeb/ShowDetail.jsp?id=101081000

{"weatherinfo":{"city":"呼伦贝尔","date":2011年12月1日","year":辛卯年","week":星期四","description":天气寒冷,建议着厚羽绒服、毛皮大衣加厚毛衣等隆冬服装。年老体弱者尤其要注意保暖防冻。","temp1":"-17℃~-26℃","winddricetion1":"微风","windpower1":"小于3级 ","temp2":"-11℃~-20℃","winddricetion2":"微风","windpower2":"小于3级
","temp3":"-12℃~-25℃","winddricetion3":"微风","windpower3":"小于3级 ","temp4":"-7℃~-29℃","winddricetion4":"微风","windpower4":"小于3级 ","temp5":"-9℃~-28℃","winddricetion5":"微风","windpower5":"小于3级"}}

六、将数据库中解析出的字段通过拼字符串的方法重新转化为JSON格式对外提供接口

 

 

需要改善增加的地方有:

一、程序面向对象的体现不是很好

二、增加历史表,每天自动运行程序时不是使用truncate清空表,而是将历史记录转移至历史表中

三、定时器,改造为每天,比如零点或者六点自动运行

四、放弃JSP,改用SERVLET的方法重新制作WEB端,需要学习WEB开发!

 

最近的事情也要做个规划:

一、今天周四了,打算利用这周四、五、六、日的业余时间学习制作一下马士兵的BBS项目,然后自己动手改造做一个自己的项目。旨在熟悉WEB开发,前台后台管理员、登陆等等。毕竟以前从未做过WEB开发。

二、 下周利用时间学习制作下马士兵的网上商城项目,然后自己动手也跟着学习制作一个自己的网上商城。

三、SERVLET还是前提啊。。。。需要抓紧学习。

增加的部分代码如下:

主函数定时器实现:

public class TestWeather {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Timer tt=new Timer();//设置定时器
		TimerTaskMine tk=new TimerTaskMine();

		 tt.schedule(tk, 1000*5, 1000*3600*24);//程序不关,每次执行先暂停五秒,以后每隔24小时运行一次

	}

}

class TimerTaskMine extends TimerTask{
	private static GetInfo get;//调用静态方法从GetInfo类中获取网页信息
	@Override
	public void run() {

		//private static ReadJson read;//调用静态方法从ReadJson类中读取文件信息
		//private static InputStream inputStream;

		/* 主函数 */
	//int i = 0;

		//Properties可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串
		Properties prop = new Properties();
		InputStream inputStream = new TestWeather().getClass().getResourceAsStream("/weather_code.properties");

		try {
			prop.load(inputStream);//从输入流中读取属性列表
			// System.out.println(prop.getProperty("101020100"));
			Enumeration<?> en = prop.propertyNames();//返回属性列表中所有键的枚举
			String obj = "";
			// get=new GetInfo();
			// get.getInfo("101020100");

	        TruncateMysql.truncateMysql();//清空数据库数据表内容
            System.out.println("truncate over!");

			while (en.hasMoreElements()) {//测试此枚举是否包含更多的元素。

				obj = (String) en.nextElement();//obj即为weather_code.properties中获得的城市代码
				// System.out.println(obj);

				// get.getInfo(Integer.parseInt(obj));
				get = new GetInfo();
				// System.out.println(obj.);
				get.getInfo(obj);
				// 抓取网页
				// get=new GetInfo();
				// get.getInfo(obj);
				// get=new GetInfo();
				// get.getInfo(Integer.parseInt(obj));

			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭IO资源
			try {
				if (null != inputStream)
				{
					inputStream.close();
					inputStream = null;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		System.out.println("helloworld");
	}

}

清空表的实现:

public class TruncateMysql {

	public static void truncateMysql() {

		//将连接和预编译的 SQL语句的对象初始化为0
		Statement stmt=null;
    	Connection conn=null;

    	try {

    		Class.forName("com.mysql.jdbc.Driver");//Load the Driver

    		conn=DriverManager.getConnection("jdbc:mysql://10.1.101.223:3306/weather", "appuser", "opzoon123!");//Connect to the DataBase

    		stmt=conn.createStatement();

    	    String sql="truncate table weather_info";
    	    stmt.executeUpdate(sql);//Execute the SQL

    	}catch (ClassNotFoundException e) {
    		e.printStackTrace();
    	}catch (SQLException e) {
    		e.printStackTrace();
    	}finally {//close
    		try {//按照顺序先关闭stmt再关闭conn
    			if(stmt!=null) {
    				stmt.close();
    				stmt=null;
    			}
    		}catch (SQLException e) {
    			e.printStackTrace();
    		}

    		try {
    			if(conn!=null) {
    				conn.close();
    				conn=null;
    			}
    		}catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    }

 

JSP主页面实现:

<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>
<%@ page import="java.sql.*" %>

<%
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://10.1.101.223:3306/weather", "appuser", "opzoon123!");

Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from city_info");

%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>天气预报发布页主页</title>
</head>
<body>

<table border="1">
<%
while(rs.next()) {
%>
    <tr>
        <td><%= rs.getInt("id") %></td>
        <td><%= rs.getInt("city_id") %></td>
        <td><a href="ShowDetail.jsp?id=<%= rs.getInt("city_id") %>"><%= rs.getString("city_name") %></a></td>
<%--    <td><%= rs.getString("weather_date") %></td>
        <td><%= rs.getString("weather_year") %></td>
        <td><%= rs.getString("weather_week") %></td>
        <td><%= rs.getString("weather_temp") %></td>
        <td><%= rs.getString("weather_winddriection") %></td>
        <td><%= rs.getString("weather_windpower") %></td>
        <td><%= rs.getString("weather_desprition") %></td> --%>
    </tr>
<%
}
%>
</table>
</body>

<%
rs.close();
stmt.close();
conn.close();
%>
</html>

JSP detail页面的实现

将内容转化为JSON格式

<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>
<%@ page import="java.sql.*" %>
<%
String city_id=request.getParameter("id");
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://10.1.101.223:3306/weather", "appuser", "opzoon123!");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select city_name,weather_date,weather_year,weather_week,weather_temp,weather_winddirection,weather_windpower,weather_description from city_info,weather_info where city_info.city_id=weather_info.city_id and city_info.city_id='"+city_id+"'");
%>
<%
boolean flag = true;
int i=0;
int j=0;
int k=0;
int m=0;
while(rs.next()) {
      %>
      <%if(flag){ %>{"weatherinfo":{"city":"<%= rs.getString("city_name") %>","date":<%= rs.getString("weather_date") %>","year":<%= rs.getString("weather_year") %>","week":<%= rs.getString("weather_week") %>","description":<%= rs.getString("weather_description") %><%
      flag = false;
      } %>","temp<%++i;out.print(i);%>":"<%= rs.getString("weather_temp")%>","winddricetion<%++j;out.print(j);%>":"<%= rs.getString("weather_winddirection")%>","windpower<%++k;out.print(k);%>":"<%= rs.getString("weather_windpower")%><%}%>"}}
<%
rs.close();
stmt.close();
conn.close();
%>

 

时间: 2024-10-03 19:09:35

天气预报进展的相关文章

超靠谱的Win8天气预报

突然间想查天气预报怎么办?如果你使用的是Win8的话,点击一下"Win开始键"就行.在Win8的开始菜单那里就可以直接看到当前的天气.如果想查看明天或后天的天气预报的话,只需再点击一下Win8这款名为"天气"的应用即可. 在Win8开始菜单那里会自动显示当前天气情况. 在Win8开始菜单那里会自动显示当前天气情况 打开Win8天气之后,会看到一个默认城市3天内的天气预报. Win8天气首页 当然,你可以查看其他城市的天气预.在天气应用中点击鼠标右键,然后选择&quo

CCAI 2017 日本理化学研究所先进智能研究中心主任杉山将:弱监督机器学习的研究进展

在本次大会上,日本人工智能和机器学习领域新一代的代表性人物--日本理化学研究所先进智能研究中心主任Masashi Sugiyama(中文名:杉山将)为参会者带来了<弱监督机器学习的研究进展>的演讲.杉山将在机器学习领域发表过很多重要的理论,是这个领域最知名的学者之一,出版了机器学习相关书籍<图说机器学习>(中文版). 以下内容根据杉山将本次主题演讲整理,略有删减: 大家早上好,我叫杉山将,非常高兴能够参加今天的大会,也很高兴和这么多中国的研究人员见面,我也特别喜欢杭州的文化和当地的

天气预报,12月2日,周五,大改动,争取一天完事!

昨天把马士兵的BBS跟着学了一下,大致做了6,7个JSP页面,估计要是能好好拿出一天来,跟着学就完事了,然后自己重新设计一个自己的BBS 系统.还是说天气预报吧,今天给自己定了如下任务: 1.数据库重新设计 2.抓取不动 3.解析重新解析 4.插入数据库重新设计 5.WEB端重新设计 6.WEB端增加图片显示 7.JSON输出优化,以数组形式输出数据     加油!争取一天完事!     现在是12月2日中午12时35分,上午开了个会,然后认真写代码截止到现在,已经完成以上步骤的1234步骤,同

用ASP+XMLHTTP编写天气预报程序

asp+|xml|程序|天气预报 本人就职于一个本地门户网站,每天网站上的天气都得更新.久而久之感到相当麻烦,于是写了一个定时的新闻小偷,帖出来大家参考一下系统要求: 支持FSO, 服务器UDP TCP/IP 没有屏蔽. 下面是小偷的内容: FileName TianQi.asp Write By Niaoked QQ408611119www.knowsky.com<% if hour(now)=9 and minute(now)<30 then getCategories() end if

用ASP+XMLHTTP编写一个天气预报程序

asp+|xml|程序|天气预报|xml     本人就职于一个本地门户网站,每天网站上的天气都得更新.久而久之感到相当麻烦,于是写了一个定时的新闻小偷,帖出来大家参考一下系统要求: 支持FSO, 服务器UDP TCP/IP 没有屏蔽. 下面是小偷的内容:FileName TianQi.aspWrite By Niaoked QQ408611119www.knowsky.com<% if hour(now)=9 and minute(now)<30 then getCategories() e

asp制作的天气预报小偷程序

程序|天气预报|小偷程序|天气预报|小偷程序 使用说明: 提交城市名参数即可: weather.asp?city=北京 以下是weather.asp源代码:<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <% on error resume next dim fcity fcity=trim(request("city")) if fcity="" then fcity = s

ASP.NET的实时天气及24小时天气预报

修改其中的url获得其他城市的天气情况 如广州为: http://weather.yahoo.com/forecast/CHXX0037_c.html 注意仅适用于获得yahoo上的天气预报      以下为引用的内容:  GetWeather.aspx   -----------------------------------      <%@ Page language="c#" Codebehind="GetWeather.aspx.cs" AutoEv

获取天气预报信息

天气预报 http://community.csdn.net/Expert/topic/3720/3720043.xml?temp=.9098169 <form method=post action="weareport.asp">城市:<input name=city value='哈尔滨'><br/>地区:<input name=area value='东北'><br/>省份:<input name=province

根据IP自动获取所在地天气预报

天气预报     265天气预报代码: <iframe src="http://weather.265.com/weather.htm" width="168" height="54" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="no">