REST API কমান্ড লাইন ক্লায়েন্ট (পাইথন)

সর্বশেষ আপডেট: ১ এপ্রি, ২০২৫

পাইথনে REST API কমান্ড লাইন ক্লায়েন্ট কমান্ড লাইনের মাধ্যমে (যেমন macOS-এর টার্মিনাল) Kraken REST API-তে সম্পূর্ণ অ্যাক্সেসের অনুমতি দেয়, তাই কোনো প্রোগ্রামিং জ্ঞান বা API অভিজ্ঞতার প্রয়োজন নেই।

সমস্ত REST API বৈশিষ্ট্যগুলি অ্যাক্সেসযোগ্য, যার মধ্যে রয়েছে:

  • পাবলিক মার্কেট ডেটা এন্ডপয়েন্ট

  • প্রাইভেট অ্যাকাউন্ট ডেটা এন্ডপয়েন্ট

  • প্রাইভেট ট্রেডিং এন্ডপয়েন্ট

  • প্রাইভেট ফান্ডিং এন্ডপয়েন্ট

  • প্রাইভেট আর্ন এন্ডপয়েন্ট

কমান্ড লাইন ক্লায়েন্ট একটি স্বতন্ত্র API ক্লায়েন্ট হিসাবে ব্যবহার করা যেতে পারে, অথবা অন্যান্য প্রোগ্রাম থেকে কল করা যেতে পারে (যেমন ব্যাশ স্ক্রিপ্টের মতো অন্যান্য ইন্টারপ্রেটেড ভাষা, অথবা C/C++ এর মতো কম্পাইল করা ভাষা)।

ইনস্টলেশন

1. Python 3 ইনস্টল করুন (যদি প্রয়োজন হয়)।

  • macOS এবং Linux-এ সম্ভবত Python 3 ইতিমধ্যেই ইনস্টল করা আছে।

  • Windows-এ সম্ভবত Python 3 ইনস্টল করা নেই, তবে এটি https://www.python.org/ থেকে ইনস্টল করা যেতে পারে।

2. আপনার পছন্দের ফোল্ডারে (ডিরেক্টরি) আপনার কম্পিউটারে krakenapi.py ফাইলটি ডাউনলোড এবং সেভ করুন

উদাহরণস্বরূপ: Macintosh HD > Users > Satoshi > KrakenAPI


3. একটি কমান্ড প্রম্পট খুলুন (যেমন macOS-এর টার্মিনাল), এবং পূর্ববর্তী ধাপে নির্বাচিত ফোল্ডারে (ডিরেক্টরি) নেভিগেট করুন। আপনি নেভিগেট করতে UNIX/Linux "cd" কমান্ড (ডিরেক্টরি পরিবর্তন) ব্যবহার করতে পারেন।

উদাহরণস্বরূপ:cd /Users/Satoshi/KrakenAPI


4. krakenapi.py ফাইলটিকে এক্সিকিউটেবল করুন

আপনি UNIX/Linux "chmod 755" কমান্ড (মোড পরিবর্তন) ব্যবহার করতে পারেন।

উদাহরণস্বরূপ: chmod 755 krakenapi.py


5. আপনার API কী সেই একই ফোল্ডারে যোগ করুন যেখানে আপনি krakenapi.py ফাইলটি রাখছেন।

  • আপনার API পাবলিক কী অ্যাকাউন্ট ম্যানেজমেন্ট থেকে কপি/পেস্ট করে "API_Public_Key" নামক একটি প্লেইন টেক্সট ফাইলে রাখুন।

  • আপনার API প্রাইভেট (গোপন) কী কপি/পেস্ট করে "API_Private_Key" নামক একটি প্লেইন টেক্সট ফাইলে রাখুন।

একটি API কী জোড়া তৈরি/কনফিগার করার নির্দেশাবলী উপলব্ধ।

আপনার Kraken অ্যাকাউন্ট অ্যাক্সেস করতে (যেমন ব্যালেন্স অনুসন্ধান, অর্ডার স্থাপন/বাতিল করা, অ্যাকাউন্ট হিস্টরি এক্সপোর্ট ইত্যাদি) যদি আপনি প্রাইভেট API এন্ডপয়েন্ট ব্যবহার করার পরিকল্পনা করেন তবেই একটি API কী প্রয়োজন।

উদাহরণ কমান্ড

REST API কমান্ড লাইন ক্লায়েন্টের ব্যবহার নিম্নরূপ:

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

কমান্ড লাইন ক্লায়েন্ট সমস্ত REST API এন্ডপয়েন্ট সমর্থন করে, তাই নিম্নলিখিতগুলি কয়েকটি উদাহরণ কমান্ড:

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

ডিফল্টরূপে কমান্ড লাইন ক্লায়েন্ট মূল API প্রতিক্রিয়া (কোডের মাধ্যমে ব্যাখ্যা করার জন্য উপযুক্ত JSON) আউটপুট করবে, তবে যদি একটি অতিরিক্ত কমান্ড লাইন আর্গুমেন্ট -pretty ব্যবহার করা হয়:

./krakenapi.py TradeBalance asset=shib -pretty

তাহলে ক্লায়েন্ট একই API প্রতিক্রিয়া মানব-বান্ধব JSON হিসাবে (লাইন ব্রেক/ইনডেন্ট সহ) আউটপুট করবে।

পাইথন কোড:

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)

আরও সাহায্যের প্রয়োজন?