這篇文章介紹了在一定的周期范圍內去抓取新浪中行情數據,通過更新數據來緩解構造模擬數據與真實數據差異性,感興趣的朋友可以了解一下
在日常開發中我們經常會使用到行情數據,很多的時候我們根據一個基準數據區構造行情,但是隨著時間的推移然來構造的數據與真實行情數據之間的差距越來越大。
本問以AG1309為例子來說明,如何使用C++程序來獲取新浪行情數據。(說明如果合約過期獲取的數據將未空,此時請更換合約信息)。
好了,在這里就不再將廢話,直接給出源碼供大家學習!
// HttpDataTest.cpp : 定義控制臺應用程序的入口點。
- #include "stdafx.h"
- #include
- #include
- #include
- #include
- #include
- #include
- #define MAXSIZE 1024
- #pragma comment(lib, "Wininet.lib")
- void urlopen(_TCHAR*);
- std::string GetSubBtFind(char* lpsz);
- int Token(const char* pSep, char* pStr, std::vector& refvec);
- int _tmain(int argc, _TCHAR* argv[])
- {
- urlopen(_T("http://hq.sinajs.cn/list=AG1309"));
- system("pause");
- return 0;
- }
- void urlopen(_TCHAR* url)
- {
- HINTERNET hSession = InternetOpen(_T("UrlTest"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
- if(hSession != NULL)
- {
- HINTERNET hHttp = InternetOpenUrl(hSession, url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
- if (hHttp != NULL)
- {
- wprintf_s(_T("%s/n"), url);
- char Temp[MAXSIZE];
- ULONG Number = 1;
- while (Number > 0)
- {
- InternetReadFile(hHttp, Temp, MAXSIZE - 1, &Number);
- Temp[Number] = '/0';
- std::string str= GetSubBtFind(Temp);
- ;
- char szpstr[1024];
- strcpy(szpstr, str.c_str());
- std::vector vec;
- Token(",", szpstr, vec);
- printf("%s/n", Temp);
- for(int i=0; i
- {
- printf("%s/n", vec[i]);
- }
- }
- InternetCloseHandle(hHttp);
- hHttp = NULL;
- }
- InternetCloseHandle(hSession);
- hSession = NULL;
- }
- }
- std::string GetSubBtFind(char* lpsz)
- {
- std::string scrStr=lpsz;
- std::string str_temp="";
- int len=strlen(lpsz);
- int beginPos=scrStr.find("/"");
- scrStr=scrStr.substr(beginPos+1,len);
- int endPos=scrStr.find("/"");
- str_temp=scrStr.substr(0,endPos);
- return str_temp;
- }
- int Token(const char* pSep, char* pStr, std::vector& refvec)
- {
- for(char* outer = strtok(pStr, pSep) ; NULL != outer; outer = strtok(NULL, pSep))
- {
- refvec.push_back(outer);
- }
- return 0;
- }
上述代碼在vs2008下運行結果如下:
以上就是本文的全部內容,希望對大家熟練應用C++程序抓取數據有所幫助
新聞熱點
疑難解答