Client de linie de comandă REST API (Python)

Ultima actualizare: 1 aprilie 2025

Clientul de linie de comandă REST API în Python permite accesul complet la Kraken REST API prin linia de comandă (cum ar fi Terminal pe macOS), prin urmare nu sunt necesare cunoștințe de programare sau experiență cu API-ul.

Toate funcționalitățile REST API sunt accesibile, inclusiv:

  • endpoint-uri publice de date de piață

  • endpoint-uri private de date de cont

  • endpoint-uri private de tranzacționare

  • endpoint-uri private de finanțare

  • endpoint-uri private de câștig

Clientul de linie de comandă poate fi utilizat ca un client API independent sau poate fi apelat din alte programe (cum ar fi alte limbaje interpretate precum scripturile Bash sau limbaje compilate precum C/C++).

Instalare

1. Instalați Python 3 (dacă este necesar).

  • macOS și Linux au probabil deja Python 3 instalat.

  • Windows probabil nu are Python 3 instalat, dar poate fi instalat de pe https://www.python.org/.

2. Descărcați și salvați fișierul krakenapi.py pe computerul dumneavoastră în folderul (directorul) ales.

De exemplu: Macintosh HD > Users > Satoshi > KrakenAPI


3. Deschideți o linie de comandă (cum ar fi Terminalul macOS) și navigați la folderul (directorul) ales în pasul anterior. Puteți utiliza comanda UNIX/Linux "cd" (change directory) pentru a naviga.

De exemplu:cd /Users/Satoshi/KrakenAPI


4. Faceți fișierul krakenapi.py executabil.

Puteți utiliza comanda UNIX/Linux "chmod 755" (change mode).

De exemplu: chmod 755 krakenapi.py


5. Adăugați cheia API în același folder în care păstrați fișierul krakenapi.py.

  • Copiați/lipiți cheia publică API din gestionarea contului într-un fișier text simplu numit "API_Public_Key".

  • Copiați/lipiți cheia privată (secretă) API într-un fișier text simplu numit "API_Private_Key".

Instrucțiuni pentru crearea/configurarea unei chei API sunt disponibile.

O cheie API este necesară doar dacă intenționați să utilizați endpoint-urile API private pentru a accesa contul dumneavoastră Kraken (cum ar fi interogări de sold, plasarea/anularea ordinelor, exporturi de istoric al contului etc.).

Comenzi exemplu

Utilizarea clientului de linie de comandă REST API este următoarea:

./krakenapi.py endpoint [parameters] [-pretty]

Clientul de linie de comandă acceptă toate endpoint-urile REST API, așa că următoarele sunt doar câteva exemple de comenzi:

python

Python

# Time
./krakenapi.py Time

# Ticker
./krakenapi.py Ticker pair=xbtusd

# Trades
./krakenapi.py Trades pair=etheur since=1574067140000000000

# Balance
./krakenapi.py Balance

# Trade Balance
./krakenapi.py TradeBalance asset=xbt

# Query Orders
./krakenapi.py QueryOrders txid=O7MN22-ZCX7J-TGLQHD

# Add Order
./krakenapi.py AddOrder pair=xbtusd type=buy ordertype=limit price=6500 volume=0.002 leverage=5

# Cancel Order
./krakenapi.py CancelOrder txid=O7MN22-ZCX7J-TGLQHD

În mod implicit, clientul de linie de comandă va afișa răspunsul API original (JSON potrivit pentru interpretare prin cod), dar dacă este utilizat un argument suplimentar de linie de comandă -pretty:

./krakenapi.py TradeBalance asset=shib -pretty

clientul va afișa apoi același răspuns API ca JSON ușor de citit (cu întreruperi de linie/indentări).

Cod Python:

python

Python

#!/usr/bin/env python3

# Kraken Rest API
#
# Usage: ./krakenapi endpoint [parameters]
# Example: ./krakenapi Time
# Example: ./krakenapi OHLC pair=xbtusd interval=1440
# Example: ./krakenapi Balance
# Example: ./krakenapi TradeBalance asset=xdg
# Example: ./krakenapi OpenPositions
# Example: ./krakenapi AddOrder pair=xxbtzusd type=buy ordertype=market volume=0.003 leverage=5

