Client en ligne de commande de l'API REST (Python)

Dernière mise à jour : 1 avr. 2025

Le client en ligne de commande de l'API REST en Python permet un accès complet à l'API REST de Kraken via la ligne de commande (comme le Terminal sur macOS), sans nécessiter de connaissances en programmation ou d'expérience en API.

Toutes les fonctionnalités de l'API REST sont accessibles, y compris :

  • les points de terminaison de données de marché publiques

  • les points de terminaison de données de compte privées

  • les points de terminaison de trading privés

  • les points de terminaison de financement privés

  • les points de terminaison de gains privés

Le client en ligne de commande peut être utilisé comme un client API autonome, ou peut être appelé depuis d'autres programmes (tels que d'autres langages interprétés comme les scripts Bash, ou des langages compilés comme C/C++).

Installation

1. Installez Python 3 (si nécessaire).

  • macOS et Linux ont peut-être déjà Python 3 installé.

  • Windows n'a probablement pas Python 3 installé, mais il peut être installé depuis https://www.python.org/.

2. Téléchargez et enregistrez le fichier krakenapi.py sur votre ordinateur dans le dossier (répertoire) de votre choix.

Par exemple : Macintosh HD > Utilisateurs > Satoshi > KrakenAPI


3. Ouvrez une invite de commande (comme le Terminal de macOS), et naviguez jusqu'au dossier (répertoire) choisi à l'étape précédente. Vous pouvez utiliser la commande UNIX/Linux "cd" (changer de répertoire) pour naviguer.

Par exemple :cd /Users/Satoshi/KrakenAPI


4. Rendez le fichier krakenapi.py exécutable.

Vous pouvez utiliser la commande UNIX/Linux "chmod 755" (changer de mode).

Par exemple : chmod 755 krakenapi.py


5. Ajoutez votre clé API au même dossier où vous conservez le fichier krakenapi.py.

  • Copiez/collez votre clé publique API depuis la gestion de compte dans un fichier texte brut nommé "API_Public_Key".

  • Copiez/collez votre clé privée (secrète) API dans un fichier texte brut nommé "API_Private_Key".

Des instructions pour créer/configurer une clé API sont disponibles.

Une clé API n'est nécessaire que si vous prévoyez d'utiliser les points de terminaison API privés pour accéder à votre compte Kraken (tels que les demandes de solde, le placement/l'annulation d'ordres, les exportations d'historique de compte, etc.).

Exemples de commandes

L'utilisation du client en ligne de commande de l'API REST est la suivante :

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

Le client en ligne de commande prend en charge tous les points de terminaison de l'API REST, voici donc quelques exemples de commandes :

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

Par défaut, le client en ligne de commande affichera la réponse API originale (JSON adaptée à l'interprétation via le code), mais si un argument de ligne de commande supplémentaire -pretty est utilisé :

./krakenapi.py TradeBalance asset=shib -pretty

le client affichera alors la même réponse API sous forme de JSON convivial (avec des sauts de ligne/indentations).

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

Besoin d’aide supplémentaire ?