网页取行情数据-1

起因是从 数据提供商取到的股指期货的结算价更新比较晚,一般收盘后还是昨天的数据。

而页面更新后接口基本还要延迟个半个多小时,就想试试从网页上抓取。


目前没有很好的办法,记录下这几天的集中尝试思路:

1. 从通达信上抓取: 股票,网上有个tdxHqApi.dll,  存在有效期,可以获取股票的行情数据。

                                     股指期货,传说中的tdxExHq.dll, 没有找到,但某网站提供了一个demo,这个demo确实取到了数据。

网上找到的接口如下:

//开发文档
//

//1.行情API均是TdxHqApi.dll文件的导出函数,包括以下函数:(所有行情函数均为客户端主动请求查询,不是服务器推送)
//bool  TdxHq_Connect(char* IP, int Port, char* Result, char* ErrInfo);//连接券商行情服务器
//void  TdxHq_Disconnect();//断开服务器
//bool  TdxHq_GetSecurityCount(byte Market, short& Result, char* ErrInfo);//获取指定市场内的证券数目
//bool  TdxHq_GetSecurityList(byte Market, short Start, short& Count, char* Result, char* ErrInfo);//获取市场内指定范围内的所有证券代码
//bool  TdxHq_GetSecurityBars(byte Category, byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);//获取股票K线
//bool  TdxHq_GetIndexBars(byte Category, byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);//获取指数K线
//bool  TdxHq_GetMinuteTimeData(byte Market, char* Zqdm, char* Result, char* ErrInfo);//获取分时图数据
//bool  TdxHq_GetHistoryMinuteTimeData(byte Market, char* Zqdm, int date, char* Result, char* ErrInfo);//获取历史分时图数据
//bool  TdxHq_GetTransactionData(byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);//获取分时成交
//bool  TdxHq_GetHistoryTransactionData(byte Market, char* Zqdm, short Start, short& Count, int date, char* Result, char* ErrInfo);//获取历史分时成交
//bool  TdxHq_GetSecurityQuotes(byte Market[], char* Zqdm[], short& Count, char* Result, char* ErrInfo);//获取盘口五档报价
//bool  TdxHq_GetCompanyInfoCategory(byte Market, char* Zqdm, char* Result, char* ErrInfo);//获取F10信息类别
//bool  TdxHq_GetCompanyInfoContent(byte Market, char* Zqdm, char* FileName, int Start, int Length, char* Result, char* ErrInfo);//获取F10信息内容
//bool  TdxHq_GetXDXRInfo(byte Market, char* Zqdm, char* Result, char* ErrInfo);//获取权息数据
//bool  TdxHq_GetFinanceInfo(byte Market, char* Zqdm, char* Result, char* ErrInfo);//获取财务数据


//3.各个函数功能说明
/// 
///  连接通达信行情服务器
/// 
/// 服务器IP,可在券商通达信软件登录界面“通讯设置”按钮内查得
/// 服务器端口
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool (__stdcall*  TdxHq_ConnectDelegate)(char* IP, int Port, char* Result, char* ErrInfo);


/// 
/// 断开同服务器的连接
/// 
typedef void(__stdcall* TdxHq_DisconnectDelegate)();




/// 
/// 获取证券指定范围的的K线数据
/// 
/// K线种类, 0->5分钟K线    1->15分钟K线    2->30分钟K线  3->1小时K线    4->日K线  5->周K线  6->月K线  7->1分钟  8->1分钟K线  9->日K线  10->季K线  11->年K线< / param>
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 范围的开始位置,最后一条K线位置是0, 前一条是1, 依此类推
/// 范围的大小,API执行前,表示用户要请求的K线数目, API执行后,保存了实际返回的K线数目, 最大值800
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetSecurityBarsDelegate)(byte Category, byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);





/// 
/// 获取市场内所有证券的数量
/// 
/// 市场代码,   0->深圳     1->上海
/// 此API执行返回后,Result内保存了返回的证券数量
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetSecurityCountDelegate)(byte Market, short& Result, char* ErrInfo);


/// 
/// 获取市场内某个范围内的1000支股票的股票代码
/// 
/// 市场代码,   0->深圳     1->上海
/// 范围开始位置,第一个股票是0, 第二个是1, 依此类推,位置信息依据TdxHq_GetSecurityCount返回的证券总数确定
/// 范围的大小,API执行后,保存了实际返回的股票数目,
/// 此API执行返回后,Result内保存了返回的证券代码信息,形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetSecurityListDelegate)(byte Market, short Start, short& Count, char* Result, char* ErrInfo);







/// 
/// 获取指数的指定范围内K线数据
/// 
/// K线种类, 0->5分钟K线    1->15分钟K线    2->30分钟K线  3->1小时K线    4->日K线  5->周K线  6->月K线  7->1分钟  8->1分钟K线  9->日K线  10->季K线  11->年K线< / param>
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 范围开始位置,最后一条K线位置是0, 前一条是1, 依此类推
/// 范围的大小,API执行前,表示用户要请求的K线数目, API执行后,保存了实际返回的K线数目,最大值800
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool (__stdcall* TdxHq_GetIndexBarsDelegate)(byte Category, byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);



