搞股票的很多人都聽說(shuō)過(guò)Wind資訊,Wind的板塊分類是比較準(zhǔn)確和精細(xì)的,更新也比較及時(shí)。最近想將Wind的板塊分類移植到我自己開發(fā)的股票系統(tǒng)中去,花時(shí)間分析了一下網(wǎng)絡(luò)協(xié)議和文件結(jié)構(gòu),記錄于此。
Wind的板塊文件一般在..\Windin\WWT\etc目錄下,與之相關(guān)的文件主要有
1=cntradedates.dat 國(guó)內(nèi)A股歷史交易日期列表
2=INDEXSECTORS.DAT Wind指數(shù)名稱及代碼
3=RelatedSymbols.dat A股與港股對(duì)照關(guān)系表
4=secbasicdelt.dat 已發(fā)行未上市股票?
5=secbasichis.dat 已摘牌股票
6=sysgrp.xml 板塊分類名稱及編號(hào)
7=SectorElementDelt.dat 板塊數(shù)據(jù)文件
8=SectorElementHis.dat 板塊數(shù)據(jù)文件
9=stocksplit.dat
10=currency.dat 匯率
11=SysConfig.ini 文件索引
12=etc.zip Wind服務(wù)器地址文件
以上文件都是文本文件,文件結(jié)構(gòu)比較簡(jiǎn)單,一看就能明白。下面主要分析下Wind是如何更新以上文件的。為了保證能夠與Wind的分類實(shí)時(shí)自動(dòng)同步,這個(gè)是必須的。
Wind在系統(tǒng)啟動(dòng)時(shí)會(huì)與服務(wù)器相連檢查上述配置文件是否最新。檢查辦法是,發(fā)送HTTP請(qǐng)求到
http://114.80.214.51/FileServer/DataFile.aspx?cfg=etc,服務(wù)器會(huì)返回一份上述文件的MD5碼表,與本地文件的MD5進(jìn)行比對(duì),如果不相同,就準(zhǔn)備更新。下面是截取的服務(wù)器應(yīng)答包。
888888? base\chardword.config:1F3A230D00B3262E447991CDB8F60E35;
cntradedates.dat:39A8AF6359FB70D8002689ACC70BF3A3;
currency.dat:2738738EF3A3F949A012A952E020E408;
etc.zip:72DDCB3B5F8CD52F4F3B00AA77788C49;
hqafdelt.dat:D41D8CD98F00B204E9800998ECF8427E;
hqafhis.dat:9A0120E611A11E8BC77C5285E537EA2E;
indexsectors.dat:7FB9699D40F9C47F309308662D704293;
relatedsymbols.dat:535A2D3DF67E42CAF3DABD3B91F3FFC2;
relatedsymbolslocal.dat:79ED9E9A02D46B57AE612370DAB8B84C;
secbasicdelt.dat:15CE8DCB34C0620DE6A0871A7624B309;
secbasichis.dat:AFA640C33669FFD0342F022650DBD536;
secbasicself.dat:88502DE7F9C14CC642FE9855EDDE0EA7;
secbrief.dat:A87B901E8BE18C431B5CCA6EC36D7AD0;
sectorelementdelt.dat:3BC53A5D76602DE056ABB7758D81451A;
sectorelementhis.dat:1397955C466767DAF9587F59F923B6B4;
stocksplit.dat:D41D8CD98F00B204E9800998ECF8427E;
suspension.dat:7FBBAFB7AAD5E68356FEAF9DE38036AA;
sysgrp.xml:463FE2657F9EA4A4545140C01D12DA95;
warrantinfo.dat:AFB2EF0A32F1ACDA9A30A4B0FF6253D3
888888是wind服務(wù)器返回的數(shù)據(jù)包頭,以sysgrp.xml為例其MD5碼就是463FE2657F9EA4A4545140C01D12DA95
大家可以隨便找個(gè)Md5計(jì)算文件比對(duì)一下就知道了。
下載板塊文件的HTTP請(qǐng)求是
http://114.80.214.51/FileServer/DataFile.aspx?cfg=etc&type=1&files=cntradedates.dat;currency.dat;indexsectors.dat;relatedsymbols.dat;secbasicdelt.dat;sectorelementdelt.dat;stocksplit.dat;sysgrp.xml
注意如果只需要下載部分文件,可以把files=后面的文件列表改一改就可以了。
服務(wù)器返回的數(shù)據(jù)結(jié)構(gòu)如下。

簡(jiǎn)單分析下包結(jié)構(gòu),數(shù)據(jù)包的開頭仍然是888888的包頭,接下來(lái)一個(gè)DWORD是本次下載的文件數(shù)目。再接下來(lái)是第一個(gè)文件的文件名,注意是PASCAL格式的字符串,字符串前面一個(gè)DWORD是字符串長(zhǎng)度。然后以"1"或者說(shuō)0x31,再后面是一個(gè)DWORD的該文件ZIP壓縮包長(zhǎng),以及壓縮數(shù)據(jù)長(zhǎng)度,接著是第二個(gè)、第三個(gè)文件直到結(jié)束。好像也不很復(fù)雜喲,不過(guò)可是花了我一晚上的時(shí)間。
以上這些格式都搞清楚了,剩下的就是寫下載同步的程序代碼了。哈哈,這個(gè)就不多說(shuō)了。