Post
Topic
Board Beginners & Help
Re: Kraken API help
by
km92
on 19/11/2013, 12:52:37 UTC
I have figured out most of the code, this is what I have at the moment:

KrakenAPIClient.php

Code:
/**
 * Reference implementation for Kraken's REST API.
 *
 * See https://www.kraken.com/help/api for more info.
 *
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2013 Payward, Inc
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

class KrakenAPIException extends ErrorException {};

class 
KrakenAPI
{
    protected 
$key;     // API key
    
protected $secret;  // API secret
    
protected $url;     // API base URL
    
protected $version// API version
    
protected $curl;    // curl handle

    /**
     * Constructor for KrakenAPI
     *
     * @param string $key API key
     * @param string $secret API secret
     * @param string $url base URL for Kraken API
     * @param string $version API version
     * @param bool $sslverify enable/disable SSL peer verification.  disable if using beta.api.kraken.com
     */
    
function __construct($key$secret$url='https://api.kraken.com'$version='0'$sslverify=true)
    {
        
$this->key $key;
        
$this->secret $secret;
        
$this->url $url;
        
$this->version $version;
        
$this->curl curl_init();

        
curl_setopt_array($this->curl, array(
            
CURLOPT_SSL_VERIFYPEER => $sslverify,
            
CURLOPT_SSL_VERIFYHOST => 2,
            
CURLOPT_USERAGENT => 'Kraken PHP API Agent',
            
CURLOPT_POST => true,
            
CURLOPT_RETURNTRANSFER => true)
        );
    }

    function 
__destruct()
    {
        
curl_close($this->curl);
    }

    
/**
     * Query public methods
     *
     * @param string $method method name
     * @param array $request request parameters
     * @return array request result on success
     * @throws KrakenAPIException
     */
    
function QueryPublic($method, array $request = array())
    {
        
// build the POST data string
        
$postdata http_build_query($request'''&');

        
// make request
        
curl_setopt($this->curlCURLOPT_URL$this->url '/' $this->version '/public/' $method);
        
curl_setopt($this->curlCURLOPT_POSTFIELDS$postdata);
        
curl_setopt($this->curlCURLOPT_HTTPHEADER, array());
        
$result curl_exec($this->curl);
        if(
$result===false)
            throw new 
KrakenAPIException('CURL error: ' curl_error($this->curl));

        
// decode results
        
$result json_decode($resulttrue);
        if(!
is_array($result))
            throw new 
KrakenAPIException('JSON decode error');

        return 
$result;
    }

    
/**
     * Query private methods
     *
     * @param string $path method path
     * @param array $request request parameters
     * @return array request result on success
     * @throws KrakenAPIException
     */
    
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], 26), 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'] . $postdatatrue), base64_decode($this->secret), true);
        
$headers = array(
            
'API-Key: ' $this->key,
            
'API-Sign: ' base64_encode($sign)
        );

        
// make request
        
curl_setopt($this->curlCURLOPT_URL$this->url $path);
        
curl_setopt($this->curlCURLOPT_POSTFIELDS$postdata);
        
curl_setopt($this->curlCURLOPT_HTTPHEADER$headers);
        
$result curl_exec($this->curl);
        if(
$result===false)
            throw new 
KrakenAPIException('CURL error: ' curl_error($this->curl));

        
// decode results
        
$result json_decode($resulttrue);
        if(!
is_array($result))
            throw new 
KrakenAPIException('JSON decode error');

        return 
$result;
    }
}

And

kraken.php

Code:

require_once 'KrakenAPIClient.php';
$kraken = new KrakenAPI('MY API''MY SECRET'); 

$res $kraken->QueryPublic('Ticker', array('pair' => 'XXBTZEUR'));

print_r($res);

This php returns the following:

Code:
Array ( [error] => Array ( ) [result] => Array ( [XXBTZEUR] => Array ( [a] => Array ( [0] => 420.00000 [1] => 16 ) [b] => Array ( [0] => 390.00000 [1] => 2 ) [c] => Array ( [0] => 390.00000 [1] => 0.14774000 ) [v] => Array ( [0] => 199.99938193 [1] => 362.02487469 ) [p] => Array ( [0] => 476.40104 [1] => 464.88570 ) [t] => Array ( [0] => 403 [1] => 746 ) [l] => Array ( [0] => 370.00000 [1] => 370.00000 ) [h] => Array ( [0] => 551.79970 [1] => 551.79970 ) [o] => 498.00000 ) ) )

And I want to get only the a variable, in this case it would be 420.00000

Please, can anybody tell me how I can do this?