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 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?
       
    • By ghlevin
      Possuo uma Console Application em C# que faz a extração de dados do Dynamics 365 Customer Voice, da Microsoft. O código abaixo pega dados de tabelas de Projetos, Pesquisas, Perguntas e Respostas respectivamente. Os dados extraídos vão para arquivos JSON que ficam salvos no meu HD.
          using Microsoft.Xrm.Sdk;     using Microsoft.Xrm.Sdk.Query;     using System;     using System.Collections.Generic;     using System.Linq;     using System.Text;     using UmbracoMVC.App_Code.Infrastructure.CRMIntegration.Business;     using System.IO;     using Microsoft.Crm.Sdk.Messages;     using System.Globalization;     using E2BWorkflow.Classes;     using System.Web.Management;     using System.ServiceModel;     using System.Drawing;     using System.Web.UI.WebControls;     using System.Web.Script.Serialization;            namespace ConsoleApplication1     {         class Program         {             static void Main(string[] args)             {                 GetCustomerVoice();             }                  public static void GetCustomerVoice()             {                 IOrganizationService crmServiceTo;                      crmServiceTo = Connect.Crm("myemail@e-mail.com", "mypassword", "https://mydynamics.crm4.dynamics.com/XRMServices/2011/Organization.svc");                      // Get Projects                 QueryExpression qP = new QueryExpression("msfp_project");                 qP.ColumnSet = new ColumnSet(true);                 var projects = crmServiceTo.RetrieveMultiple(qP);                 foreach (var p in projects.Entities)                 {                     msfp_project project = p.ToEntity<msfp_project>();                 }                 var projectsList = projects.Entities.Select(                     s => new {                         msfp_projectId = s.Attributes["msfp_projectid"],                         msfp_name = s.Attributes["msfp_name"]                     }                 ).ToList();                      var jsonSerialiser = new JavaScriptSerializer();                 var json = jsonSerialiser.Serialize(projectsList);                 System.IO.File.WriteAllText(@"C:\MyDirectory\projects.json", json);                      // Get Surveys                 QueryExpression qS = new QueryExpression("msfp_survey");                 qS.ColumnSet = new ColumnSet(true);                 var surveys = crmServiceTo.RetrieveMultiple(qS);                 foreach (var s in surveys.Entities)                 {                     msfp_survey survey = s.ToEntity<msfp_survey>();                 }                 var surveysList = surveys.Entities.Select(                     s => new {                         msfp_surveyId = s.Attributes["msfp_surveyid"],                         msfp_name = s.Attributes.Contains("msfp_name") ? s.GetAttributeValue<string>("msfp_questiontext") : "",                         msfp_anonymousurl = s.Attributes.Contains("msfp_anonymousurl") ? s.GetAttributeValue<string>("msfp_anonymousurl") : "",                         msfp_friendlyname = s.Attributes.Contains("msfp_friendlyname") ? s.GetAttributeValue<string>("msfp_friendlyname") : "",                         msfp_surveyurl = s.Attributes.Contains("msfp_surveyurl") ? s.GetAttributeValue<string>("msfp_surveyurl") : "",                         msfp_projectId = s.Attributes.Contains("msfp_project") && s.GetAttributeValue<EntityReference>("msfp_project").Id != null ? s.GetAttributeValue<EntityReference>("msfp_project").Id : Guid.Empty                     }                 ).ToList();                      jsonSerialiser = new JavaScriptSerializer();                 json = jsonSerialiser.Serialize(surveysList);                 System.IO.File.WriteAllText(@"C:\MyDirectory\surveys.json", json);                      // Get Questions                 QueryExpression qQ = new QueryExpression("msfp_question");                 qQ.ColumnSet = new ColumnSet(true);                 var questions = crmServiceTo.RetrieveMultiple(qQ);                 foreach (var q in questions.Entities)                 {                     msfp_question question = q.ToEntity<msfp_question>();                 }                 var questionsList = questions.Entities.Select(                     s => new {                         msfp_questionId = s.Attributes["msfp_questionid"],                         msfp_questionText = s.Attributes.Contains("msfp_questiontext") ? s.GetAttributeValue<string>("msfp_questiontext") : "",                         msfp_surveyId = s.Attributes.Contains("msfp_survey") && s.GetAttributeValue<EntityReference>("msfp_survey").Id != null ? s.GetAttributeValue<EntityReference>("msfp_survey").Id : Guid.Empty                     }                 ).ToList();                      jsonSerialiser = new JavaScriptSerializer();                 json = jsonSerialiser.Serialize(questionsList);                 System.IO.File.WriteAllText(@"C:\MyDirectory\questions.json", json);                      //Get Question Responses                 QueryExpression qR = new QueryExpression("msfp_questionresponse");                 qR.ColumnSet = new ColumnSet(true);                 var responses = crmServiceTo.RetrieveMultiple(qR);                 foreach (var r in responses.Entities)                 {                     msfp_questionresponse response = r.ToEntity<msfp_questionresponse>();                 }                      var responsesList = responses.Entities.Select(                     s => new {                         msfp_questionresponseId = s.Attributes["msfp_questionresponseid"],                         msfp_questionresponse = s.Attributes["msfp_name"],                         msfp_questionId = s.GetAttributeValue<EntityReference>("msfp_questionid").Id                     }                 ).ToList();                      jsonSerialiser = new JavaScriptSerializer();                 json = jsonSerialiser.Serialize(responsesList);                 System.IO.File.WriteAllText(@"C:\MyDirectory\responses.json", json);                      Console.WriteLine("END");                 Console.ReadKey();             }         }     } Agora o que eu preciso é que esses JSONs sejam salvos dentro de um contêiner de um blob em uma Conta de Armazenamento Azure. Procurei várias soluções na Internet, mas não estou bem certo do que deveria usar em uma Console Application.
×

Important Information

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