import sys
import time
import base64
import hashlib
import hmac
import urllib.request
import json

api_public = {"Time", "Assets", "AssetPairs", "Ticker", "OHLC", "Depth", "Trades", "Spread", "SystemStatus"}
api_private = {"Balance", "BalanceEx", "TradeBalance", "OpenOrders", "ClosedOrders", "QueryOrders", "TradesHistory", "QueryTrades", "OpenPositions", "Ledgers", "QueryLedgers", "TradeVolume", "AddExport", "ExportStatus", "RetrieveExport", "RemoveExport", "GetWebSocketsToken", "CreateSubaccount", "AccountTransfer"}
api_trading = {"AddOrder", "AddOrderBatch", "EditOrder", "CancelOrder", "CancelOrderBatch", "CancelAll", "CancelAllOrdersAfter","OrderAmends","AmendOrder","ListSubaccounts"}
api_funding = {"DepositMethods", "DepositAddresses", "DepositStatus", "WithdrawMethods", "WithdrawAddresses", "WithdrawInfo", "Withdraw", "WithdrawStatus", "WithdrawCancel", "WalletTransfer"}
api_staking = {"Earn/Strategies", "Earn/Allocations", "Earn/Allocate", "Earn/Deallocate", "Earn/AllocateStatus", "Earn/DeallocateStatus", "Staking/Assets", "Staking/Balance", "Stake", "Unstake", "Staking/Pending", "Staking/Transactions"}

api_domain = "https://api.kraken.com"
api_data = ""

output_format = 0

if len(sys.argv) < 2:
	api_method = "Time"
elif len(sys.argv) == 2:
	api_method = sys.argv[1]
else:
	api_method = sys.argv[1]
	for count in range(2, len(sys.argv)):
		if sys.argv[count] == '-pretty':
			output_format = 1
			continue
		if count == 2:
			api_data = sys.argv[count]
		else:
			api_data = api_data + "&" + sys.argv[count]

if api_method in api_private or api_method in api_trading or api_method in api_funding or api_method in api_staking:
	api_path = "/0/private/"
	api_nonce = str(int(time.time()*1000))
	try:
		api_key = open("API_Public_Key").read().strip()
		api_secret = base64.b64decode(open("API_Private_Key").read().strip())
	except:
		print("API public key and API private (secret) key must be in plain text files called API_Public_Key and API_Private_Key")
		sys.exit(1)
	api_postdata = api_data + "&nonce=" + api_nonce
	api_postdata = api_postdata.encode('utf-8')
	api_sha256 = hashlib.sha256(api_nonce.encode('utf-8') + api_postdata).digest()
	api_hmacsha512 = hmac.new(api_secret, api_path.encode('utf-8') + api_method.encode('utf-8') + api_sha256, hashlib.sha512)
	api_request = urllib.request.Request(api_domain + api_path + api_method, api_postdata)
	api_request.add_header("API-Key", api_key)
	api_request.add_header("API-Sign", base64.b64encode(api_hmacsha512.digest()))
	api_request.add_header("User-Agent", "Kraken REST API")
elif api_method in api_public:
	api_path = "/0/public/"
	api_request = urllib.request.Request(api_domain + api_path + api_method + '?' + api_data)
	api_request.add_header("User-Agent", "Kraken REST API")
else:
	print("Usage: %s method [parameters]" % sys.argv[0])
	print("Example: %s OHLC pair=xbtusd interval=1440" % sys.argv[0])
	sys.exit(1)

try:
	api_reply = urllib.request.urlopen(api_request).read()
except Exception as error:
	print("API call failed (%s)" % error)
	sys.exit(1)

try:
	api_reply = api_reply.decode()
except Exception as error:
	if api_method == 'RetrieveExport':
		sys.stdout.buffer.write(api_reply)
		sys.exit(0)
	print("API response invalid (%s)" % error)
	sys.exit(1)

if '"error":[]' in api_reply:
	print(api_reply if output_format == 0 else json.dumps(json.loads(api_reply), indent = 4))
	sys.exit(0)
else:
	print(api_reply if output_format == 0 else json.dumps(json.loads(api_reply), indent = 4))
	sys.exit(1)

Ai nevoie de mai mult ajutor?