Jump to content
biakelly

Pegando valor de API

Recommended Posts

Meninos, criei esta função em PHP para coletar dados de uma API, consigo fazer funcionar com outras APIs de empresas parecidas mas esta empresa especificamente não trás os dados apontados. Poderiam me ajudar?

 

Código:

$cache_cointrade = 'cointrade';
if (file_exists($cache_cointrade)) {
  if (time() - filemtime($cache_cointrade) > $cachetime) {
    $cache = file_get_contents("https://api.cointradecx.com/public/ticker?market=BTC_BRL");
    file_put_contents($cache_cointrade, $cache);
    $json_cointrade = file_get_contents($cache_cointrade);
  } else {
    $json_cointrade = file_get_contents($cache_cointrade);
  }
} 

$data_coin_trade = json_decode($json_cointrade, true);
$cointrade_price = $data_coin_trade['success']['last'];
$cointrade_volume = $data_coin_trade['success']['vol24h'];
$varcointrade = $cointrade_price * $cointrade_volume;

Talvez o erro esteja aqui:

 

$cointrade_price = $data_coin_trade['success']['last'];
$cointrade_volume = $data_coin_trade['success']['vol24h'];

 

 

Mas não tenho certeza porque não aparece 

Share this post


Link to post
Share on other sites

Oi gente, to desesperada, não stou conseguindo fazer

 

As outras apis funcionaram, só essa que não sobe nem por reza.

 

percebi que nesta api ela traz um colchetes que nas outras não trás:

{"success":true,"result":[{"timestamp":1585166513,"market":"BTC_BRL"}]}

 

nas outras o padrão é assim:

{"success":true,"result":{"timestamp":1585166513,"market":"BTC_BRL"}}

 

 

estou chamando assim nas demais e funciona, mas nesta por conta do colchetes nào trás, será que é isso?

$cointrade_price = $data_coin_trade['result']['last'];
$cointrade_volume = $data_coin_trade['result']['vol24h'];

 

 

 

 

Share this post


Link to post
Share on other sites

Vamos lá!

 

Segue exemplo de retorno da API utilizada:

array(3) {
  ["success"]=>
  bool(true)
  ["message"]=>
  string(0) ""
  ["result"]=>
  array(1) {
    [0]=>
    array(11) {
      ["timestamp"]=>
      int(1585171832)
      ["market"]=>
      string(7) "BTC_BRL"
      ["ask"]=>
      string(10) "35449.9999"
      ["bid"]=>
      string(10) "34450.0001"
      ["last"]=>
      string(10) "34004.0000"
      ["spread"]=>
      string(6) "2.9028"
      ["low24h"]=>
      string(10) "33000.0000"
      ["high24h"]=>
      string(10) "35799.9999"
      ["vol24h"]=>
      string(10) "2.11694748"
      ["quoteVolume"]=>
      string(14) "73242.52739178"
      ["isFrozen"]=>
      int(0)
    }
  }
}

Repare que os dados que você deseja obter estão

dentro de um array, então para você obter o mesmo

deveria fazer algo como no exemplo abaixo:

 

CÓDIGO:

$cointrade_price = $data_coin_trade['result'][0]['last'];
$cointrade_volume = $data_coin_trade['result'][0]['vol24h'];

 

Share this post


Link to post
Share on other sites

Oi ShadowDLL, eu até fiz desta forma, mas como não retornou resultado achei que estava errado fazer assim. Repliquei novamente seu exemplo, mas mesmo assim não retornou os 2 dados que preciso. Estranho, acho que estou errando em algum caminho.

 

 

 

Share this post


Link to post
Share on other sites

Provavelmente o mesmo está ocorrendo

porque você está tentando usar variáveis

que só serão criadas caso o arquivo

cointrade exista...

 

Tente fazer algo assim então:

 

CÓDIGO:

<?php
$cache_cointrade = 'cointrade';

