OKEx 指数K线数据API接口调用教程:Java Spring Boot实现
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_KEY,API_SECRET 和 PASSPHRASE 需要替换为您自己的API凭证。另外,您还需要实现 generateSignature 方法来生成请求的签名,根据API文档中的签名算法要求进行实现。
总结
本文详细介绍了如何使用Java Spring Boot框架调用OKEx指数K线数据API接口,并讲解了限速规则和代码示例。希望本文能帮助开发者轻松获取指数K线数据。
温馨提示:
- 在实际应用中,需要根据您的需求进行代码调整和优化。
- 请务必遵守OKEx API的限速规则,避免对服务造成过大压力。
- 请妥善保管您的API凭证,避免泄露。
- 在调用API接口之前,请仔细阅读OKEx API文档,了解最新版本和相关注意事项。
原文地址: https://www.cveoy.top/t/topic/o894 著作权归作者所有。请勿转载和采集!