2016年2月29日星期一

新浪实时股票数据接口http://hq.sinajs.cn/list=code

股票数据的获取目前有如下两种方法可以获取:1. http/javascript接口取数据
2. web-service接口

1.http/javascript接口取数据
1.1 Sina股票数据接口

以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口:
http://hq.sinajs.cn/list=sh601006
这个url会返回一串文本,例如:
var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,
22114263, 589824680, 4695, 26.91, 57590, 26.90, 14700, 26.89, 14300,
26.88, 15100, 26.87, 3100, 26.92, 8900, 26.93, 14230, 26.94, 25150, 26.95, 15220, 26.96, 2008-01-11, 15:05:32";
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照程序员的思路,顺序号从0开始。
0:”大秦铁路”,股票名字;
1:”27.55″,今日开盘价;
2:”27.25″,昨日收盘价;
3:”26.91″,当前价格;
4:”27.55″,今日最高价;
5:”26.20″,今日最低价;
6:”26.91″,竞买价,即“买一”报价;
7:”26.92″,竞卖价,即“卖一”报价;
8:”22114263″,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
9:”589824680″,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万;
10:”4695″,“买一”申请4695股,即47手;
11:”26.91″,“买一”报价;
12:”57590″,“买二”
13:”26.90″,“买二”
14:”14700″,“买三”
15:”26.89″,“买三”
16:”14300″,“买四”
17:”26.88″,“买四”
18:”15100″,“买五”
19:”26.87″,“买五”
20:”3100″,“卖一”申报3100股,即31手;
21:”26.92″,“卖一”报价
(22, 23), (24, 25), (26,27), (28, 29)分别为“卖二”至“卖四的情况”
30:”2008-01-11″,日期;
31:”15:05:32″,时间;
如果你要同时查询多个股票,那么在URL最后加上一个逗号,再加上股票代码就可以了;比如你要一次查询大秦铁路(601006)和大同煤业(601001)的行情,就这样使用URL:
http://hq.sinajs.cn/list=sh601003,sh601001
查询大盘指数,比如查询上证综合指数(000001):
http://hq.sinajs.cn/list=s_sh000001
服务器返回的数据为:
var hq_str_s_sh000001="上证指数,3094.668,-128.073,-3.97,436653,5458126";
数据含义分别为:指数名称,当前点数,当前价格,涨跌率,成交量(手),成交额(万元);
查询深圳成指数:
http://hq.sinajs.cn/list=s_sz399001
对于股票的K线图,日线图等的获取可以通过请求http://image.sinajs.cn/…./…/*.gif此URL获取,其中*代表股票代码,详见如下:
查看日K线图:
http://image.sinajs.cn/newchart/daily/n/sh601006.gif
1.2 Baidu&Google的财经数据在baidu, google中搜索某只股票代码时,将会在头条显示此股票的相关信息,例如在google搜索601006时,
第一条搜索结果如下图:
通过点击左边的图片我们发现会将此图片链接到sina财经频道上,也就是说google股票数据的获取也是从sina获取。后经抓包分析,发现google也是采用1.1中介绍的接口。
Baidu的股票数据来自baidu的财经频道
http://stock.baidu.com/
1.3 其他方式
除了sina,baidu等网站提供股票信息外,其他网站也有类似的接口。我们分析了一款论坛上采用的股票插件,
其中有关于实时股票数据获取的介绍,详见如下代码,其中可以看到有些数据来自sina。
以下是ASP示例:
=5 then
stockdata=gethttp("http://hq.sinajs.cn/list=sh"&code&"")
if not len(stockdata)=0 then stockdata=split(stockdata,chr(34))(1)
end if
if len(stockdata)=0 then
stockdata="0,0,0,0,0,0,0,0,0,0,0,0"
else
stockdatasplit=split(stockdata,",") stockdata=""&exstock.checkstr(stockdatasplit(0))&","&stockdatasplit(1)&","&stockdatasplit(2)&","&stockdatasplit(3)&","&stockdatasplit(4)&","&stockdatasplit(5)&","&formatdatetime(""&stockdatasplit(30)&" "&stockdatasplit(31)&"",0)&""
end if
‘0=股票名称,1=开盘价格,2=昨收盘价格,3=当前价格,4=最高价,5=最低价,6=更新时间
getstockdata=stockdata
end function
function getstockimg(code)
dim rndnum,addnum,checkcode,imgsource
if len(code)=5 then
getstockimg="http://image.sinajs.cn/newchart/daily/n/sh"&code&".gif"
end if
imgsource="http://finance.sina.com.cn"
case 3
getstockimg="http://hq.gazxfe.com/stockchart/realline.chart?"&code&"&1003&SZ 500 330"
imgsource="http://hq.gazxfe.com"
case 4
getstockimg="http://chartse.stockstar.com/chartserver?code="&code&""
imgsource="http://www.stockstar.com/"
end select
getstockimg=split(""&getstockimg&"||"&imgsource&"","||")
end function
function getastockimg()
dim rndnum,addnum,checkcode
dim getastockimgb,imgsource
addnum=6
randomize:rndnum=cint(rnd*addnum)
select case rndnum
case 0
getastockimg="http://202.109.106.1/gifchartse/gif/000001.gif"
getastockimgb="http://202.109.106.1/gifchartse/gif/399001.gif"
imgsource="http://www.stockstar.com/"
case 1
getastockimg="http://money.163.com/special/100.gif?C39"
getastockimgb="http://money.163.com/special/101.gif?HrS"
imgsource="http://www.163.com"
case 2
getastockimg="http://www.10jqka.com.cn/curve/realtime/index2.php?code=1a0001&w=180&h=140"
getastockimgb="http://www.10jqka.com.cn/curve/realtime/index2.php?code=399001&w=180&h=140"
imgsource="http://www.10jqka.com.cn"
case 3
getastockimg="http://chart.cnlist.com/stockchart/realline.chart?1a0001&1002&SZ 180 140"
getastockimgb="http://chart.cnlist.com/stockchart/realline.chart?399001&1002&SZ 180 140"
imgsource="http://chart.cnlist.com/"
case 4
getastockimg="http://image.sinajs.cn/newchart/small/ish000001.gif?1189176558328"
getastockimgb="http://image.sinajs.cn/newchart/small/isz399001.gif?1189176558328"
imgsource="http://www.sinajs.cn"
case 5
getastockimg="http://218.1.72.66/cgi/pic/sh/realtime/JA000001164143.png"
getastockimgb="http://218.1.72.66/cgi/pic/sz/realtime/JA399001164143.png"
imgsource="http://www.cnstock.com/"
case 6
getastockimg="http://222.73.29.85/img/000001.png"
getastockimgb="http://222.73.29.85/img/399001.png"
imgsource="http://www.eastmoney.com/"
end select
getastockimg=split(""&getastockimg&"||"&getastockimgb&"||"&imgsource&"","||")
end function
%>

