Πελάτης γραμμής εντολών REST API (NodeJS)

Τελευταία ενημέρωση: 31 Δεκεμβρίου 2025

Ο πελάτης γραμμής εντολών REST API σε NodeJS επιτρέπει την πλήρη πρόσβαση στο REST API της Kraken μέσω της γραμμής εντολών (όπως το Terminal σε macOS), επομένως δεν απαιτείται γνώση προγραμματισμού ή εμπειρία API.

Όλες οι λειτουργίες REST API είναι προσβάσιμες, συμπεριλαμβανομένων:

  • δημόσια τελικά σημεία δεδομένων αγοράς

  • ιδιωτικά τελικά σημεία διαχείρισης λογαριασμού

  • τελικά σημεία συναλλαγών

  • ιδιωτικά τελικά σημεία χρηματοδότησης

  • ιδιωτικά τελικά σημεία staking*

Ο πελάτης γραμμής εντολών μπορεί να χρησιμοποιηθεί ως αυτόνομος API client, ή μπορεί να κληθεί από άλλα προγράμματα (όπως άλλες διερμηνευόμενες γλώσσες όπως Bash scripts, ή μεταγλωττισμένες γλώσσες όπως C/C++).

Εγκατάσταση

1. Εγκαταστήστε το NodeJS (αν είναι απαραίτητο).

  • Τα macOS και Linux πιθανότατα έχουν ήδη εγκατεστημένο το NodeJS.

  • Τα Windows πιθανότατα δεν έχουν εγκατεστημένο το NodeJS, αλλά μπορεί να εγκατασταθεί από https://www.nodejs.org/.

2. Κατεβάστε και αποθηκεύστε το αρχείο krakenapi.js στον υπολογιστή σας στον φάκελο (κατάλογο) της επιλογής σας. Για παράδειγμα:

Macintosh HD > Users > Satoshi > KrakenAPI


3. Ανοίξτε μια γραμμή εντολών (όπως το Terminal του macOS), και μεταβείτε στον φάκελο (κατάλογο) που επιλέξατε στο προηγούμενο βήμα.

Μπορείτε να χρησιμοποιήσετε την εντολή "cd" (αλλαγή καταλόγου) για να μεταβείτε. Για παράδειγμα:

cd /Users/Satoshi/KrakenAPI


4. Προσθέστε τα API keys σας στον ίδιο φάκελο όπου διατηρείτε το αρχείο krakenapi.js.

Αντιγράψτε/επικολλήστε το δημόσιο API public key σας από τη διαχείριση λογαριασμού σε ένα απλό αρχείο κειμένου με όνομα "API_PUBLIC_KEY".

Αντιγράψτε/επικολλήστε το ιδιωτικό (μυστικό) API private (secret) key σας σε ένα απλό αρχείο κειμένου με όνομα "API_PRIVATE_KEY".

Ένα API key απαιτείται μόνο αν σκοπεύετε να χρησιμοποιήσετε τα ιδιωτικά API endpoints για πρόσβαση στον λογαριασμό σας στην Kraken (όπως ερωτήματα υπολοίπου, τοποθέτηση/ακύρωση εντολών, εξαγωγές ιστορικού λογαριασμού κ.λπ.).

Δείτε Πώς να δημιουργήσετε ένα ζεύγος API key; για πρόσθετες οδηγίες.

Παραδείγματα εντολών

Η χρήση του πελάτη γραμμής εντολών REST API είναι η εξής:

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

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 μπορεί να βρεθεί εδώ.

Χρειάζεστε περισσότερη βοήθεια;