Nuestros endpoints privados de API REST (https://www.kraken.com/features/api#private-user-data) son accesibles a través de una solicitud HTTP simple (de la misma forma en que se solicita una página web en un navegador), con el fin de que se pueda implementar un cliente API para importar datos del mercado en una hoja de cálculo de Google con solo unas cuantas líneas de código Script de Google (#code).
Instalación
Cree una hoja de cálculo de Google nueva o abra una existente.
Abra el editor de script a través del menú Herramientas -> Editor de secuencias de comandos.
Borre el código predeterminado que encuentra (Seleccionar todo luego Borrar, por ejemplo).
Copie/Pegue el código API del script de Google (que se muestra en la parte inferior) en el editor de script.
Actualice el ejemplo de API key para usar una API key de su cuenta de Kraken. (https://support.kraken.com/hc/articles/360000919966)
Opcional - Agregue las funciones personalizadas adicionales que requiera (para llamar endpoints diferentes, o devolver diferentes campos JSON, por ejemplo).
Guarde el Código Script de Google a través del menú Archivo -> Guardar o el ícono .
Uso
La función KAPI_Private() es responsable de crear la URL apropiada, calculando la firma de autenticación (https://support.kraken.com/hc/articles/360029054811), y realizando la solicitud HTTP para la API. La función KAPI_Private() puede ser llamada directamente ingresando lo siguiente (o similar dependiendo del ID de la cuenta, el endpoint, y los parámetros) dentro de una celda de la hoja de cálculo de Google:
=KAPI_Private("TEST", "Balance", "")
=KAPI_Private("TEST", "TradeBalance", "asset=xdg")
=KAPI_Private("TEST", "OpenOrders", "userref=886794735")
La función KAPI_Private() regresa la respuesta JSON original de la API, como la siguiente, para el ejemplo de endpoint Balance anterior:
{"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"}}
Con el fin de ubicar los campos/valores individuales en celdas separadas dentro de la hoja de cálculo de Google, las funciones personalizadas adicionales pueden ser llamadas para analizar la respuesta JSON, como el ejemplo KAPI_Balance() y las funciones KAPI_OpenOrders():
=KAPI_Balance("TEST")
=KAPI_OpenOrders("TEST")
Esto mostraría los resultados de forma similar a los siguientes, donde los datos estarían accesibles para cualquiera de las funciones de las hojas de cálculo de Google estándares (SUM, AVERAGE, COUNT, etc.):
Código Script de Google
API_Public_Key = { 'TEST':'IqU1I8OPDz7dtYH7GtloZBVtcx3ECEoHTfmcW7uPGQ3wqnS/CSZ3xEiu' }API_Private_Key = { 'TEST':'tLIpe3J1uXtzUtbrfFDRIQknuXftfU+D6K4twaeG8Qn4CogW/Y86y8ZU3kmnTOL2mKa03/o5WeKCkpUjCay84w==' }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 + '&' + parametersapi_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_Balance(acc_id) {acc_balances_json = JSON.parse(KAPI_Private(acc_id, 'BalanceEx', ''))acc_balances = new Arrayfor ( name in acc_balances_json['result'] ) {acc_balances.push([name, parseFloat(acc_balances_json['result'][name]['balance'])])}return acc_balances}function KAPI_OpenOrders(acc_id) {acc_orders_json = JSON.parse(KAPI_Private(acc_id, 'OpenOrders', ''))acc_orders = new Arrayfor ( 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}