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

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

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

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

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

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

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

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

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

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

ইনস্টলেশন

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

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

  • উইন্ডোজে সম্ভবত 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)

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