वेबसॉकेट एपीआई v1 कमांड लाइन क्लाइंट (पायथन)

अंतिम अपडेट: 1 अप्रैल 2025

निम्नलिखित पायथन कोड हमारे एक्सचेंज वेबसॉकेट एपीआई v1 के लिए एक कमांड लाइन एपीआई क्लाइंट लागू करता है। कोड का उपयोग एक स्टैंडअलोन एपीआई क्लाइंट के रूप में किया जा सकता है, या इसे अन्य इंटरप्रेटेड या कंपाइल किए गए प्रोग्रामिंग भाषाओं (बैश, C++, आदि) से कॉल किया जा सकता है।

वेबसॉकेट नेटवर्किंग के लिए मानक पायथन वेबसॉकेट लाइब्रेरी (websocket-client) आवश्यक है, लेकिन किसी अन्य एपीआई लाइब्रेरी/मॉड्यूल की आवश्यकता नहीं है।

वेबसॉकेट एपीआई कमांड लाइन क्लाइंट को krakenws.py के रूप में भी डाउनलोड किया जा सकता है।

सभी सार्वजनिक बाजार डेटा फ़ीड (टिकर, बुक, स्प्रेड, ओएचएलसी, ट्रेड), निजी खाता प्रबंधन फ़ीड (ओपनऑर्डर्स और ओनट्रेड्स), और ट्रेडिंग एंडपॉइंट्स (ऐडऑर्डर, कैंसलऑर्डर, कैंसलऑल) समर्थित हैं।

निजी फ़ीड/एंडपॉइंट्स के लिए, REST API GetWebSocketsToken एंडपॉइंट से टोकन प्राप्त करके एक वेबसॉकेट प्रमाणीकरण टोकन प्रदान किया जाना चाहिए, और फिर टोकन मान को WS_Token नामक एक टेक्स्ट फ़ाइल में कॉपी/पेस्ट किया जाना चाहिए (कमांड लाइन एपीआई क्लाइंट के समान डायरेक्टरी/फ़ोल्डर में)।

उपयोग

  • krakenws.py फ़ीड/एंडपॉइंट [पैरामीटर]

  • ./krakenws.py टिकर XBT/USD ETH/EUR XDG/XBT

  • ./krakenws.py बुक ETH/USD 10

  • ./krakenws.py ओएचएलसी LTC/EUR XBT/USD 60

  • ./krakenws.py ओपनऑर्डर्स

  • ./krakenws.py ओनट्रेड्स

  • ./krakenws.py ऐडऑर्डर पेयर=XBT/USD टाइप=बाय ऑर्डरटाइप=मार्केट वॉल्यूम=0.002 लेवरेज=5

  • ./krakenws.py कैंसलऑर्डर txid=O6L3CW-FD5CZ-NE373X

वेबसॉकेट एपीआई v1 कमांड लाइन क्लाइंट का उपयोग इस प्रकार है: जैसे:

पायथन कोड

#!/usr/bin/env python

# Kraken WebSocket API
#
# उपयोग: ./krakenws.py फ़ीड/एंडपॉइंट [पैरामीटर]
# उदाहरण: ./krakenws.py टिकर XBT/USD
# उदाहरण: ./krakenws.py स्प्रेड XBT/USD XBT/EUR ETH/USD LTC/EUR
# उदाहरण: ./krakenws.py बुक XBT/USD XBT/EUR 10
# उदाहरण: ./krakenws.py ओपनऑर्डर्स
# उदाहरण: ./krakenws.py ओनट्रेड्स
# उदाहरण: ./krakenws.py ऐडऑर्डर पेयर=XBT/EUR टाइप=सेल ऑर्डरटाइप=लिमिट प्राइस=7500 वॉल्यूम=0.125
# उदाहरण: ./krakenws.py कैंसलऑर्डर txid=OADMSD-7AGC3-IMB46A,OD6VRE-HCSPM-CKORER
#
# खाता प्रबंधन और ट्रेडिंग के लिए, एक वैध वेबसॉकेट प्रमाणीकरण टोकन (REST API GetWebSocketsToken एंडपॉइंट से) WS_Token नामक एक सादे टेक्स्ट फ़ाइल में प्रदान किया जाना चाहिए।

import sys
import signal
from websocket import create_connection

def timeoutfunction(signalnumber, frame):
raise KeyboardInterrupt

signal.signal(signal.SIGALRM, timeoutfunction)

api_status = {"ping"}
api_public = {"trade", "book", "ticker", "spread", "ohlc"}
api_private = {"openOrders", "ownTrades", "balances"}
api_trading = {"addOrder", "editOrder", "cancelOrder", "cancelAll", "cancelAllOrdersAfter"}
api_domain_public = "wss://ws.kraken.com/"
api_domain_private = "wss://ws-auth.kraken.com/"
api_symbols = ""
api_number = 0

