Google Script - REST API privé-eindpunten

Laatst bijgewerkt: 1 apr 2025

Onze geauthenticeerde REST API-eindpunten zijn toegankelijk via een eenvoudig HTTP-verzoek (net zoals een webpagina wordt opgevraagd via een webbrowser), zodat een API-client om marktgegevens in een Google Sheet te importeren kan worden geïmplementeerd met slechts een paar regels Google Script-code.

Installatie

  1. 1

    Maak een nieuwe Google Sheet aan of open een bestaande sheet.

  2. 2

    Open de scripteditor via het menu Extensies -> Apps Script.

  3. 3

    Verwijder de standaardcode die wordt weergegeven (bijvoorbeeld Alles selecteren en vervolgens Verwijderen/Backspace).

  4. 4

    Kopieer/plak de Google Script API-code (hieronder weergegeven) in de scripteditor.

  5. 5

    Werk de voorbeeld-API-sleutel bij om een API-sleutel van uw Kraken-account te gebruiken.

  6. 6

    Optioneel - Voeg eventuele aanvullende aangepaste functies toe die u nodig heeft (bijvoorbeeld om verschillende eindpunten aan te roepen of verschillende JSON-velden terug te geven).

  7. 7

    Sla de Google Script-code op via de

    (pictogram Project opslaan).

    Save Icon

SaveImageIcon

Gebruik

De functie KAPI_Private() is verantwoordelijk voor het aanmaken van de juiste URL, het berekenen van de authenticatiesignatuur en het uitvoeren van het HTTP-verzoek naar de API. De functie KAPI_Private() kan direct worden aangeroepen door het volgende (of iets vergelijkbaars, afhankelijk van de account-ID, het eindpunt en de parameters) in een Google Sheet-cel in te voeren:

bash

Bash

=KAPI_Private("TEST", "Balance", "")

=KAPI_Private("TEST", "TradeBalance", "asset=xdg")

=KAPI_Private("TEST", "OpenOrders", "userref=886794735")

De functie KAPI_Private() retourneert de oorspronkelijke JSON-respons van de API, zoals het volgende voor het bovenstaande voorbeeld van het Saldo-eindpunt:

bash

Bash

{"error":[],"result":{"ZUSD":"16.4272","ZEUR":"0.3880","ZJPY":"0.45","KFEE":"10368.39","XXBT":"0.0000000072","XXRP":"0.00000000","XLTC":"0.0000000100","XXDG":"13997.00000000","XXLM":"100.00000000"}}

Om de individuele velden/waarden in afzonderlijke cellen binnen de Google Sheet te plaatsen, kunnen aanvullende aangepaste functies worden aangeroepen om de JSON-respons te parseren, zoals de voorbeeldfuncties KAPI_Balance() en KAPI_OpenOrders():

  • =KAPI_Balance("TEST")

  • =KAPI_OpenOrders("TEST")

bash

Bash

=KAPI_Balance("TEST")

=KAPI_OpenOrders("TEST")

Dit zou de resultaten weergeven die vergelijkbaar zijn met het volgende, waarbij de gegevens toegankelijk zijn voor alle standaard Google Sheets-functies (SOM, GEMIDDELDE, AANTAL, enz.):

API_GoogleSheetOutputEndpoints_10062020.png

Google Script-code voor privé-eindpunten:

Authenticatiealgoritme:

bash

Bash

API_Public_Key = { 
  'TEST': 'INSERT YOUR API PUBLIC KEY' 
}

API_Private_Key = { 
  'TEST': 'INSERT YOUR API PRIVATE KEY' 
}