新浪美股接口(原创)

     新浪美股接口在http://hq.sinajs.cn/list=gb_(美股代码),比如百度接口就是http://hq.sinajs.cn/list=gb_bidu。
     输入这个网页会显示:var hq_str_gb_bidu="百度,173.80,9.85,2016-02-27 09:18:13,15.58,175.24,176.81,172.20,223.95,100.00,8881753,4113759,60795240000,5.20,33.42,0.00,2.26,0.00,0.00,349800000,85.00,173.60,-0.11,-0.20,Feb 26 07:59PM EST,Feb 26 04:00PM EST,158.22,47623.00";
  接下来就要对这一系列数字进行分析,分别表示为:
data[1]: (173.80) 当前价格
data[2]: (9.85) 增长率
data[3]: (2016-02-27 09:18:13) 美国时间
data[4]: (15.58) 增长值
data[5]: (175.24) 开盘价
data[6]: (176.81) 最高价
data[7]: (172.20) 最低价
data[8]: (223.95) 52周最高价
data[9]: (100) 52周最低价
data[10]: (8881753) 成交量
data[11]: (4113759) 10日均量
data[12]: (60795240000) 市值
data[13]: (5.20) 每股收益
data[14]: (33.42) 市盈率
data[15]: (0.00) 股息
data[16]: (2.26)   贝塔系数
data[17]: (0.00) 
data[18]: (0.00) 
data[19]: (349800000)  股本
data[20]: (85)  
data[21]: (173.6)  盘后股价
data[22]: (0.33)   盘后增长率
data[23]: (0.57)   盘后增长值
data[24]: (Feb 29 07:55PM EST)  盘后时间
data[25]: (Feb 29 04:00PM EST) 关盘时间
data[26]: (173.80) 收盘价

2016年2月25日星期四

如何将EXCEL文件转换成utf8编码的csv文件

把EXCEL文件转换成utf8编码的csv文件,是这样处理的:
 第一步,用Excel创建文件,另存为 .csv 格式;
 第二步,用记事本打开 CSV 文件,然后另存为 UTF-8 格式。
或者直接在excel中选择另存为,在另存为界面中的保存旁边有个工具选项,点击工具选项之后选择web选项。之后的你就知道啦。
如果需要转换的文件比较多,这样处理效率太低了。
如何一次将EXCEL文件转换成utf8编码的csv文件?可以使用软件批量转换。比如CodeConvert之类的。

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]