REST API komut satırı istemcisi (Python)

Son güncelleme: 1 Nis 2025

Python'daki REST API komut satırı istemcisi, komut satırı (macOS'taki Terminal gibi) aracılığıyla Kraken REST API'sine tam erişim sağlar, bu nedenle programlama bilgisi veya API deneyimi gerekmez.

Tüm REST API özellikleri şunları içerir:

  • genel piyasa verileri uç noktaları

  • özel hesap verileri uç noktaları

  • özel alım satım uç noktaları

  • özel fonlama uç noktaları

  • özel kazanma uç noktaları

Komut satırı istemcisi, bağımsız bir API istemcisi olarak kullanılabilir veya diğer programlardan (Bash betikleri gibi diğer yorumlanmış diller veya C/C++ gibi derlenmiş diller gibi) çağrılabilir.

Kurulum

1. Python 3'ü yükleyin (gerekirse).

  • macOS ve Linux'ta Python 3 zaten yüklü olabilir.

  • Windows'ta Python 3 yüklü olmayabilir, ancak https://www.python.org/ adresinden yüklenebilir.

2. krakenapi.py dosyasını bilgisayarınızda seçtiğiniz bir klasöre (dizine) indirin ve kaydedin.

Örneğin: Macintosh HD > Kullanıcılar > Satoshi > KrakenAPI


3. Bir komut istemi (macOS'un Terminal'i gibi) açın ve önceki adımda seçilen klasöre (dizine) gidin. Dizin değiştirmek için UNIX/Linux "cd" komutunu kullanabilirsiniz.

Örneğin:cd /Users/Satoshi/KrakenAPI


4. krakenapi.py dosyasını çalıştırılabilir yapın.

UNIX/Linux "chmod 755" komutunu (mod değiştirme) kullanabilirsiniz.

Örneğin: chmod 755 krakenapi.py


5. API anahtarınızı krakenapi.py dosyasını sakladığınız aynı klasöre ekleyin.

  • API genel anahtarınızı hesap yönetiminden kopyalayıp "API_Public_Key" adlı düz metin dosyasına yapıştırın.

  • API özel (gizli) anahtarınızı kopyalayıp "API_Private_Key" adlı düz metin dosyasına yapıştırın.

API anahtar çifti oluşturma/yapılandırma talimatları mevcuttur.

API anahtarı, Kraken hesabınıza erişmek için özel API uç noktalarını (bakiye sorguları, emir verme/iptal etme, hesap geçmişi dışa aktarımları vb.) kullanmayı planlıyorsanız gereklidir.

Örnek Komutlar

REST API komut satırı istemcisinin kullanımı aşağıdaki gibidir:

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

Komut satırı istemcisi tüm REST API uç noktalarını destekler, bu nedenle aşağıda sadece birkaç örnek komut bulunmaktadır:

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

Varsayılan olarak, komut satırı istemcisi orijinal API yanıtını (kod aracılığıyla yorumlamaya uygun JSON) çıkaracaktır, ancak ek bir komut satırı argümanı olan -pretty kullanılırsa:

./krakenapi.py TradeBalance asset=shib -pretty

istemci, aynı API yanıtını insan dostu JSON olarak (satır sonları/girintilerle) çıkaracaktır.

Python Kodu:

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)

Daha fazla yardıma mı ihtiyacınız var?