使用Java對接印度股票市場API開發指南
以下是一篇使用Java對接印度股票數據API的技術博客:
使用Java對接印度股票市場API開發指南
StockTV API提供全面的印度股票市場數據接口,本文詳細介紹如何使用Java實現對接,包含核心接口調用和實時數據推送。
一、環境準備
1. 添加依賴
<!-- Apache HttpClient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<!-- Jackson JSON處理器 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
<!-- WebSocket客戶端 -->
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.3</version>
</dependency>
2. 獲取API Key
聯系官方獲取Key:https://t.me/CryptoRzz
二、核心API實現
1. HTTP請求工具類
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class ApiClient {
private static final String BASE_URL = "https://api.stocktv.top";
private static final String API_KEY = "YOUR_API_KEY"; // 替換為實際Key
public static String get(String path, Map<String, String> params) throws Exception {
// 構建請求URL
StringBuilder urlBuilder = new StringBuilder(BASE_URL + path);
urlBuilder.append("?key=").append(API_KEY);
params.forEach((k, v) -> urlBuilder.append("&").append(k).append("=").append(v));
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet request = new HttpGet(urlBuilder.toString());
return EntityUtils.toString(httpClient.execute(request).getEntity());
}
}
}
2. 獲取印度股票列表
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class StockService {
private static final ObjectMapper mapper = new ObjectMapper();
// 獲取NSE交易所股票
public static JsonNode getNseStocks() throws Exception {
Map<String, String> params = new HashMap<>();
params.put("countryId", "14"); // 印度
params.put("exchangeId", "46"); // NSE交易所
params.put("pageSize", "100");
String response = ApiClient.get("/stock/stocks", params);
return mapper.readTree(response);
}
// 解析示例
public static void main(String[] args) throws Exception {
JsonNode data = getNseStocks().get("data");
data.get("records").forEach(stock -> {
System.out.println("股票代碼: " + stock.get("symbol").asText());
System.out.println("最新價格: " + stock.get("last").asDouble());
});
}
}
3. 獲取實時K線數據
public class KlineService {
// 獲取15分鐘K線
public static JsonNode get15mKlines(int pid) throws Exception {
Map<String, String> params = new HashMap<>();
params.put("pid", String.valueOf(pid));
params.put("interval", "PT15M");
String response = ApiClient.get("/stock/kline", params);
return mapper.readTree(response);
}
// 使用示例
public static void main(String[] args) throws Exception {
JsonNode klines = get15mKlines(7310); // 股票ID
klines.get("data").forEach(k -> {
System.out.println("時間: " + new Date(k.get("time").asLong()));
System.out.println("開盤價: " + k.get("open").asDouble());
});
}
}
4. 獲取指數數據
public class IndexService {
// 獲取印度主要指數
public static JsonNode getIndiaIndices() throws Exception {
Map<String, String> params = new HashMap<>();
params.put("countryId", "14");
String response = ApiClient.get("/stock/indices", params);
return mapper.readTree(response);
}
// 解析示例
public static void main(String[] args) throws Exception {
JsonNode indices = getIndiaIndices().get("data");
indices.forEach(index -> {
if ("NSEI".equals(index.get("symbol").asText())) {
System.out.println("Nifty 50: " + index.get("last").asDouble());
}
});
}
}
三、WebSocket實時數據推送
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;
public class StockWebSocket extends WebSocketClient {
public StockWebSocket() {
super(URI.create("wss://ws-api.stocktv.top/connect?key=" + API_KEY));
}
@Override
public void onOpen(ServerHandshake handshake) {
System.out.println("連接已建立");
// 發送初始訂閱消息
send("{\"action\":\"subscribe\",\"pids\":[7310,41602]}");
}
@Override
public void onMessage(String message) {
// 解析實時行情
JsonNode data = mapper.readTree(message);
System.out.println("股票ID: " + data.get("pid").asText());
System.out.println("最新價格: " + data.get("last_numeric").asText());
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("連接關閉: " + reason);
}
@Override
public void onError(Exception ex) {
ex.printStackTrace();
}
// 使用示例
public static void main(String[] args) {
new StockWebSocket().connect();
}
}
四、高級功能實現
1. 漲跌排行榜
public class TopStocksService {
// 獲取漲幅榜
public static JsonNode getTopGainers() throws Exception {
Map<String, String> params = new HashMap<>();
params.put("countryId", "14");
params.put("type", "1"); // 1=漲幅榜
String response = ApiClient.get("/stock/updownList", params);
return mapper.readTree(response);
}
}
2. IPO新股日歷
public class IpoService {
// 獲取即將上市的IPO
public static JsonNode getUpcomingIpos() throws Exception {
Map<String, String> params = new HashMap<>();
params.put("countryId", "14");
params.put("type", "1"); // 1=即將上市
String response = ApiClient.get("/stock/getIpo", params);
return mapper.readTree(response);
}
}
五、最佳實踐建議
-
連接管理
// 使用連接池提高性能 PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(100); // 最大連接數 cm.setDefaultMaxPerRoute(20); // 每個路由最大連接數 -
異常處理
try { JsonNode data = getStockData(); } catch (Exception e) { // 處理API限流(429)等錯誤 if(e instanceof HttpResponseException) { int code = ((HttpResponseException)e).getStatusCode(); if(code == 429) { Thread.sleep(1000); // 等待1秒后重試 } } } -
數據緩存
// 使用Guava緩存 LoadingCache<Integer, JsonNode> stockCache = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.SECONDS) // 10秒緩存 .build(new CacheLoader<Integer, JsonNode>() { public JsonNode load(Integer pid) { return getStockData(pid); } });
六、完整項目結構
src/
├── main/
│ ├── java/
│ │ ├── api/
│ │ │ ├── ApiClient.java # HTTP請求工具
│ │ │ ├── StockService.java # 股票接口
│ │ │ ├── IndexService.java # 指數接口
│ │ │ └── KlineService.java # K線接口
│ │ ├── ws/
│ │ │ └── StockWebSocket.java # WebSocket客戶端
│ │ └── App.java # 主程序
│ └── resources/
└── test/ # 單元測試
七、總結
通過Java對接StockTV API,開發者可以:
- 獲取印度主要交易所(NSE/BSE)的實時行情
- 訂閱1500+印度股票的實時推送
- 訪問歷史K線和基本面數據
- 監控IPO和漲跌排行榜
完整示例代碼:[GitHub倉庫鏈接]
官方文檔:https://stocktv.top/
本文展示了核心功能的Java實現,實際應用中可根據業務需求擴展更多功能模塊。建議生產環境中增加重試機制、監控告警等保障措施。
這篇博客提供了完整的Java實現代碼,包含:
- HTTP API調用封裝
- WebSocket實時數據對接
- 核心數據接口實現
- 最佳實踐建議
- 項目結構指南
開發者可直接復用文中代碼片段快速集成印度股票數據服務。

浙公網安備 33010602011771號