if len(sys.argv) < 2:
api_feed = "ping"
else:
api_feed = sys.argv[1]

if api_feed in api_status:
api_domain = api_domain_public
api_data = '{"event":"%(feed)s"}' % {"feed":api_feed}
signal.alarm(3)
elif api_feed in api_public:
if len(sys.argv) < 3:
print("Usage: %s feed/endpoint [parameters]" % sys.argv[0])
print("Example: %s ticker XBT/USD" % sys.argv[0])
sys.exit(1)
for count in range(2, len(sys.argv)):
if sys.argv[count].isdecimal() == True:
api_number = int(sys.argv[count])
else:
if len(api_symbols) == 0:
api_symbols += sys.argv[count].upper()
else:
api_symbols += '","' + sys.argv[count].upper()
if api_feed == 'book':
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "depth":%(depth)d}, "pair":["%(symbols)s"]}' % {"feed":api_feed, "symbols":api_symbols, "depth":api_number if api_number != 0 else 10}
elif api_feed == 'ohlc':
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "interval":%(interval)d}, "pair":["%(symbols)s"]}' % {"feed":api_feed, "symbols":api_symbols, "interval":api_number if api_number != 0 else 1}
else:
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s"}, "pair":["%(symbols)s"]}' % {"feed":api_feed, "symbols":api_symbols}
api_domain = api_domain_public
elif api_feed in api_private:
api_domain = api_domain_private
try:
api_token = open("WS_Token").read().strip()
except:
print("WebSocket प्रमाणीकरण टोकन गायब है (WS_Token)")
sys.exit(1)
if len(sys.argv) >= 3:
if api_feed == 'openOrders':
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "ratecounter":%(ratecounter)s, "token":"%(token)s"}}' % {"feed":api_feed, "ratecounter":sys.argv[2].split('=')[1], "token":api_token}
elif api_feed == 'ownTrades':
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "snapshot":%(snapshot)s, "token":"%(token)s"}}' % {"feed":api_feed, "snapshot":sys.argv[2].split('=')[1], "token":api_token}
else:
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "token":"%(token)s"}}' % {"feed":api_feed, "token":api_token}
else:
api_data = '{"event":"subscribe", "subscription":{"name":"%(feed)s", "token":"%(token)s"}}' % {"feed":api_feed, "token":api_token}
elif api_feed in api_trading:
api_domain = api_domain_private
try:
api_token = open("WS_Token").read().strip()
except:
print("WebSocket प्रमाणीकरण टोकन गायब है (WS_Token)")
sys.exit(1)
api_data = '{"event":"%(feed)s", "token":"%(token)s"' % {"feed":api_feed, "token":api_token}
for count in range(2, len(sys.argv)):
if sys.argv[count].split('=')[0] == 'txid':
api_data = api_data + ', "%(name)s":["%(value)s"]' % {"name":sys.argv[count].split('=')[0], "value":sys.argv[count].split('=')[1].replace(',', '","')}
elif sys.argv[count].split('=')[0] == 'reqid':
api_data = api_data + ', "%(name)s":%(value)s' % {"name":sys.argv[count].split('=')[0], "value":sys.argv[count].split('=')[1]}
elif sys.argv[count].split('=')[0] == 'timeout':
api_data = api_data + ', "%(name)s":%(value)s' % {"name":sys.argv[count].split('=')[0], "value":sys.argv[count].split('=')[1]}
else:
api_data = api_data + ', "%(name)s":"%(value)s"' % {"name":sys.argv[count].split('=')[0], "value":sys.argv[count].split('=')[1]}
api_data = api_data + '}'
signal.alarm(3)
else:
print("उपयोग: %s फ़ीड/एंडपॉइंट [पैरामीटर]" % sys.argv[0])
print("उदाहरण: %s टिकर XBT/USD" % sys.argv[0])
sys.exit(1)

try:
ws = create_connection(api_domain)
print("वेबसॉकेट -> क्लाइंट: %s" % ws.recv())
except Exception as error:
print("वेबसॉकेट कनेक्शन विफल (%s)" % error)
sys.exit(1)

try:
print("क्लाइंट -> वेबसॉकेट: %s" % api_data)
ws.send(api_data)
print("वेबसॉकेट -> क्लाइंट: %s" % ws.recv())
except Exception as error:
print("वेबसॉकेट सदस्यता/अनुरोध विफल (%s)" % error)
ws.close()
sys.exit(1)

while True:
try:
print("वेबसॉकेट -> क्लाइंट: %s" % ws.recv())
except KeyboardInterrupt:
ws.close()
sys.exit(0)
except Exception as error:
print("वेबसॉकेट संदेश विफल (%s)" % error)
sys.exit(1)

sys.exit(1)

क्या आपको और मदद चाहिए?