OKEx 指数K线数据API接口调用教程:Java Spring Boot实现

OKEx提供指数K线数据API接口,可获取各种现货指数的K线数据,包括BTC-USD等。每个粒度最多可获取最近1,440条数据。本文将详细介绍如何使用Java Spring Boot框架调用该API接口,并讲解限速规则和代码示例。

接口说明

接口地址:

GET /api/v5/market/index-candles

请求参数:

| 参数名 | 类型 | 是否必须 | 描述 | |---|---|---|---| | instId | String | 是 | 现货指数,如 BTC-USD | | after | String | 否 | 请求此时间戳之前(更旧的数据)的分页内容,传的值为对应接口的ts | | before | String | 否 | 请求此时间戳之后(更新的数据)的分页内容,传的值为对应接口的ts, 单独使用时,会返回最新的数据。 | | bar | String | 否 | 时间粒度,默认值1m 如 [‘1m’, ‘3m’, ‘5m’, ‘15m’, ‘30m’, ‘1H’, ‘2H’, ‘4H’] 香港时间开盘价k线:[‘6H’, ‘12H’, ‘1D’, ‘1W’, ‘1M’, ‘3M’] UTC时间开盘价k线:[‘6Hutc’, ‘12Hutc’, ‘1Dutc’, ‘1Wutc’, ‘1Mutc’, ‘3Mutc’] | | limit | String | 否 | 分页返回的结果集数量,最大为100,不填默认返回100条 |

返回参数:

| 参数名 | 类型 | 描述 | |---|---|---| | ts | String | 开始时间,Unix时间戳的毫秒数格式,如 1597026383085 | | o | String | 开盘价格 | | h | String | 最高价格 | | l | String | 最低价格 | | c | String | 收盘价格 | | confirm | String | K线状态 0 代表 K 线未完结,1 代表 K 线已完结。 |

限速规则

该接口限速20次/2s,限速规则为IP。

代码示例

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.net.URI;
import java.net.URISyntaxException;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;

public class IndexCandlesDataCollector {

    private static final String API_BASE_URL = "https://api.okex.com";

    private static final String API_KEY = "YOUR_API_KEY";
    private static final String API_SECRET = "YOUR_API_SECRET";
    private static final String PASSPHRASE = "YOUR_PASSPHRASE";

    public static void main(String[] args) {
        String instId = "BTC-USD"; // 指数名称,如 BTC-USD
        String bar = "1m"; // 时间粒度,如 1m/5m/15m/30m/1H/4H

        // 获取最新的指数K线数据
        getLatestIndexCandles(instId, bar);

        // 获取指定时间戳之前的指数K线数据
        long beforeTimestamp = Instant.now().toEpochMilli();
        getIndexCandlesBefore(instId, bar, beforeTimestamp);
    }

    private static void getLatestIndexCandles(String instId, String bar) {
        RestTemplate restTemplate = new RestTemplate();

        String url = API_BASE_URL + "/api/v5/market/index-candles?instId={instId}&bar={bar}";
        Map<String, String> params = new HashMap<>();
        params.put("instId", instId);
        params.put("bar", bar);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("OK-ACCESS-KEY", API_KEY);
        headers.set("OK-ACCESS-SIGN", generateSignature());
        headers.set("OK-ACCESS-PASSPHRASE", PASSPHRASE);

        RequestEntity<?> request = new RequestEntity<>(headers, HttpMethod.GET, getUrlWithParams(url, params));

        ResponseEntity<String> response = restTemplate.exchange(request, String.class);
        System.out.println(response.getBody());
    }

    private static void getIndexCandlesBefore(String instId, String bar, long beforeTimestamp) {
        RestTemplate restTemplate = new RestTemplate();

        String url = API_BASE_URL + "/api/v5/market/index-candles?instId={instId}&bar={bar}&before={before}";
        Map<String, String> params = new HashMap<>();
        params.put("instId", instId);
        params.put("bar", bar);
        params.put("before", String.valueOf(beforeTimestamp));

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("OK-ACCESS-KEY", API_KEY);
        headers.set("OK-ACCESS-SIGN", generateSignature());
        headers.set("OK-ACCESS-PASSPHRASE", PASSPHRASE);

        RequestEntity<?> request = new RequestEntity<>(headers, HttpMethod.GET, getUrlWithParams(url, params));

        ResponseEntity<String> response = restTemplate.exchange(request, String.class);
        System.out.println(response.getBody());
    }

    private static URI getUrlWithParams(String url, Map<String, String> params) {
        try {
            URI uri = new URI(url);
            return new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(), getQueryString(params), null);
        } catch (URISyntaxException e) {
            throw new RuntimeException("Invalid URL: " + url, e);
        }
    }

    private static String getQueryString(Map<String, String> params) {
        StringBuilder query = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            if (query.length() > 0) {
                query.append("&");
            }
            query.append(entry.getKey()).append("=").append(entry.getValue());
        }
        return query.toString();
    }

    private static String generateSignature() {
        // 实现签名算法,根据API_SECRET生成签名
        // 参考API文档中的签名算法要求
        return "";
    }
}

请注意,上述代码中的 API_KEYAPI_SECRETPASSPHRASE 需要替换为您自己的API凭证。另外,您还需要实现 generateSignature 方法来生成请求的签名,根据API文档中的签名算法要求进行实现。

总结

本文详细介绍了如何使用Java Spring Boot框架调用OKEx指数K线数据API接口,并讲解了限速规则和代码示例。希望本文能帮助开发者轻松获取指数K线数据。

温馨提示:

  • 在实际应用中,需要根据您的需求进行代码调整和优化。
  • 请务必遵守OKEx API的限速规则,避免对服务造成过大压力。
  • 请妥善保管您的API凭证,避免泄露。
  • 在调用API接口之前,请仔细阅读OKEx API文档,了解最新版本和相关注意事项。
OKEx 指数K线数据API接口调用教程:Java Spring Boot实现

原文地址: https://www.cveoy.top/t/topic/o894 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录