在本文中,我们将通过C++接入贵金属实时行情数据接口,帮助你获取黄金和白银等贵金属的K线数据。我们会使用 libcurl
库进行HTTP请求,并处理API返回的数据。
一、API请求地址
贵金属的实时行情通过如下API获取:
python
https://data.infoway.io/common/batch_kline/{klineType}/{klineNum}/{codes}
// 申请API Key: www.infoway.io
入参说明:
{klineType}
是K线的时间周期,传入不同的值代表不同周期的K线:
1 | 1分钟k线 |
---|---|
2 | 5分钟k线 |
3 | 15分钟k线 |
4 | 30分钟k线 |
5 | 1小时k线 |
6 | 2小时k线 |
7 | 4小时k线 |
8 | 1日k线 |
9 | 1周k线 |
10 | 1月k线 |
11 | 1季k线 |
12 | 1年k线 |
{klineNum}
是需要的K线数量,这个接口支持能查询最近的500根K线。
{codes}
是资产代码,比如黄金是XAUUSD
二、代码示例
假设我们需要查询黄金和白银的1分钟K线,请求地址是:
python
https://data.infoway.io/common/batch_kline/1/2/XAUUSD%2CXAGUSD
// 这个地址能返回黄金和白银最近的2根1分钟K线
完整代码如下:
python
#include <iostream>
#include <string>
#include <curl/curl.h>
// 回调函数,用来接收HTTP响应的数据
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* out) {
size_t total_size = size * nmemb;
out->append((char*)contents, total_size);
return total_size;
}
int main() {
CURL* curl;
CURLcode res;
// 设置 API URL 和请求头
// 申请API Key: www.infoway.io
const std::string api_url = "https://data.infoway.io/common/batch_kline/1/2/XAUUSD%2CXAGUSD";
// 初始化 libcurl
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
// 设置 URL
curl_easy_setopt(curl, CURLOPT_URL, api_url.c_str());
// 设置请求头
struct curl_slist* headers = NULL;
headers = curl_slist_append(headers, "User-Agent: Mozilla/5.0");
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "apiKey: yourApikey");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 存储响应结果
std::string response_string;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_string);
// 发送 GET 请求
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "Curl request failed: " << curl_easy_strerror(res) << std::endl;
} else {
// 输出 HTTP 状态码
long http_code = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);
std::cout << "HTTP code: " << http_code << std::endl;
std::cout << "Message: " << response_string << std::endl;
}
// 清理请求头
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
// 清理 libcurl
curl_global_cleanup();
return 0;
}
三、返回示例
python
{
"ret": 200,
"msg": "success",
"traceId": "43fe7163-abb2-4a59-b6b2-2af4dc8c4141",
"data": [
{
"s": "XAUUSD",
"respList": [
{
"t": "1750177320",
"h": "1950.07400",
"o": "1949.17600",
"l": "1948.17600",
"c": "1950.07400",
"v": "15.0",
"vw": "1950.7220",
"pc": "0.12%",
"pca": "2.78600"
},
{
"t": "1750177260",
"h": "1949.41400",
"o": "1948.28800",
"l": "1948.28800",
"c": "1949.41400",
"v": "10.0",
"vw": "1949.1220",
"pc": "0.03%",
"pca": "0.52400"
}
]
},
{
"s": "XAGUSD",
"respList": [
{
"t": "1750177320",
"h": "25.07400",
"o": "25.17600",
"l": "25.17600",
"c": "25.07400",
"v": "30.0",
"vw": "25.7220",
"pc": "0.10%",
"pca": "0.78600"
},
{
"t": "1750177260",
"h": "25.01400",
"o": "25.04800",
"l": "25.04800",
"c": "25.01400",
"v": "20.0",
"vw": "25.3220",
"pc": "0.02%",
"pca": "0.52400"
}
]
}
]
}
字段说明:
返回的字段包含周期内的高开低收数据,比如我们查询的是1分钟K线,那么返回的数据就是1分钟内的高开低收。
字段名 | 类型 | 必填 | 描述 | 示例值 |
---|---|---|---|---|
t | String | 是 | 成交时间 | 1747382898892 |
h | String | 是 | 最高价 | 18.01 |
o | String | 是 | 开盘价 | 18.01 |
l | String | 是 | 最低价 | 18.01 |
c | String | 是 | 收盘价 | 18.01 |
v | String | 是 | 成交量 | 18000 |
vm | String | 是 | 成交额 | 20000 |
pc | String | 是 | 涨跌幅 | 0.12% |
pca | String | 是 | 涨跌额 | 0.11 |
通过以上步骤,你可以使用C++轻松接入贵金属的实时行情接口,并获取需要的K线数据。该接口也支持WebSocket订阅,实现更低延时的数据查询,具体可用看官网对接文档。希望这个教程能帮助你更好地实现贵金属行情查询。