API Documentation
- Introduction
- Messages
- Authentication
Connection Types
- MLink REST API
- MLink Websocket API
Data Dictionary
Clients
- Python
- C++ and C#
Interactive Playground
- Real Time
- Delayed
Postman for WebSocket
MLink Websocket API
Protocol usage
Protocol Usage
JSON
Standard JSON, each websocket frame can only contain one JSON message at a time.
Import Classes:
import asyncio
import json
import time
import websockets
import nest_asyncio
import threading
import datetime
nest_asyncio.apply()
Authentication:
uriJson = "wss://mlink-live.nms.saturn.spiderrockconnect.com/mlink/json"
apiKey = 'your api key'
password = 'your password'
api_key_token = f"{apiKey}.{password}"
Asynchronously query AAPL:
async def recv_msg(websocket):
buffer = await websocket.recv()
parts = list(filter(None, buffer.split(b'\r\n')))
for msg in parts:
result = json.loads(msg)
print(result, '\n')
return True
async def query_mlink(api_key_token):
retry = True
while retry:
try:
async with websockets.connect(
uriJson,
extra_headers={"Authorization": f"Bearer {api_key_token}"},
ping_timeout=None
) as websocket:
msg = {
"header": {
"mTyp": "MLinkStream"
},
"message": {
"queryLabel": "ExampleStockNbbo",
"activeLatency": 1, #stream
"msgName": "StockBookQuote",
"where":"ticker.tk:eq:AAPL | ticker.at:eq:EQT | ticker.ts:eq:NMS"
}
}
t = time.time_ns()
tstr = '.'.join([time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(t / 1000000000)), "%06d" % ((t / 1000) % 1000000)])
msg['header']['sTim'] = tstr
msg['header']['encT'] = tstr
smsg = json.dumps(msg)
await websocket.send(smsg)
notDone = True
while notDone:
notDone = await recv_msg(websocket)
retry = False
except asyncio.exceptions.TimeoutError:
print("timeout occurred, retrying...")
Framed JSON
SpiderRock JSON with protobuf-like header.
Same as JSON above, except for the parser:
async def query_mlink(api_key_token):
retry = True
while retry:
try:
async with websockets.connect(
uriJson,
extra_headers={"Authorization": f"Bearer {api_key_token}"},
ping_timeout=None
) as websocket:
msg = {
"header": {
"mTyp": "MLinkStream"
},
"message": {
"queryLabel": "ExampleStockNbbo",
"activeLatency": 1, #stream
"msgName": "StockBookQuote",
"where":"ticker.tk:eq:AAPL & ticker.at:eq:EQT & ticker.ts:eq:NMS"
}
}
t = time.time_ns()
tstr = '.'.join([time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(t/1000000000)),"%06d"%((t/1000)%1000000)])
msg['header']['sTim'] = tstr
msg['header']['encT'] = tstr
smsg = json.dumps(msg)
jmsg = ''.join(['\r\nJ', '%011d'%len(smsg), smsg]) #header
await websocket.send(jmsg)
notDone = True
while notDone:
buffer = await websocket.recv()
parts = list(filter(None,buffer.split(b'\r\n')))
for msg in parts:
result = json.loads(msg[12:])
print(result, '\n')
except asyncio.exceptions.TimeoutError:
print("timeout occurred, retrying...")
On this page