/// 
/// 获取分时数据
/// 
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool (__stdcall* TdxHq_GetMinuteTimeDataDelegate)(byte Market, char* Zqdm, char* Result, char* ErrInfo);


/// 
/// 获取历史分时数据
/// 
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 日期, 比如2014年1月1日为整数20140101
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetHistoryMinuteTimeDataDelegate)(byte Market, char* Zqdm, int Date, char* Result, char* ErrInfo);


/// 
/// 获取分时成交某个范围内的数据
/// 
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 范围开始位置,最后一条K线位置是0, 前一条是1, 依此类推
/// 范围大小,API执行前,表示用户要请求的K线数目, API执行后,保存了实际返回的K线数目
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetTransactionDataDelegate) (byte Market, char* Zqdm, short Start, short& Count, char* Result, char* ErrInfo);


/// 
/// 获取历史分时成交某个范围内的数据
/// 
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 范围开始位置,最后一条K线位置是0, 前一条是1, 依此类推
/// 范围大小,API执行前,表示用户要请求的K线数目, API执行后,保存了实际返回的K线数目
/// 日期, 比如2014年1月1日为整数20140101
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetHistoryTransactionDataDelegate) (byte Market, char* Zqdm, short Start, short& Count, int Date, char* Result, char* ErrInfo);

/// 
/// 批量获取多个证券的五档报价数据
/// 
/// 市场代码,   0->深圳     1->上海, 第i个元素表示第i个证券的市场代码
/// 证券代码, Count个证券代码组成的数组
/// API执行前,表示用户要请求的证券数目,最大50(不同券商可能不一样,具体数目请自行咨询券商或测试), API执行后,保存了实际返回的数目
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetSecurityQuotesDelegate) (byte Market[], char* Zqdm[], short& Count, char* Result, char* ErrInfo);


/// 
/// 获取F10资料的分类
/// 
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetCompanyInfoCategoryDelegate) (byte Market, char* Zqdm, char* Result, char* ErrInfo);




/// 
/// 获取F10资料的某一分类的内容
/// 
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 类目的文件名, 由TdxHq_GetCompanyInfoCategory返回信息中获取
/// 类目的开始位置, 由TdxHq_GetCompanyInfoCategory返回信息中获取
/// 类目的长度, 由TdxHq_GetCompanyInfoCategory返回信息中获取
/// 此API执行返回后,Result内保存了返回的查询数据,出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetCompanyInfoContentDelegate) (byte Market, char* Zqdm, char* FileName, int Start, int Length, char* Result, char* ErrInfo);




/// 
/// 获取除权除息信息
/// 
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 此API执行返回后,Result内保存了返回的查询数据,出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetXDXRInfoDelegate) (byte Market, char* Zqdm, char* Result, char* ErrInfo);



/// 
/// 获取财务信息
/// 
/// 市场代码,   0->深圳     1->上海
/// 证券代码
/// 此API执行返回后,Result内保存了返回的查询数据,出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall* TdxHq_GetFinanceInfoDelegate) (byte Market, char* Zqdm, char* Result, char* ErrInfo);

扩展行情:

//开发文档
//

//1.扩展行情API均是TdxHqApi.dll文件的导出函数,包括以下函数:(所有行情函数均为客户端主动请求查询,不是服务器推送)
//bool  TdxExHq_Connect(char* IP, int Port, char* Result, char* ErrInfo);//连接券商行情服务器
//void  TdxExHq_Disconnect();//断开服务器
//bool  TdxExHq_GetMarkets(char* Result, char* ErrInfo);//获取所有市场代码
//bool  TdxExHq_GetInstrumentCount(int& Result, char* ErrInfo);//获取所有品种的数目
//bool  TdxExHq_GetInstrumentInfo(int Start, short Count, char* Result, char* ErrInfo);//获取所有品种代码
//bool  TdxExHq_GetInstrumentBars(byte Category, byte Market, char* Zqdm, int Start, short& Count, char* Result, char* ErrInfo);//获取指定品种的K线数据
//bool  TdxExHq_GetMinuteTimeData(byte Market, char* Zqdm, char* Result, char* ErrInfo);//获取指定品种的分时图数据
//bool  TdxExHq_GetTransactionData(byte Market, char* Zqdm, int Start, short& Count, char* Result, char* ErrInfo);//获取指定品种的分时成交数据
//bool  TdxExHq_GetInstrumentQuote (byte Market, char* Zqdm, char* Result, char* ErrInfo);//获取指定品种的盘口报价
//bool  TdxExHq_GetHistoryTransactionData(byte Market, char* Zqdm, int date, int Start, short& Count, char* Result, char* ErrInfo);//获取指定品种的历史分时成交数据
//bool  TdxExHq_GetHistoryMinuteTimeData(byte Market, char* Zqdm, int date, char* Result, char* ErrInfo);//获取指定品种的分时图数据

