Jump to content
juninhogpe

Listar dados de JSON com PHP e Curl

Recommended Posts

Pessoal, estou consumindo uma API com PHP + Curl.

 

Segue abaixo como estão os dados:

 

JSON:

{"odata.metadata":"http:\/\/ip:porta\/api\/sistema\/$metadata#sistema_interno.sistema_interno_cond_pgto_lista","odata.count":2,"value":[{"cond_pgto":466,"codigo":"000","descricao":"DINHEIRO","taxa":null,"tipo_operacao":"A","desconto":0,"tipo_pgto":0},{"condicoes_pgto":820,"codigo":"002","descricao":"MISTA","taxa":null,"tipo_operacao":"A","desconto":null,"tipo_pgto":10}]}

 

chamada PHP:

            $url = 'http://ip:/porta/end_api?$format=json';
            $username = 'usuario'; 
            $password = 'senha';

            $ch  = curl_init();

            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
            curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

            $output = curl_exec($ch);
            $info = curl_getinfo($ch);

            curl_close($ch);

            $lista = json_decode($output, TRUE);

        ?>


         <table>
            <tr><th>Codigo</th></tr>

            <?php
				foreach ($lista['value'] as $lst):
            ?>
             	<tr><td>
                  	<?php echo ($lst['codigo']) ?>
                </td></tr>

            <?php endforeach;?>
		</table>

E quando executo o código tenho o retorno:

Warning: Invalid argument supplied for foreach() in C:\AppServ\www\api\teste.php on line 44

No caso essa linha 44:

foreach ($lista['value'] as $lst):

 

Conseguem me ajudar a entender o por que do erro?

 

Obrigado.

Share this post


Link to post
Share on other sites

@juninhogpe, beleza!
 

Faça o seguinte teste:

<?php

$output= '{"odata.metadata":"http:\/\/ip:porta\/api\/sistema\/$metadata#sistema_interno.sistema_interno_cond_pgto_lista","odata.count":2,"value":[{"cond_pgto":466,"codigo":"000","descricao":"DINHEIRO","taxa":null,"tipo_operacao":"A","desconto":0,"tipo_pgto":0},{"condicoes_pgto":820,"codigo":"002","descricao":"MISTA","taxa":null,"tipo_operacao":"A","desconto":null,"tipo_pgto":10}]}';

$listas = json_decode($output, true);

foreach ($listas['value'] as $lista) {
    echo $lista['codigo'];	
    echo "<br>";
}

/* 
 Saida: 
  000
  002		
*/

A sua iteração esta correta, verifique o valor da variável $output!

Share this post


Link to post
Share on other sites

@EdCesar, obrigado pelo retorno.

 

Do jeito que você fez eu passando o conteúdo dentro do $output, funcionou.

 

Engraçado que no meu output eu chamo assim:

 

$ch  = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

$output = curl_exec($ch);

Estou sem entender como corrigir.

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 Boca
      Pessoas estou tentando receber o retorno do curl, mas não vem nada, e na url exibe normalmente os dados json
       
      <? $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $conteudo = curl_exec($ch); $result = json_decode($conteudo, true); curl_close($ch);  
    • By Francisco455
      Tenho uma requisição curl que não coelta os dados da url que preciso isso é problema da minha hospedagem? do servidor deles? ou algo errado no código abaixo:
      $ch = curl_init(); $chamada = 'http://www.google.nl/'; // FUNCIONA $chamada = 'https://sandbox.clicksign.com'; // NÃO FUNCIONA RETORNA VAZIO // informar URL e outras funções ao CURL curl_setopt($ch, CURLOPT_URL, $chamada); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Acessar a URL e retornar a saída $output = curl_exec($ch); // liberar curl_close($ch); // Imprimir a saída echo $output;  
    • By bruno153
      Pessoal, 
       
      preciso super de uma ajuda com o seguinte problema, eu preciso transformar com o javascript um JSON dessa forma:

      {
        "registros": {
          "valores": [
            {
              "label": "DANILO KATHSON BILRO DE SOUZA",
              "data": [
                {
                  "realizado": "96.51"
                },
                {
                  "realizado": "94.58"
                },
                {
                  "realizado": "89.99"
                },
                {
                  "realizado": "93.38"
                }
              ]
            },
            {
              "label": "FRANCISCO GEILSON RAMALHO",
              "data": [
                {
                  "realizado": "88.94"
                },
                {
                  "realizado": "95.95"
                },
                {
                  "realizado": "94.20"
                },
                {
                  "realizado": "92.36"
                }
              ]
            }
          ]
        }
      }
       
      Para que ele fique dessa forma:

      {
        "registros": {
          "valores": [
            {
              "label": "DANILO KATHSON BILRO DE SOUZA",
              "data": ["96.51", "94.58", "89.99", "93.38"]
              ]
            },
            {
              "label": "FRANCISCO GEILSON RAMALHO",
              "data": ["88.94", "95.95", "94.20", "92.36"
              ]
            }
          ]
        }
      }

      poderiam me dar um caminho de como eu poderia fazer isso?

      Desde já, agradeço muito pelo atenção.
    • By cjlessa
      Boa noite,
      Peço a ajuda de vocês para o seguinte problema:
      Utilizo um script simples para mostrar uma página no meu site. O script é este:
      <?php
      $ch = curl_init();
      $timeout = 5; // set to zero for no timeout
      //curl_setopt ($ch, CURLOPT_URL, "http://151.106.108.82:8080/SAES/TotaisSetor?setor=310900605000024" );
      curl_setopt ($ch, CURLOPT_URL, "https://www.ibge.gov.br/indicadores#variacao-do-pib" );
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
      $file_contents = curl_exec($ch);
      curl_close($ch);// display file
      echo $file_contents;
      ?>
      A página que está comentada é a que quero mostrar. Ela não funciona. A pagina do IBGE é mostrada sem problema.
      Isto ocorre no servidor Linux, na minha máquina com windows e Xamp funciona normalmente. 
      Imagino que seja alguma configuração, mas não consegui encontrar qual é.
      Desde já agradeço.
      Um abraço,
      Carlos Lessa 
    • By Samuel Pietro
      Olá pessoal!

      Preciso da ajuda de vocês no seguinte!
      Tenho um arquivo retornos.json
       
      { "retornos": [ { "id": 1, "sigla": "00", "nome": "Efetuado" }, { "id": 2, "sigla": "01", "nome": "Inválido" }, { "id": 3, "sigla": "02", "nome": "Corrompido" } ] }
      E na minha aplicação feita com CodeIgniter tenho uma consulta que me mostra a sigla que está cadastrada no BD.
       
      foreach ($results as $r) {  $retorno = $r->codRetorno; } 
      Eu preciso que essa consulta ao me retornar a sigla 02 por exemplo o echo apresente o "nome" para tal "sigla" que esta cadastrada no JSON.

      No caso seria a seguinte lógica: 
      if ("$retorno" == JSON["sigla"]){ echo JSON["nome"];  } //ESTE NÃO É UM CÓDIGO VÁLIDO, É APENAS PARA FINS DE ENTENDER A LÓGICA DO QUE EU PRECISO. // PS. ESSA LOGICA PRECISA SER APLICADA DENTRO DE UM FOREACH COM MILHARES DE REGISTROS.
      Como eu posso fazer isso?
       
×

Important Information

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