2016年2月24日星期三

java 获取sina股票信息的方法

  1. package com.lee.test;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.File;  
  6. import java.io.FileReader;  
  7. import java.io.FileWriter;  
  8. import java.io.IOException;  
  9. import java.io.InputStreamReader;  
  10. import java.net.URL;  
  11. import java.net.URLConnection;  
  12. import java.util.ArrayList;  
  13. import java.util.Arrays;  
  14. import java.util.List;  
  15.   
  16. /** 
  17.  *  
  18.  * @author Don.W.Lee 
  19.  * @version 1.0 
  20.  * @since 2012-03-29 
  21.  * 
  22.  */  
  23. public class SinaStock {  
  24.     private static String db  = "C:\\Documents and Settings\\Administrator\\桌面\\sina-stock-codes.txt" ;  
  25.     private static final int COLUMNS = 32;  
  26.     private static List codes = new ArrayList() ;  
  27.       
  28.     static{  
  29.         File in = new File(db) ;  
  30.         if(! in.exists()){  
  31.             // 从网络获取  
  32.             if(codes.size() < 1 )  
  33.                 try {  
  34.                     codes = getAllStackCodes() ;  
  35.                 } catch (IOException e) {  
  36.                     e.printStackTrace();  
  37.                 }  
  38.         }else{  
  39.             // 从本地获取  
  40.             if(codes.size() < 1)  
  41.                 try {  
  42.                     codes = getAllStockCodesFromLocal() ;  
  43.                 } catch (IOException e) {  
  44.                     e.printStackTrace();  
  45.                 }  
  46.         }  
  47.     }  
  48.       
  49.     // 解析一组股票代码字符串   把code中包括的所有股票代码放入List中  
  50.     private static List handleStockCode(String code){  
  51.         List codes = null ;  
  52.         int end = code.indexOf(";") ;  
  53.             code = code.substring(0,end) ;  
  54.         int start = code.lastIndexOf("=") ;  
  55.            code = code.substring(start) ;  
  56.            code = code.substring(code.indexOf("\"")+1,code.lastIndexOf("\"")) ;  
  57.            codes = Arrays.asList(code.split(",")) ;  
  58.         return codes ;  
  59.     }  
  60.       
  61.     //   返回的值是一个js代码段  包括指定url页面包含的所有股票代码  
  62.     private static String getBatchStackCodes(URL url) throws IOException{  
  63.          URLConnection connection = url.openConnection() ;  
  64.          connection.setConnectTimeout(30000) ;  
  65.          BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())) ;  
  66.          String line = null ;  
  67.          StringBuffer sb = new StringBuffer() ;  
  68.         boolean flag =false ;  
  69.          while((line = br.readLine()) != null ){  
  70.              if(line.contains("")){  
  71.                  flag =false ;  
  72.                  if(sb.length() > 0 ){  
  73.                      if(sb.toString().contains("code_list") && sb.toString().contains("element_list")){  
  74.                          break ;  
  75.                      }else{  
  76.                          sb.setLength(0) ;  
  77.                      }  
  78.                  }  
  79.              }  
  80.          }  
  81.          if(br != null ){  
  82.              br.close() ;  
  83.              br= null ;  
  84.          }  
  85.         return sb.toString() ;  
  86.     }  
  87.       
  88.     // 获取新浪38页的所有股票代码  
  89.     private static List getAllStackCodes() throws IOException{  
  90.         List codes = new ArrayList() ;  
  91.         int i =1 ;  
  92.         URL url = null ;  
  93.         // 新浪 股票 好像目前为止就 38页  
  94.         for(; i < 39 ; i ++ ){  
  95.              url = new URL("http://vip.stock.finance.sina.com.cn/q/go.php/vIR_CustomSearch/index.phtml?p="+i) ;  
  96.              String code = getBatchStackCodes(url) ;  
  97.              codes.addAll(handleStockCode(code)) ;  
  98.         }  
  99.         if(! ( new File(db) ).exists() )  
  100.             saveStockCodes(codes) ;  
  101.         return codes ;  
  102.     }  
  103.       
  104.     //把新浪38页的所有股票代码存入本地文件  
  105.     private static void saveStockCodes(List codes ) throws IOException{  
  106.         //将所有股票代码存入文件中  
  107.         File out = new File(db) ;  
  108.         if(! out.exists())  
  109.             out.createNewFile() ;  
  110.         BufferedWriter bw = new BufferedWriter(new FileWriter(out)) ;  
  111.         for(String code : codes ){  
  112.             bw.write(code) ;  
  113.             bw.newLine() ;  
  114.         }  
  115.         if(bw != null ){  
  116.             bw.close() ;  
  117.             bw = null ;  
  118.         }  
  119.     }  
  120.       
  121.     private static List getAllStockCodesFromLocal() throws IOException{  
  122.         List codes = new ArrayList() ;  
  123.         File in = new File(db) ;  
  124.         if(! in.exists())  
  125.             throw new IOException("指定数据文件不存在!");  
  126.         BufferedReader br = new BufferedReader(new FileReader(in)) ;  
  127.         String line = null ;  
  128.         while( ( line = br.readLine() ) != null ){  
  129.             codes.add(line) ;  
  130.         }  
  131.         // 删除最后一个空行  
  132.         codes.remove(codes.size()-1) ;  
  133.         if(br != null ){  
  134.             br.close() ;  
  135.             br = null ;  
  136.         }  
  137.         return codes ;  
  138.     }  
  139.       
  140.     public static String[]  getStockInfoByCode(String stockCode) throws IOException{  
  141.         // 仅仅打印  
  142.          String[] stockInfo = new String[COLUMNS] ;   
  143.          URL url = new URL("http://hq.sinajs.cn/?list="+stockCode) ;  
  144.          URLConnection connection = url.openConnection() ;  
  145.          connection.setConnectTimeout(16000) ;  
  146.          BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())) ;  
  147.          String line = null ;  
  148.          StringBuffer sb = new StringBuffer() ;  
  149.          while(( line = br.readLine()) != null ){  
  150.              sb.append(line) ;  
  151.          }  
  152.          if(sb.length() > 0 ){  
  153.              String rs = sb.toString() ;  
  154.              rs = rs.substring(rs.indexOf("\"")+1,rs.lastIndexOf("\"")) ;  
  155.              String[] rss = rs.split(",") ;  
  156.              for(int i = 0 ;  i< rss.length ; i ++ ){  
  157.                  System.out.print(rss[i]+"\t|");  
  158.                  stockInfo[i] = rss[i];  
  159.              }  
  160.              System.out.println("\n------------------------------------");   
  161.          }  
  162.          return stockInfo ;  
  163.     }  
  164.       
  165.     public static void getAllStockInfo() throws IOException{  
  166.         String[] header = getHeaders() ;  
  167.         System.out.println(header.length);  
  168.         for(int i = 0 ; i < header.length ;  i++ ){  
  169.             System.out.print(header[i]+"\t|");  
  170.         }  
  171.         for(String code : codes ){  
  172.             getStockInfoByCode(code) ;  
  173.         }  
  174.     }  
  175.       
  176.     /** 
  177.      *  
  178.      * @param first 从0开始 
  179.      * @param last  不包括 last 
  180.      * @return 
  181.      */  
  182.     public static List getStockInfo(int first , int last , int recoeds)throws Exception{  
  183.         List stockInfo = new ArrayList() ;  
  184.         first = first < 0 ? 0 : first ;  
  185.         if(first > last )  
  186.             throw new Exception("参数不合法!") ;  
  187.         int i = 0 ;  
  188.         while(last > codes.size()  ){  
  189.             if(first + recoeds < codes.size()+1 ){  
  190.                 last = first +  recoeds ;  
  191.                 break ;  
  192.             }else{  
  193.                 last = first + recoeds +(--i) ;  
  194.             }  
  195.         }  
  196.         for( i = first ; i <= last ; i ++ ){  
  197.             stockInfo.add(getStockInfoByCode(codes.get(i))) ;  
  198.         }  
  199.         return stockInfo ;  
  200.     }  
  201.       
  202.     public static String[] getHeaders(){  
  203.         String[] header = {"股票名字","今日开盘价    ","昨日收盘价","当前价格","今日最高价","今日最低价","竟买价","竞卖价","成交的股票数","成交金额(元)","买一","买一","买二","买二","买三","买三","买四","买四","买五","买五","卖一","卖一","卖二","卖二","卖三","卖三","卖四","卖四","卖五","卖五","日期","时间"} ;  
  204.         return header ;  
  205.     }     
  206.       
  207.     public static List getStockCodes(){  
  208.         return codes ;  
  209.     }  
  210.     public static void main(String[] args) {  
  211.         try {  
  212.             getAllStockInfo() ;  
  213.         } catch (IOException e) {  
  214.             e.printStackTrace();  
  215.         }  
  216.     }  
  217. }  
  218. [align=left][/align] 

1 条评论:

trustno1 说...

java编程实例代码为业余爱好者
java code If Else Statement