Klien baris perintah REST API (NodeJS)

Terakhir dikemas kini: 31 Disember 2025

Klien baris perintah REST API dalam NodeJS membenarkan akses penuh kepada REST API Kraken melalui baris perintah (seperti Terminal di macOS), oleh itu tiada pengetahuan pengaturcaraan atau pengalaman API diperlukan.

Semua ciri REST API boleh diakses termasuk:

  • titik akhir data pasaran awam

  • titik akhir pengurusan akaun peribadi

  • titik akhir dagangan

  • titik akhir pendanaan peribadi

  • titik akhir staking peribadi*

Klien baris perintah boleh digunakan sebagai klien API kendiri, atau boleh dipanggil daripada program lain (seperti bahasa ditafsir lain seperti skrip Bash, atau bahasa dikompilasi seperti C/C++).

Pemasangan

1. Pasang NodeJS (jika perlu).

  • macOS dan Linux mungkin sudah mempunyai NodeJS terpasang.

  • Windows mungkin tidak mempunyai NodeJS terpasang, tetapi ia boleh dipasang dari https://www.nodejs.org/.

2. Muat turun dan simpan fail krakenapi.js ke komputer anda dalam folder (direktori) pilihan anda. Contohnya:

Macintosh HD > Users > Satoshi > KrakenAPI


3. Buka command prompt (seperti Terminal macOS), dan navigasi ke folder (direktori) yang dipilih dalam langkah sebelumnya.

Anda boleh menggunakan perintah "cd" (change directory) untuk navigasi. Contohnya:

cd /Users/Satoshi/KrakenAPI


4. Tambah kunci API anda ke folder yang sama di mana anda menyimpan fail krakenapi.js.

Salin/tampal kunci awam API anda dari pengurusan akaun ke dalam fail teks biasa yang dipanggil "API_PUBLIC_KEY".

Salin/tampal kunci peribadi (rahsia) API anda ke dalam fail teks biasa yang dipanggil "API_PRIVATE_KEY".

Kunci API hanya diperlukan jika anda bercadang untuk menggunakan titik akhir API peribadi untuk mengakses akaun Kraken anda (seperti pertanyaan baki, meletakkan/membatalkan pesanan, eksport sejarah akaun, dsb).

Lihat Bagaimana untuk menjana pasangan kunci API? untuk arahan tambahan.

Contoh Perintah

Penggunaan klien baris perintah REST API adalah seperti berikut:

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

Kod 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();

*Gambaran keseluruhan kriteria kelayakan (termasuk sekatan geografi) untuk staking boleh didapati di sini.

Perlu bantuan lebih lanjut?