import json
import websocket
API_KEY = "sk-xxx"
URL = "wss://api.datapush.vip/ws"
def on_open(ws):
"""连接成功后订阅标的"""
print("已连接,开始订阅")
ws.send(json.dumps({
"action": "sub",
"codes": ["sz.002515", "sh.600108"],
"types": ["quote", "depth", "k1", "k5"],
}))
def on_message(ws, message):
"""接收实时推送"""
data = json.loads(message)
print(f"[{data.get('type')}] {data}")
def on_error(ws, error):
print("连接错误:", error)
def on_close(ws, code, msg):
print("连接已关闭")
if __name__ == "__main__":
ws = websocket.WebSocketApp(
URL,
header={"Authorization": f"Bearer {API_KEY}"},
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close,
)
ws.run_forever() # 断线自动重连
const WebSocket = require('ws');
const API_KEY = 'sk-xxx';
const ws = new WebSocket('wss://api.datapush.vip/ws', {
headers: { Authorization: `Bearer ${API_KEY}` }
});
ws.on('open', () => {
console.log('已连接,开始订阅');
ws.send(JSON.stringify({
action: 'sub',
codes: ['sz.002515', 'sh.600108'],
types: ['quote', 'depth', 'k1', 'k5']
}));
});
ws.on('message', (data) => {
const msg = JSON.parse(data.toString());
console.log(`[${msg.type}]`, msg);
});
ws.on('error', (err) => console.error('连接错误:', err));
ws.on('close', () => console.log('连接已关闭'));
const API_KEY = 'sk-xxx';
const ws = new WebSocket('wss://api.datapush.vip/ws', [API_KEY]);
ws.onopen = () => {
console.log('已连接,开始订阅');
ws.send(JSON.stringify({
action: 'sub',
codes: ['sz.002515', 'sh.600108'],
types: ['quote', 'depth', 'k1', 'k5']
}));
};
ws.onmessage = (e) => {
const msg = JSON.parse(e.data);
console.log(`[${msg.type}]`, msg);
};
ws.onerror = (err) => console.error('连接错误:', err);
ws.onclose = () => console.log('连接已关闭');
import java.net.URI;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
public class QuoteClient extends WebSocketClient {
public QuoteClient(URI uri) {
super(uri);
addHeader("Authorization", "Bearer sk-xxx");
}
@Override
public void onOpen(ServerHandshake handshake) {
System.out.println("已连接,开始订阅");
send("{\"action\":\"sub\",\"codes\":[\"sz.002515\",\"sh.600108\"],\"types\":[\"quote\",\"depth\",\"k1\",\"k5\"]}");
}
@Override
public void onMessage(String message) {
System.out.println("收到: " + message);
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("连接已关闭");
}
@Override
public void onError(Exception e) {
e.printStackTrace();
}
public static void main(String[] args) throws Exception {
QuoteClient client = new QuoteClient(new URI("wss://api.datapush.vip/ws"));
client.connect();
}
}
package main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
func main() {
header := http.Header{"Authorization": {"Bearer sk-xxx"}}
conn, _, err := websocket.DefaultDialer.Dial("wss://api.datapush.vip/ws", header)
if err != nil {
log.Fatal("连接失败:", err)
}
defer conn.Close()
log.Println("已连接,开始订阅")
err = conn.WriteMessage(websocket.TextMessage, []byte(
`{"action":"sub","codes":["sz.002515","sh.600108"],"types":["quote","depth","k1","k5"]}`))
if err != nil {
log.Fatal("订阅失败:", err)
}
for {
_, data, err := conn.ReadMessage()
if err != nil {
log.Println("连接已关闭:", err)
return
}
log.Println("收到:", string(data))
}
}
use futures_util::{SinkExt, StreamExt};
use tokio_tungstenite::{connect_async, tungstenite::Message};
#[tokio::main]
async fn main() {
let url = "wss://api.datapush.vip/ws?api_key=sk-xxx";
let (mut ws, _) = connect_async(url).await.expect("连接失败");
ws.send(Message::Text(
r#"{"action":"sub","codes":["sz.002515","sh.600108"],"types":["quote","depth","k1","k5"]}"#.into()
)).await.unwrap();
while let Some(msg) = ws.next().await {
if let Ok(Message::Text(text)) = msg {
println!("收到: {}", text);
}
}
}
# 股票基础信息列表(分页)
curl "https://api.datapush.vip/api/v1/stocks?page=1&page_size=1000" -H "Authorization: Bearer sk-xxx"
# 单只股票基础信息
curl "https://api.datapush.vip/api/v1/stocks/600168" -H "Authorization: Bearer sk-xxx"
# 一分钟K线(前复权,offset/size 分页,offset=0含当日实时数据)
curl "https://api.datapush.vip/api/v1/stocks/600168/minute?offset=0&size=20" -H "Authorization: Bearer sk-xxx"
# 五分钟K线(前复权,offset/size 分页,offset=0含当日实时数据)
curl "https://api.datapush.vip/api/v1/stocks/600168/fiveminute?offset=0&size=60" -H "Authorization: Bearer sk-xxx"
# 日K历史(前复权,offset/size 分页,offset=0含当日实时数据)
curl "https://api.datapush.vip/api/v1/stocks/600168/kline?offset=0&size=100" -H "Authorization: Bearer sk-xxx"
# 量化因子目录
curl "https://api.datapush.vip/api/v1/factors" -H "Authorization: Bearer sk-xxx"
# 量化因子数组(默认自带日K前复权数据,offset/size 分页,offset=0含当日实时数据)
curl "https://api.datapush.vip/api/v1/stocks/600108/factors?offset=0&size=30" -H "Authorization: Bearer sk-xxx"
# 鉴权也支持 X-API-Key: sk-xxx