function KAPI_Private(acc_id, endpoint, parameters) {
  Utilities.sleep(Math.random() * 100)

  api_key = API_Public_Key[acc_id]
  api_secret = Utilities.base64Decode(API_Private_Key[acc_id])
  api_path = Utilities.newBlob('/0/private/' + endpoint).getBytes()
  api_nonce = Date.now().toString()
  api_post = 'nonce=' + api_nonce + '&' + parameters

  api_sha256 = Utilities.computeDigest(
    Utilities.DigestAlgorithm.SHA_256, 
    api_nonce + api_post
  )
  api_hmac = Utilities.computeHmacSignature(
    Utilities.MacAlgorithm.HMAC_SHA_512, 
    api_path.concat(api_sha256), 
    api_secret
  )
  api_signature = Utilities.base64Encode(api_hmac)

  http_options = {
    'method': 'post', 
    'payload': api_post, 
    'headers': {
      'API-Key': api_key, 
      'API-Sign': api_signature
    }
  }
  http_response = UrlFetchApp.fetch(
    'https://api.kraken.com/0/private/' + endpoint, 
    http_options
  )
  api_data = http_response.getContentText()
  return api_data
}

Om de volgende scripts te gebruiken met het bovenstaande authenticatiealgoritme, voegt u de functie eenvoudigweg toe aan het bovenstaande script.

*Houd er rekening mee dat alle privé-eindpunten de implementatie van het authenticatiealgoritme vereisen.*

Saldo:

bash

Bash

// Formula to use in Excel cell: '=KAPI_Balance("TEST")
function KAPI_Balance(acc_id) {
  acc_balances_json = JSON.parse(
    KAPI_Private(acc_id, 'Balance', '')
  )
  acc_balances = new Array()
  for (name in acc_balances_json['result']) {
    acc_balances.push([
      name, 
      parseFloat(acc_balances_json['result'][name])
    ])
  }
  return acc_balances
}

Uitgebreid saldo:

bash

Bash

// Formula to use in Excel cell: '=KAPI_BalanceEx("TEST")

function KAPI_BalanceEx(acc_id) {
  acc_balances_json = JSON.parse(KAPI_Private(acc_id, 'BalanceEx', ''))
  acc_balances = new Array
  for (name in acc_balances_json['result']) {
    acc_balances.push([
      name,
      parseFloat(acc_balances_json['result'][name]['balance']),
      parseFloat(acc_balances_json['result'][name]['hold_trade']),
      parseFloat(acc_balances_json['result'][name]['credit'] ? acc_balances_json['result'][name]['credit'] : '') || 0,
      parseFloat(acc_balances_json['result'][name]['credit_used'] ? acc_balances_json['result'][name]['credit_used'] : '') || 0
    ]);
  }
  return acc_balances
}

Handelssaldo:

bash

Bash

// Formula to use in Excel cell: '=KAPI_TradeBalance("TEST", "ASSET")'

function KAPI_TradeBalance(acc_id, currency) {
  acc_balances_json = JSON.parse(
    KAPI_Private(acc_id, 'TradeBalance', 'asset=' + currency)
  )
  acc_balances = new Array()
  for (name in acc_balances_json['result']) {
    acc_balances.push([
      name, 
      parseFloat(acc_balances_json['result'][name])
    ])
  }
  return acc_balances
}

Openstaande orders:

bash

Bash

// Formula to use in Excel cell: '=KAPI_Private("TEST","OpenOrders","")'

function KAPI_OpenOrders(acc_id) {
  acc_orders_json = JSON.parse(
    KAPI_Private(acc_id, 'OpenOrders', '')
  )
  acc_orders = new Array()
  for (name in acc_orders_json['result']['open']) {
    acc_orders.push([
      name, 
      acc_orders_json['result']['open'][name]['descr']['pair'], 
      acc_orders_json['result']['open'][name]['descr']['type'], 
      parseFloat(acc_orders_json['result']['open'][name]['descr']['price']), 
      parseFloat(acc_orders_json['result']['open'][name]['vol']), 
      parseFloat(acc_orders_json['result']['open'][name]['vol_exec']), 
      parseFloat(acc_orders_json['result']['open'][name]['opentm'])
    ])
  }
  return acc_orders
}

Gesloten orders:

bash

Bash

// Formula to use in Excel cell: '=KAPI_ClosedOrders("TEST","0")'
// Or =KAPI_PRIVATE("TEST","ClosedOrders","0")

