REST API komut satırı istemcisi (NodeJS)

Son güncelleme: 31 Ara 2025

NodeJS'deki 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 yönetimi uç noktaları

  • işlem uç noktaları

  • özel fonlama uç noktaları

  • özel staking 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) çağrılabilir.

Kurulum

1. NodeJS'i Kurun (gerekirse).

  • macOS ve Linux'ta NodeJS muhtemelen zaten yüklüdür.

  • Windows'ta NodeJS muhtemelen yüklü değildir, ancak https://www.nodejs.org/ adresinden yüklenebilir.

2. krakenapi.js dosyasını bilgisayarınızda istediğiniz bir klasöre (dizine) indirin ve kaydedin. Örneğin:

Macintosh HD > Kullanıcılar > Satoshi > KrakenAPI


3. Bir komut istemi (macOS'taki Terminal gibi) açın ve önceki adımda seçtiğiniz klasöre (dizine) gidin.

Gezinmek için "cd" komutunu (dizin değiştir) kullanabilirsiniz. Örneğin:

cd /Users/Satoshi/KrakenAPI


4. API anahtarlarınızı krakenapi.js 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ı, 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.

Ek talimatlar için API anahtar çifti nasıl oluşturulur? bölümüne bakın.

Örnek Komutlar

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

bash

Bash

nodejs krakenapi.js endpoint [parameters]

The command line client supports all of the REST API endpoints. Here are a few example commands:

nodejs krakenapi.js Time
nodejs krakenapi.js Ticker pair=xbtusd
nodejs krakenapi.js Trades pair=etheur since=1574067140000000000
nodejs krakenapi.js Balance
nodejs krakenapi.js TradeBalance asset=xbt
nodejs krakenapi.js QueryOrders txid=O7MN22-ZCX7J-TGLQHD
nodejs krakenapi.js AddOrder pair=xbtusd type=buy ordertype=limit price=6500 volume=0.002 leverage=5
nodejs krakenapi.js CancelOrder txid=O7MN22-ZCX7J-TGLQHD

NodeJS Kodu

bash

Bash

const axios = require("axios");
const { clear } = require("console");
const crypto = require("crypto");
const fs = require("fs");

const main = async () => {
  let response = "";
  let apiMethod = "";
  let inputParameters = "";

  const api_private = [
    "Balance",
    "BalanceEx",
    "TradeBalance",
    "OpenOrders",
    "ClosedOrders",
    "QueryOrders",
    "TradesHistory",
    "QueryTrades",
    "OpenPositions",
    "Ledgers",
    "QueryLedgers",
    "TradeVolume",
    "AddExport",
    "ExportStatus",
    "RetrieveExport",
    "RemoveExport",
    "GetWebSocketsToken",
    "AddOrder",
    "AddOrderBatch",
    "EditOrder",
    "CancelOrder",
    "CancelAll",
    "CancelAllOrdersAfter",
    "DepositMethods",
    "DepositAddresses",
    "DepositStatus",
    "WithdrawInfo",
    "Withdraw",
    "WithdrawStatus",
    "WithdrawCancel",
    "WalletTransfer",
    "Staking/Assets",
    "Stake",
    "Unstake",
    "Staking/Pending",
    "Staking/Transactions",
  ];

  const api_public = [
    "Time",
    "Assets",
    "AssetPairs",
    "Ticker",
    "OHLC",
    "Depth",
    "Trades",
    "Spread",
    "SystemStatus",
  ];

  // Destructuring the input command
  if (process.argv.length < 3) {
    apiMethod = "Time";
  } else if (process.argv.length == 3) {
    apiMethod = process.argv[2];
  } else {
    apiMethod = process.argv[2];
    for (count = 3; count < process.argv.length; count++) {
      if (count == 3) {
        inputParameters = process.argv[count];
      } else {
        inputParameters = inputParameters + "&" + process.argv[count];
      }
    }
  }

  // Condition to check the private or public endpoints
  if (api_private.includes(apiMethod)) {
    response = await QueryPrivateEndpoint(apiMethod, inputParameters);

    if (apiMethod == "RetrieveExport") {
      try {
        fs.writeFileSync("Report.zip", response); // write the zip file response
        console.log("Report.zip file successfully received");
      } catch (err) {
        console.log(err);
      }
    } else {
      console.log(response.toString());
    }
  } else if (api_public.includes(apiMethod)) {
    response = await QueryPublicEndpoint(apiMethod, inputParameters);
    console.log(JSON.stringify(response));
  } else {
    console.log("Usage: app method [parameters]");
    console.log("Example: app OHLC pair=xbtusd interval=1440");
  }
};

// Public API Endpoint
async function QueryPublicEndpoint(endPointName, inputParameters) {
  let jsonData;
  const baseDomain = "https://api.kraken.com";
  const publicPath = "/0/public/";
  const apiEndpointFullURL = baseDomain + publicPath + endPointName + "?" + inputParameters;

  await axios
    .get(apiEndpointFullURL)
    .then((res) => {
      jsonData = res;
    })
    .catch((err) => {
      jsonData = err;
    });
  return jsonData.data;
}

// Private API Endpoint
async function QueryPrivateEndpoint(endPointName, inputParameters) {
  const baseDomain = "https://api.kraken.com";
  const privatePath = "/0/private/";

  const apiPublicKey = fs.readFileSync("API_PUBLIC_KEY").toString().trim(); // get data from API_PUBLIC_KEY text file
  const apiPrivateKey = fs.readFileSync("API_PRIVATE_KEY").toString().trim(); // get data from API_PRIVATE_KEY text file

  const apiEndpointFullURL = baseDomain + privatePath + endPointName;
  const nonce = Date.now().toString();
  const apiPostBodyData = "nonce=" + nonce + "&" + inputParameters;

  const signature = CreateAuthenticationSignature(
    apiPrivateKey,
    privatePath,
    endPointName,
    nonce,
    apiPostBodyData
  );
  const httpOptions = {
    headers: { "API-Key": apiPublicKey, "API-Sign": signature },
    responseType: "arraybuffer",
  };

  let jsonData;
  await axios
    .post(apiEndpointFullURL, apiPostBodyData, httpOptions)
    .then((res) => {
      jsonData = res;
    })
    .catch((err) => {
      jsonData = err;
    });

  return jsonData.data;
}

// Authentication algorithm
function CreateAuthenticationSignature(
  apiPrivateKey,
  apiPath,
  endPointName,
  nonce,
  apiPostBodyData
) {
  const apiPost = nonce + apiPostBodyData;
  const secret = Buffer.from(apiPrivateKey, "base64");
  const sha256 = crypto.createHash("sha256");
  const hash256 = sha256.update(apiPost).digest("binary");
  const hmac512 = crypto.createHmac("sha512", secret);
  const signatureString = hmac512
    .update(apiPath + endPointName + hash256, "binary")
    .digest("base64");
  return signatureString;
}

main();

*Staking için uygunluk kriterlerine (coğrafi kısıtlamalar dahil) genel bir bakış burada bulunabilir.

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