公司局域网中有个网站,希望网站上能够显示本公司股票信息,但是局域网内大部分人都不能上外网,所以就不能考虑内嵌股票网页。
没有股票数据库,那么只能读取某个财经网站的股票信息了,找来找去,找到东方财富网,数据结构比较简单。
比如输入网址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;

        }

    }

}