function KAPI_ClosedOrders(acc_id, offset) {
  acc_orders_json = JSON.parse(
    KAPI_Private(acc_id, 'ClosedOrders', 'ofs=' + offset)
  )
  acc_orders = new Array()
  for (name in acc_orders_json['result']['closed']) {
    acc_orders.push([
      name, 
      acc_orders_json['result']['closed'][name]['descr']['pair'], 
      acc_orders_json['result']['closed'][name]['descr']['type'], 
      acc_orders_json['result']['closed'][name]['descr']['ordertype'], 
      acc_orders_json['result']['closed'][name]['descr']['price'], 
      acc_orders_json['result']['closed'][name]['descr']['order'], 
      acc_orders_json['result']['closed'][name]['price'], 
      acc_orders_json['result']['closed'][name]['vol'], 
      acc_orders_json['result']['closed'][name]['vol_exec'], 
      acc_orders_json['result']['closed'][name]['cost'], 
      acc_orders_json['result']['closed'][name]['fee'], 
      acc_orders_json['result']['closed'][name]['status']
    ])
  }
  return acc_orders
}

Handelsgeschiedenis:

bash

Bash

// Formula to be used in Excel cell '=KAPI_TradesHistory("TEST","0")'

function KAPI_TradesHistory(acc_id, offset) {
  acc_trades_json = JSON.parse(KAPI_Private(acc_id, 'TradesHistory', 'ofs=' + offset))
  acc_trades = new Array
for (name in acc_trades_json['result']['trades']) {
  acc_trades.push([
    name,
    acc_trades_json['result']['trades'][name]['ordertxid'],
    acc_trades_json['result']['trades'][name]['postxid'],
    acc_trades_json['result']['trades'][name]['pair'],
    acc_trades_json['result']['trades'][name]['time'],
    acc_trades_json['result']['trades'][name]['type'],
    acc_trades_json['result']['trades'][name]['ordertype'],
    acc_trades_json['result']['trades'][name]['price'],
    acc_trades_json['result']['trades'][name]['cost'],
    acc_trades_json['result']['trades'][name]['fee'],
    acc_trades_json['result']['trades'][name]['vol'],
    acc_trades_json['result']['trades'][name]['margin'],
    acc_trades_json['result']['trades'][name]['leverage'],
    acc_trades_json['result']['trades'][name]['misc'],
    acc_trades_json['result']['trades'][name]['trade_id'],
    acc_trades_json['result']['trades'][name]['maker']
    
  ])
}
return acc_trades
}

Openstaande posities:

bash

Bash

//Formula to use in Excel Cell '=KAPI_Private("TEST", "OpenPositions", "docalcs=true")'

function KAPI_OpenPositions(acc_id) {
  acc_positions_json = JSON.parse(
    KAPI_Private(acc_id, 'OpenPositions', 'docalcs=true')
  )
  acc_positions = new Array()
  for (name in acc_positions_json['result']) {
    acc_positions.push([
      name, 
      acc_positions_json['result'][name]['ordertxid'], 
      acc_positions_json['result'][name]['posstatus'], 
      acc_positions_json['result'][name]['pair'], 
      acc_positions_json['result'][name]['type'], 
      acc_positions_json['result'][name]['ordertype'], 
      acc_positions_json['result'][name]['cost'], 
      acc_positions_json['result'][name]['fee'], 
      acc_positions_json['result'][name]['vol'], 
      acc_positions_json['result'][name]['vol_closed'], 
      acc_positions_json['result'][name]['margin'], 
      acc_positions_json['result'][name]['value'], 
      acc_positions_json['result'][name]['net'], 
      acc_positions_json['result'][name]['time']
    ])
  }
  return acc_positions
}


Grootboeken:

bash

Bash

//Formula to use in Excel Cell '=KAPI_Ledgers("TEST", "0")'


function KAPI_Ledgers(acc_id, offset) {
  acc_ledgers_json = JSON.parse(KAPI_Private(acc_id, 'Ledgers', 'ofs=' + offset))
  acc_ledgers = new Array
  for ( name in acc_ledgers_json['result']['ledger'] ) {
     acc_ledgers.push([name, acc_ledgers_json['result']['ledger'][name]['refid'], acc_ledgers_json['result']['ledger'][name]['time'], acc_ledgers_json['result']['ledger'][name]['type'], acc_ledgers_json['result']['ledger'][name]['subtype'], acc_ledgers_json['result']['ledger'][name]['asset'], acc_ledgers_json['result']['ledger'][name]['amount'], acc_ledgers_json['result']['ledger'][name]['fee'], acc_ledgers_json['result']['ledger'][name]['balance']])
  }
  return acc_ledgers
}

