Использование редактора сценариев Google Sheets для доступа к API-интерфейсу Kraken
Я не могу понять, куда идут входы API Kraken. Я использую https://api.kraken.com/0/private/AddOrder в качестве отправной точки. Входные данные включают в себя такие вещи, как: pair = XBTUSD, type = buy, ordertype = limit и т. Д. Я - нуб API, и я понимаю, что это не типичный подход, но я был бы очень признателен за любые рекомендации.
Я успешно использовал API для других целей, таких как получение остатков на счетах. Просто не уверен, где входы подходят. Я не мог понять это из документации здесь https://www.kraken.com/help/api. Я хотел бы использовать конкретный заказ на покупку в качестве учебного примера. т.е. купить 0,003 BTC, пара XBTUSD, лимит 5000 USD...
Соответствующий кусок кода
function buyKraken () {
var path = "/0/private/AddOrder";
var nonce = new Date () * 1000;
var postdata = "nonce=" + nonce;
var signature = getKrakenSignature (path, postdata, nonce);
var url = 'https://api.kraken.com' + path;
var options = {
method: 'post',
headers: {
'API-Key': "###########",
'API-Sign': signature
},
payload: postdata
};
var response = UrlFetchApp.fetch (url, options);
Logger.log(response);
;
}
1 ответ
Для новых людей, которые могут прийти в поисках ответа, я использовал небольшую другую функцию:
function getKrakenSignature (path, postdata, krakenSecretKey, nonce) {
var sha256obj = new jsSHA ("SHA-256", "BYTES");
sha256obj.update (nonce + postdata);
var hash_digest = sha256obj.getHash ("BYTES");
var sha512obj = new jsSHA ("SHA-512", "BYTES");
sha512obj.setHMACKey (krakenSecretKey, "B64");
sha512obj.update (path);
sha512obj.update (hash_digest);
return sha512obj.getHMAC ("B64");
}
Я использовал функцию jsSHA из этого репозитория: https://github.com/Caligatio/jsSHA. Вам просто нужно создать новый файл в скриптах Google и скопировать / вставить исходный текст этого файла: https://raw.githubusercontent.com/Caligatio/jsSHA/master/src/sha.js
Посмотрите этот проект Github для kraken api и перейдите к части примеров.
Часть, которая вам нужна, это одна часть всего кода, пожалуйста, не копируйте и не вставляйте
function QueryPrivate($method, array $request = array())
{
if(!isset($request['nonce'])) {
// generate a 64 bit nonce using a timestamp at microsecond resolution
// string functions are used to avoid problems on 32 bit systems
$nonce = explode(' ', microtime());
$request['nonce'] = $nonce[1] . str_pad(substr($nonce[0], 2, 6), 6, '0');
}
// build the POST data string
$postdata = http_build_query($request, '', '&');
// set API key and sign the message
$path = '/' . $this->version . '/private/' . $method;
$sign = hash_hmac('sha512', $path . hash('sha256', $request['nonce'] . $postdata, true), base64_decode($this->secret), true);
$headers = array(
'API-Key: ' . $this->key, // "your key",
'API-Sign: ' . base64_encode($sign)//your signature
);
// make request
curl_setopt($this->curl, CURLOPT_URL, $this->url . $path);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($this->curl, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($this->curl);
if($result===false)
throw new KrakenAPIException('CURL error: ' . curl_error($this->curl));
// decode results
$result = json_decode($result, true);
if(!is_array($result))
throw new KrakenAPIException('JSON decode error');
return $result;
}
// Add a standard order: buy €300 worth of BTC at market at 2013-08-12T09:27:22+0000
$res = QueryPrivate('AddOrder', array(
'pair' => 'XBTCZEUR',
'type' => 'buy',
'ordertype' => 'market',
'oflags' => 'viqc',
'volume' => '300',
'starttm' => '1376299642'
));
print_r($res);