C++读取股票即时数据

C++读取股票即时数据比MFC或QT读取即时数据要稍显麻烦,C++没有封装现成的网络通信库,需借助第三方工具。本例使用C ++ libcurl库,这个库的具体安装方法可度娘,博客园----‘这种人’的一篇博文,照做就可以装好,贴不了头条以外的链接,有需要的友友请自行搜索阅读。本例本必须先安装好库才能正确运行。

开发工具使用的VS2017,用2019不习惯改回来了。新建一个C++控制台的空项目,名称自取,然后复制以下源文件到空项目的.cpp文件,整理好代码,编译即可:

#include

#include

#include

#include

#include

#pragma warning(disable:4996)

#pragma comment(lib, "libcurl.lib")

#pragma comment(lib, "wldap32.lib")

#pragma comment(lib, "ws2_32.lib")

#pragma comment(lib, "winmm.lib")

using namespace std;

// callback function for curl

static size_t downloadCallback(void *buffer, size_t sz, size_t nmemb, void *writer)

{

string* psResponse = (string*)writer;

size_t size = sz * nmemb;

psResponse->append((char*)buffer, size);

return sz * nmemb;

}

string getCurrnetData(string code)

{

if (code.substr(0, 1) == "6")

code = "sh" + code;

else if (code.substr(0, 1) == "0" || code.substr(0, 1) == "3")

code = "sz" + code;

string strRet;

CURL *curl;

CURLcode res;

curl = curl_easy_init(); //初始化curl指针,返回一个easy_handle(curl*对象)

if (curl)

{

string reply;

string strcode = "http://qt.gtimg.cn/q=";

strcode = strcode.append(code);

//描述: 这个函数最重要了.几乎所有的curl 程序都要频繁地使用它.

//它告诉curl库.程序将有如何的行为. 比如要查看一个网页的html代码等.

//(这个函数有些像ioctl函数)参数:

//1 CURL类型的指针

//2 各种CURLoption类型的选项.(都在curl.h库里有定义, man 也可以查看到)

//3 parameter 这个参数 既可以是个函数的指针, 也可以是某个对象的指针,

//也可以是个long型的变量.它用什么这取决于第二个参数.

//CURLoption 这个参数的取值很多.具体的可以查看man手册.

curl_easy_setopt(curl, CURLOPT_URL, strcode.c_str());

curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);

curl_easy_setopt(curl, CURLOPT_TIMEOUT, 2);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, downloadCallback); // set callback function

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &reply);

//描述:这个函数在初始化CURL类型的指针 以及curl_easy_setopt完成后调用.

//就像字面的意思所说perform就像是个舞台.让我们设置的option 运作起来.

//参数: CURL类型的指针.

res = curl_easy_perform(curl);

//描述: 这个调用用来结束一个会话.与curl_easy_init配合着用.

//参数: CURL类型的指针.

curl_easy_cleanup(curl);

/*描述:这个函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用)

如果这个函数在curl_easy_init函数调用时还没调用,它将由libcurl库自动调用,

所以多线程下最好主动调用该函数以防止在线程中curl_easy_init时多次调用。

注意:虽然libcurl是线程安全的,但curl_global_init是不能保证线程安全的,

所以不要在每个线程中都调用curl_global_init,应该将该函数的调用放在主线程中。

参数:flags

CURL_GLOBAL_ALL //初始化所有的可能的调用。

CURL_GLOBAL_SSL //初始化支持 安全套接字层。

CURL_GLOBAL_WIN32 //初始化win32套接字库。

CURL_GLOBAL_NOTHING //没有额外的初始化

*/

curl_global_init(CURL_GLOBAL_ALL);

if (res != CURLE_OK)

cout << "error" << endl;

else strRet = reply;

}

return strRet;

}

//字符分割

std::vector split(const std::string &str, const std::string &pattern)

{

char * strc = new char[strlen(str.c_str()) + 1];

strcpy(strc, str.c_str());

std::vector resultVec;

char* tmpStr = strtok(strc, pattern.c_str());

while (tmpStr != NULL)

{

resultVec.push_back(std::string(tmpStr));

tmpStr = strtok(NULL, pattern.c_str());

}

delete[] strc;

return resultVec;

}

int main()

{

string codeArray[10] = { "600519", "000858", "300011", "600536", "000423",

"002093", "300255", "000333", "600030", "688981" };

vector> allData;

for (int i = 0; i < 10; i++)

{

string result = getCurrnetData(codeArray[i]);

vector data = split(result, "~");

allData.push_back(data);

}

//输出10只个股的即时数据(节选)

cout << "代码 名称 涨幅 现价 开盘价 成交量" << endl;

for (int i = 0; i < allData.size(); i++)

{

cout << allData[i][2]<< " " //代码

<< allData[i][1] << " " //名称

<< allData[i][31] << " " //涨跌幅

<< allData[i][3] << " " //当前价

<< allData[i][5] << " " //开盘价

<< allData[i][6] << " " << endl; //成交量

}

return 0;

}

代码共几十行,(注释来自于网络便于理解),主要由libcurl库实现网络通讯,然后在腾讯股票接口读取即时数据,(度娘有详细接口介绍文章,本处不述。)数据处理后再显示输出。读取的即时数据项很多,只节选了几个展示,本例是读取了10只个股的数据并显示。

显示结果如下图,为2022年3月4日收盘后数据。

C++读取股票即时数据

即时数据

展开阅读全文

页面更新:2024-04-03

标签:数据   开盘价   初始化   线程   指针   函数   名称   参数   类型   代码   股票

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top