Orderinformatie opvragen:

bash

Bash

// Formula to use in Excel cell '=KAPI_QueryOrders("TEST","Order ID")'

function KAPI_QueryOrders(acc_id, order_id) {
  acc_orders_json = JSON.parse(
    KAPI_Private(acc_id, 'QueryOrders', 'txid=' + order_id)
  )
  acc_orders = new Array()
  for (name in acc_orders_json['result']) {
    acc_orders.push([
      name, 
      acc_orders_json['result'][name]['descr']['pair'], 
      acc_orders_json['result'][name]['descr']['type'], 
      acc_orders_json['result'][name]['descr']['ordertype'], 
      acc_orders_json['result'][name]['descr']['price'], 
      acc_orders_json['result'][name]['descr']['order'], 
      acc_orders_json['result'][name]['price'], 
      acc_orders_json['result'][name]['vol'], 
      acc_orders_json['result'][name]['vol_exec'], 
      acc_orders_json['result'][name]['cost'], 
      acc_orders_json['result'][name]['fee'], 
      acc_orders_json['result'][name]['status']
    ])
  }
  return acc_orders
}

Voorbeeld van een volledige Google Script-functie die het TradesHistory-eindpunt aanroept:

bash

Bash

const API_Public_Key = { 'TEST':'API PUBLIC KEY'}
const API_Private_Key = { 'TEST':'API PRIVATe KEY' }


function KAPI_Private(acc_id, endpoint, parameters) {
  Utilities.sleep(Math.random() * 100)
  
  api_key = API_Public_Key[acc_id]
  api_secret = Utilities.base64Decode(API_Private_Key[acc_id])
  api_path = Utilities.newBlob('/0/private/' + endpoint).getBytes()
  api_nonce = Date.now().toString()
  api_post = 'nonce=' + api_nonce + '&' + parameters
  
  api_sha256 = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, api_nonce + api_post)
  api_hmac = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, api_path.concat(api_sha256), api_secret)
  api_signature = Utilities.base64Encode(api_hmac)
  
  http_options = {'method':'post', 'payload':api_post, 'headers':{'API-Key':api_key, 'API-Sign':api_signature}}
  http_response = UrlFetchApp.fetch('https://api.kraken.com/0/private/' + endpoint, http_options)
  api_data = http_response.getContentText()
  return api_data
}



function KAPI_TradesHistory(acc_id, offset) {
  acc_trades_json = JSON.parse(KAPI_Private(acc_id, 'TradesHistory', 'ofs=' + offset))
  acc_trades = new Array
for (name in acc_trades_json['result']['trades']) {
  acc_trades.push([
    name,
    acc_trades_json['result']['trades'][name]['ordertxid'],
    acc_trades_json['result']['trades'][name]['postxid'],
    acc_trades_json['result']['trades'][name]['pair'],
    acc_trades_json['result']['trades'][name]['time'],
    acc_trades_json['result']['trades'][name]['type'],
    acc_trades_json['result']['trades'][name]['ordertype'],
    acc_trades_json['result']['trades'][name]['price'],
    acc_trades_json['result']['trades'][name]['cost'],
    acc_trades_json['result']['trades'][name]['fee'],
    acc_trades_json['result']['trades'][name]['vol'],
    acc_trades_json['result']['trades'][name]['margin'],
    acc_trades_json['result']['trades'][name]['leverage'],
    acc_trades_json['result']['trades'][name]['misc'],
    acc_trades_json['result']['trades'][name]['trade_id'],
    acc_trades_json['result']['trades'][name]['maker']
    
  ])
}
return acc_trades
}

De decimale en duizendtalscheidingstekens die in dit artikel worden weergegeven, kunnen afwijken van de formaten die op onze handelsplatforms worden weergegeven. Lees ons artikel over hoe we punten en komma's gebruiken voor meer informatie.

test

Meer hulp nodig?