Java读取股票信息

公司局域网中有个网站,希望网站上能够显示本公司股票信息,但是局域网内大部分人都不能上外网,所以就不能考虑内嵌股票网页。
没有股票数据库,那么只能读取某个财经网站的股票信息了,找来找去,找到东方财富网,数据结构比较简单。
比如输入网址http://hqdigi2.eastmoney.com/EM_Quote2010NumericApplication/CompatiblePage.aspx?Type=ZT&jsName=js_fav&fav=0000011,其中000001表示上证指数,1表示上证,
返回结果
var js_fav={favif:["1,000001,上证指数,2765.92,-1.31%,1003.01"]};
这不就是需要的股票信息吗?还有涨幅呢,稍加处理就可以放到自己的网站了。

实现目标需求,有以下几步:
1、创建一个定时器,每隔10秒钟读取一次最新股票信息;
2、给定股票代码,访问股票网址,获得股票信息;
3、处理得到符合要求的股票信息;
4、将股票信息存储在数据库中,供网站读取。

完整代码

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;

public class TimerTask {
	static Connection conn;
	static Statement st;
	static SimpleDateFormat dtf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
	public static void main(String[] args) {
		java.util.Timer timer = new Timer(true); 
		timer.schedule(new MyTimerTask(), 0, 10*1000);//创建定时器,每隔10秒钟执行一次
		while(true)
			try {
				Thread.currentThread().sleep(5000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
	static class MyTimerTask extends java.util.TimerTask{
		public void run() {
			try
			{
				//连接数据库
				if(conn==null || conn.isClosed()){
					String dburl = "jdbc:mysql://localhost:3306/oa";
					Class.forName( "org.gjt.mm.mysql.Driver" );
					conn = DriverManager.getConnection(dburl, "root", "password" );
					st = conn.createStatement(); 
				}
				mGetStockPrice(st,"0000011");//取得指定股票的价格,注意股票代码7为,最后一位表示,1表示上证,2表示深证
				mGetStockPrice(st,"3990012");
				mGetStockPrice(st,"0000392");
				mGetStockPrice(st,"2000392");
				mGetStockPrice(st,"6000361");
				mGetStockPrice(st,"6008371");
				mGetStockPrice(st,"6018571");
				System.out.println();
				
			}catch(Exception ex){ex.printStackTrace();}
		}
		public void mGetStockPrice(Statement st,String stockCode){
			String str = "";
			try
		    {
				System.out.print("+");
				str = mGetUrlHtml("http://hqdigi2.eastmoney.com/EM_Quote2010NumericApplication/CompatiblePage.aspx?Type=ZT&jsName=js_fav&fav=" + stockCode,"UTF-8");
				//网址返回的数据格式
				//var js_fav={favif:["1,000001,上证指数,2765.92,-1.31%,1003.01"]};
				//如果股票信息不为空
				if(str.indexOf(",")>-1){
					String[] arr = str.split(",");
					//如果股票信息是有效的
					if(arr.length==6){
						//如果上涨就是红色,如果下跌就是绿色
						if(arr[4].startsWith("-"))
							str = "<span style=\"color:green;font-size:10pt;\">" + arr[2] + " " + arr[3] + " " + arr[4] + "</span>";
						else
							str = "<span style=\"color:red;font-size:10pt;\">" + arr[2] + " " + arr[3]  + " " + arr[4] +"</span>";
						str = str.replaceAll("'", "\'");
						//判断数据库中是否已经存在股票代码,存在即新增,如果不存在就更新价格
						ResultSet rs  = st.executeQuery("select count(*) from stock_prop where propType='stockPrice' and propName='"+ stockCode +"'");
						rs.next();
						if("0".equals(String.valueOf(rs.getObject(1))))
							st.executeUpdate("insert into stock_prop(propType,propName,propValue) values('stockPrice','"+ stockCode +"','"+ str +"')");
						else
							st.executeUpdate("update stock_prop set propValue='"+ str +"' where propType='stockPrice' and propName='"+ stockCode +"'");
						rs.close();
					}
				}
				System.out.print("*");
		    }
			catch(Exception ex){ex.printStackTrace();}
		}
		public String mGetUrlHtml(String urlStr,String charSet){
			String html= "";
			try
			{
				//读取网址中的信息
				URL url = new URL(urlStr);
				URLConnection connection = url.openConnection();
				String sCurrentLine = "";
				StringBuffer sTotalString = new StringBuffer();
				BufferedReader l_reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),charSet));
				while ((sCurrentLine = l_reader.readLine()) != null)
	 				sTotalString.append(sCurrentLine + "\r\n");
				html = sTotalString.toString();
			}catch(Exception ex){ex.printStackTrace();}
			return html;
		}
	}
}



<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值