C++如何查询实时贵金属行情 
                                                    
                        
                    
                    
  
                    
                    在本文中,我们将通过C++接入贵金属实时行情数据接口,帮助你获取黄金和白银等贵金属的K线数据。我们会使用 libcurl 库进行HTTP请求,并处理API返回的数据。
一、API请求地址
贵金属的实时行情通过如下API获取:
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线,请求地址是:
https://data.infoway.io/common/batch_kline/1/2/XAUUSD%2CXAGUSD
// 这个地址能返回黄金和白银最近的2根1分钟K线
完整代码如下:
#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;
}
三、返回示例
{
  "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订阅,实现更低延时的数据查询,具体可用看官网对接文档。希望这个教程能帮助你更好地实现贵金属行情查询。
本作品采用《CC 协议》,转载必须注明作者和本文链接
          
          
          
                关于 LearnKu