if (file_exists($cache_cointrade)) {
	if (time() - filemtime($cache_cointrade) > $cachetime) {
		$cache = file_get_contents("https://api.cointradecx.com/public/ticker?market=BTC_BRL");
		file_put_contents($cache_cointrade, $cache);
		$json_cointrade = file_get_contents($cache_cointrade);
	} else {
		$json_cointrade = file_get_contents($cache_cointrade);
	}

	$data_coin_trade = json_decode($json_cointrade, true);

	$cointrade_price = $data_coin_trade['result'][0]['last'];
	$cointrade_volume = $data_coin_trade['result'][0]['vol24h'];

	$varcointrade = $cointrade_price * $cointrade_volume;

	echo "<pre>";
	var_dump($data_coin_trade);
	var_dump($cointrade_price);
	var_dump($cointrade_volume);
	var_dump($varcointrade);
} else {
	echo "O arquivo não existe!";
}

 

Share this post


Link to post
Share on other sites

humm, ele traz exatamente o que você falou:

 

array(3) {
  ["success"]=>
  bool(true)
  ["message"]=>
  string(0) ""
  ["result"]=>
  array(1) {
    [0]=>
    array(11) {
      ["timestamp"]=>
      int(1585243457)
      ["market"]=>
      string(7) "BTC_BRL"
      ["ask"]=>
      string(10) "35000.0000"
      ["bid"]=>
      string(10) "33603.0000"
      ["last"]=>
      string(10) "33424.0000"
      ["spread"]=>
      string(6) "4.1574"
      ["low24h"]=>
      string(10) "33000.0000"
      ["high24h"]=>
      string(10) "35480.0001"
      ["vol24h"]=>
      string(10) "2.91135764"
      ["quoteVolume"]=>
      string(15) "100800.96901932"
      ["isFrozen"]=>
      int(0)
    }
  }
}
NULL
NULL
int(0)

 

 

Neste caso como é que trago apenas o valor da linha?

 

["last"]=> string(10) "33424.0000"

e da linha 

["low24h"]=> string(10) "33000.0000"

 

 

No html estou chamando assim:

<td> <?= number_format($cointrade_price, 2, ',', '.') ?></td>

<td><?= number_format($cointrade_volume, 2, ',', '.') ?></td>

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By zuuzu
      Olá, estou desenvolvendo uma api para download de fotos/videos/gif, eu consegui fazer tudo certinho, mas na hora de gerar um link de download aleatório ele gera sempre o mesmo, só gera um link diferente se eu reiniciar o servidor, queria que gerasse um link diferente sempre que eu reiniciasse a página, sem precisar reiniciar o servidor. Tem como alguém me ajudar com isso? *A api está sendo desenvolvida para a automatização de download de fotos/videos/gif*

    • By New Job
      Boa tarde, tenho um site de imobiliária e gostaria de integrar com este sistema.
       
      Documentação API: http://vistasoft.com.br/api/

      Seria para exibir os imóveis no site
      (54) 999350968 (whatsapp).
    • By biakelly
      Oi, tenho uma dúvida para avançar em uma API.
      Preciso somar os valores de todos os endereços exibidos nela. No total deste exemplo tenho 2,484 endereços. A API me deixa exibir no máximo 200 por página
       
      Como exibir total de valores considerando todos endereços
       
      <?php $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://api.trongrid.io/v1/contracts/TFczxzPhnThNSqr5by8tvxsdCFRRz6cPNq/tokens?only_confirmed=true&only_unconfirmed=true&order_by=balance,desc&limit=200", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "Accept: application/json" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }  
    • By augustusdev
      Alguém tem um CPF para teste de API que possua muitos registros de cheque sem fundo, ou seja, que tenha CCF?
    • By isaque_cb2
      Boa noite! gente, eu estou tentando colocar alguma forma de pagamentos no meu app, no caso para que o usuario possa adicionar credito ao mesmo, eu estou fazendo isso com a api da JUNO, porem, tambem quero adicionar PIX como forma de pagamento pois não saio do zero com a juno! alguem aqui ja usou PIX com android studio e pode me explicar como fazer? ja busquei por aulas e tutoriais e nada... Grato!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.