Search code examples
phpbinance

Binance API - Get Klines for XXX/GBP only


I am calling the Binance Klines API to get current prices.


// Get Assets - ideally I'd just like the currency name (e.g. ETH) rather ETC/BTC

$url = 'https://api.binance.com/api/v3/exchangeInfo';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$result = curl_exec($ch);
curl_close($ch);

$json = json_decode($result);

foreach($json->symbols as $symbol)
{
   // Get prices for teh asset

   $ccode = $symbol->symbol;
   $nurl = 'https://api.binance.com/api/v3/klines?symbol=' . $ccode . '&interval=1m';

   $stime = 1000*(time() - 60); // Time period is the last minute
   $etime = 1000*time();

   $nurl .= '&startTime=' . $stime; 
   $nurl .= '&endTime=' . $etime;
   
   $ch = curl_init($nurl);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_URL, $nurl);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
   $json = curl_exec($ch);
   curl_close($ch);

   if ( $json === "" || $json === "[]" || substr($json, 0, 8) == '{"code":' )
   {
      echo "Not found " . $ccode . " .. skipping <BR>";
      continue;
   }
      
   $arr = explode(",", $json);

   $price = $arr[4];
   $tstamp1 = $arr[6];
   $tstamp = gmdate("Y-m-d\TH:i:s\Z", ($arr[6]/1000));
   echo  $ccode . " " .  $tstamp . " " . $price . "<BR>";
}

The problem is I get all combinations of coin/currency, when I only want the GBP prices for each coin. The full list about times out as it runs for over 5 minutes.

I'd like to just get the price of each coin in GBP.

How can I do that?


Solution

  • You're asking for all the symbols (exchangeInfo) and then getting the candle info (klines) for each symbol (= currency pair).

    You can do so just for the GBP pairs by looking for GBP in the two currencies you're currently iterating on, by adding this to your foreach:

    // rest of the code
    
    foreach($json->symbols as $symbol)
    {
       if ($symbol->baseAsset === "GBP" || $symbol->quoteAsset === "GBP" ) {
    
        // rest of your foreach
           
       }
       
    }
    

    In your foreach you have these three properties under $symbol you can leverage:

    $symbol->symbol    // "ADAGBP"
    $symbol->baseAsset // "ADA"
    $symbol->quoteAsset // "GBP"