Client da riga di comando dell'API REST (Python)

Ultimo aggiornamento: 1 apr 2025

Il client da riga di comando dell'API REST in Python consente l'accesso completo all'API REST di Kraken tramite la riga di comando (come il Terminale su macOS), quindi non è richiesta alcuna conoscenza di programmazione o esperienza con le API.

Tutte le funzionalità dell'API REST sono accessibili, tra cui:

  • endpoint pubblici per i dati di mercato

  • endpoint privati per i dati dell'account

  • endpoint privati per il trading

  • endpoint privati per il finanziamento

  • endpoint privati per i guadagni

Il client da riga di comando può essere utilizzato come client API autonomo, oppure può essere richiamato da altri programmi (come altri linguaggi interpretati come gli script Bash, o linguaggi compilati come C/C++).

Installazione

1. Installa Python 3 (se necessario).

  • macOS e Linux potrebbero avere già Python 3 installato.

  • Windows probabilmente non ha Python 3 installato, ma può essere installato da https://www.python.org/.

2. Scarica e salva il file krakenapi.py sul tuo computer nella cartella (directory) di tua scelta.

Ad esempio: Macintosh HD > Utenti > Satoshi > KrakenAPI


3. Apri un prompt dei comandi (come il Terminale di macOS) e naviga nella cartella (directory) scelta nel passaggio precedente. Puoi usare il comando UNIX/Linux "cd" (change directory) per navigare.

Ad esempio:cd /Users/Satoshi/KrakenAPI


4. Rendi eseguibile il file krakenapi.py.

Puoi usare il comando UNIX/Linux "chmod 755" (change mode).

Ad esempio: chmod 755 krakenapi.py


5. Aggiungi la tua chiave API alla stessa cartella in cui stai conservando il file krakenapi.py.

  • Copia/incolla la tua chiave pubblica API dalla gestione dell'account in un file di testo semplice chiamato "API_Public_Key".

  • Copia/incolla la tua chiave privata (segreta) API in un file di testo semplice chiamato "API_Private_Key".

Sono disponibili le istruzioni per la creazione/configurazione di una chiave API.

Una chiave API è necessaria solo se si intende utilizzare gli endpoint API privati per accedere al proprio account Kraken (come richieste di saldo, inserimento/annullamento ordini, esportazioni della cronologia dell'account, ecc.).

Comandi di esempio

L'utilizzo del client da riga di comando dell'API REST è il seguente:

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

Il client da riga di comando supporta tutti gli endpoint dell'API REST, quindi i seguenti sono solo alcuni esempi di comandi:

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

Per impostazione predefinita, il client da riga di comando restituirà la risposta API originale (JSON adatto per l'interpretazione tramite codice), ma se viene utilizzato un argomento aggiuntivo da riga di comando -pretty:

./krakenapi.py TradeBalance asset=shib -pretty

il client restituirà la stessa risposta API come JSON leggibile (con interruzioni di riga/rientri).

Codice 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)

Hai ancora bisogno di aiuto?