Cliente de linha de comando da API REST (Python)

Última atualização: 1 de abr. de 2025

O cliente de linha de comando da API REST em Python permite acesso total à API REST da Kraken via linha de comando (como o Terminal no macOS), portanto, nenhum conhecimento de programação ou experiência com API é necessário.

Todos os recursos da API REST estão acessíveis, incluindo:

  • endpoints de dados de mercado públicos

  • endpoints de dados de conta privados

  • endpoints de negociação privados

  • endpoints de financiamento privados

  • endpoints de ganhos privados

O cliente de linha de comando pode ser usado como um cliente de API autônomo, ou pode ser chamado de outros programas (como outras linguagens interpretadas como scripts Bash, ou linguagens compiladas como C/C++).

Instalação

1. Instale o Python 3 (se necessário).

  • macOS e Linux possivelmente já têm o Python 3 instalado.

  • O Windows provavelmente não tem o Python 3 instalado, mas ele pode ser instalado em https://www.python.org/.

2. Baixe e salve o arquivo krakenapi.py em seu computador na pasta (diretório) de sua escolha.

Por exemplo: Macintosh HD > Usuários > Satoshi > KrakenAPI


3. Abra um prompt de comando (como o Terminal do macOS) e navegue até a pasta (diretório) escolhida na etapa anterior. Você pode usar o comando UNIX/Linux "cd" (change directory) para navegar.

Por exemplo:cd /Users/Satoshi/KrakenAPI


4. Torne o arquivo krakenapi.py executável.

Você pode usar o comando UNIX/Linux "chmod 755" (change mode).

Por exemplo: chmod 755 krakenapi.py


5. Adicione sua chave de API à mesma pasta onde você está mantendo o arquivo krakenapi.py.

  • Copie/cole sua chave pública de API do gerenciamento de conta em um arquivo de texto simples chamado "API_Public_Key".

  • Copie/cole sua chave privada (secreta) de API em um arquivo de texto simples chamado "API_Private_Key".

Instruções para criar/configurar um par de chaves de API estão disponíveis.

Uma chave de API só é necessária se você planeja usar os endpoints de API privados para acessar sua conta Kraken (como consultas de saldo, colocação/cancelamento de ordens, exportações de histórico de conta, etc).

Exemplos de Comandos

O uso do cliente de linha de comando da API REST é o seguinte:

./krakenapi.py endpoint [parâmetros] [-pretty]

O cliente de linha de comando suporta todos os endpoints da API REST, então os seguintes são apenas alguns exemplos de comandos:

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

Por padrão, o cliente de linha de comando exibirá a resposta original da API (JSON adequado para interpretação via código), mas se um argumento de linha de comando adicional -pretty for usado:

./krakenapi.py TradeBalance asset=shib -pretty

o cliente então exibirá a mesma resposta da API como JSON amigável (com quebras de linha/indentação).

Código 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)

Precisa de mais ajuda?