//3.各个函数功能说明
/// 
///  连接通达信扩展行情服务器
/// 
/// 服务器IP,可在券商通达信软件登录界面“通讯设置”按钮内查得
/// 服务器端口
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall*  TdxExHq_ConnectDelegate)(char* IP, int Port, char* Result, char* ErrInfo);


/// 
/// 断开同服务器的连接
/// 
typedef void(__stdcall*  TdxExHq_DisconnectDelegate)();


/// 
///  获取扩展行情中支持的各个市场的市场代码
/// 
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
typedef bool(__stdcall*  TdxExHq_GetMarketsDelegate)(char* Result, char* ErrInfo); 




/// 
///  获取所有期货合约的总数
/// 
/// 此API执行返回后,Result内保存了返回的合约总数。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
typedef bool(__stdcall*  TdxExHq_GetInstrumentCountDelegate)(int& Result, char* ErrInfo);



/// 
///  获取指定范围的期货合约的代码
/// 
// 合约范围的开始位置, 由TdxExHq_GetInstrumentCount返回信息中确定
/// 合约的数目, 由TdxExHq_GetInstrumentCount返回信息中获取
/// 此API执行返回后,Result内保存了返回的查询数据,出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
typedef bool(__stdcall*  TdxExHq_GetInstrumentInfoDelegate)(int Start, short Count, char* Result, char* ErrInfo); 


/// 
/// 获取合约的K线数据
/// 
/// K线种类, 0->5分钟K线    1->15分钟K线    2->30分钟K线  3->1小时K线    4->日K线  5->周K线  6->月K线  7->1分钟  8->1分钟K线  9->日K线  10->季K线  11->年K线< / param>
/// 市场代码
/// 证券代码
/// K线开始位置,最后一条K线位置是0, 前一条是1, 依此类推
/// API执行前,表示用户要请求的K线数目, API执行后,保存了实际返回的K线数目, 最大值800
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall*  TdxExHq_GetInstrumentBarsDelegate)(byte Category, byte Market, char* Zqdm, int Start, short& Count, char* Result, char* ErrInfo);


/// 
/// 获取分时数据
/// 
/// 市场代码,
/// 证券代码
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall*  TdxExHq_GetMinuteTimeDataDelegate)(byte Market, char* Zqdm, char* Result, char* ErrInfo);



/// 
/// 获取分时成交数据
/// 
/// 市场代码
/// 证券代码
/// K线开始位置,最后一条K线位置是0, 前一条是1, 依此类推
/// API执行前,表示用户要请求的K线数目, API执行后,保存了实际返回的K线数目
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall*  TdxExHq_GetTransactionDataDelegate)(byte Market, char* Zqdm, int Start, short& Count, char* Result, char* ErrInfo);



/// 
/// 获取合约的五档报价数据
/// 
/// 市场代码
/// 证券代码
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall*  TdxExHq_GetInstrumentQuoteDelegate) (byte Market, char* Zqdm,  char* Result, char* ErrInfo);


/// 
/// 获取历史分时成交数据
/// 
/// 市场代码,
/// 证券代码
/// K线开始位置,最后一条K线位置是0, 前一条是1, 依此类推
/// API执行前,表示用户要请求的K线数目, API执行后,保存了实际返回的K线数目
/// 日期, 比如2014年1月1日为整数20140101
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall*  TdxExHq_GetHistoryTransactionDataDelegate)(byte Market, char* Zqdm, int date, int Start, short& Count, char* Result, char* ErrInfo);



/// 
/// 获取历史分时数据
/// 
/// 市场代码
/// 证券代码
/// 日期, 比如2014年1月1日为整数20140101
/// 此API执行返回后,Result内保存了返回的查询数据, 形式为表格数据,行数据之间通过\n字符分割,列数据之间通过\t分隔。一般要分配1024*1024字节的空间。出错时为空字符串。
/// 此API执行返回后,如果出错,保存了错误信息说明。一般要分配256字节的空间。没出错时为空字符串。
/// 成功返货true, 失败返回false
typedef bool(__stdcall*  TdxExHq_GetHistoryMinuteTimeDataDelegate)(byte Market, char* Zqdm, int date, char* Result, char* ErrInfo);

两类api的demo文件见:

http://download.csdn.net/detail/fonjames/9511643

http://download.csdn.net/detail/fonjames/9511639


其他接口见 此网站 http://chaoguwaigua.com/


后续可能思路: 从exe抽取dll模块?或者exe封装成dll,如果有知道方法可以联系我 :-)


2 从同花顺的网页接口上获取:

股指:

http://d.10jqka.com.cn/multimarketreal/129/IF1605/65_66_67_68_69_70_199112

大概跟测了下, 6表示昨收, 7表示开盘 , 8最高,9最低 ,10现价, 12 总量  ,66昨结  ,69涨停价 ,70跌停价,199112 :涨跌幅

还是没有找到结算价,有知道的童鞋可以告知我下。



未完待续。


你可能感兴趣的:(证券,programmer,VC)