Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandrephp

ler dados xml ou json com php

Recommended Posts

olá, esse é meu primeiro trabalho com leitura xml, ou json.

tenho uma url da google matrix, preciso pegar os dados de retorno em php e enviar para o banco de dados mysql. 

a minha unico problema é, não consigo fazer a leitura.

segue o codigo abaixo, se puder me ajudar agradeço muito. 

meu email:  alexsodre@MSN.com

<?
$urlApi = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=04942040&destinations=04942060&mode=driving&language=fr-FR&key=minhachave";

$result = file_get_contents($urlApi);
$data = json_decode($result, true)
?>

<?

echo $data['rows'][0]['elements'][0]['distance']['text']

?>

 

fiz o teste com esse codigo tb não consegui.


<?php
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=44311&destinations=45735&key=minha chave";

    //fetch json response from googleapis.com:
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = json_decode(curl_exec($ch), true);
    //If google responds with a status of OK
    //Extract the distance text:
    if($response['status'] == "OK"){
        $dist = $response['rows'][0]['elements'][0]['distance']['text'];
        echo $dist;
    }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tetsuo modifiquei o codigo conforme você me falou, mas o resultado continua como NULL

<?

$urlApi = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=04942040&destinations=04942060&mode=driving&language=fr-FR&key=minhachave";

$result = file_get_contents($urlApi);
$data = json_decode($result, true);
var_dump($data);
die();


echo $data['rows'][0]['elements'][0]['distance']['text'];
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

 

$urlApi = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=04942040&destinations=04942060&mode=driving&language=fr-FR&key=minhachave";
$arrContextOptions=array(
			    "ssl"=>array(
			        "verify_peer"=>false,
			        "verify_peer_name"=>false,
			    ),
			);
$result = file_get_contents($urlApi, false, stream_context_create($arrContextOptions));
$data = json_decode($result, true);
var_dump($data);
die();

OBS.: Você notou que está faltando a chave da API na URL né? Sem ela a API não faz a requisição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado pela ajuda, JulinhoooO

mas o erro continua igual, a chave API eu tenho, só tirei pra postar, se você tiver um e-mail posso enviar a chave pra você fazer um teste pra mim se possível, já tentei de todas as formas, li a documentação do Google, acredito que não tenha nenhum erro no código, minha divida agora é, meu site é http e não https. seria um problema? sendo que a Google comenta algo sobre isso.

 

resultado quando é colocado direto no navegador

 

{
   "destination_addresses" : [
      "Jardim Copacabana, São Paulo - State of São Paulo, 04942-060, Brésil"
   ],
   "origin_addresses" : [
      "Jardim Copacabana, São Paulo - State of São Paulo, 04942-040, Brésil"
   ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "0,4 km",
                  "value" : 392
               },
               "duration" : {
                  "text" : "2 minutes",
                  "value" : 131
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
28 minutos atrás, Alexandrephp disse:

obrigado pela ajuda, JulinhoooO

mas o erro continua igual, a chave API eu tenho, só tirei pra postar, se você tiver um e-mail posso enviar a chave pra você fazer um teste pra mim se possível, já tentei de todas as formas, li a documentação do Google, acredito que não tenha nenhum erro no código, minha divida agora é, meu site é http e não https. seria um problema? sendo que a Google comenta algo sobre isso.

 

resultado quando é colocado direto no navegador

 


{
   "destination_addresses" : [
      "Jardim Copacabana, São Paulo - State of São Paulo, 04942-060, Brésil"
   ],
   "origin_addresses" : [
      "Jardim Copacabana, São Paulo - State of São Paulo, 04942-040, Brésil"
   ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "0,4 km",
                  "value" : 392
               },
               "duration" : {
                  "text" : "2 minutes",
                  "value" : 131
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

 

Veja se aparece algum erro no console do navegador. Porque fiz um teste com uma chave minha aqui e o resultado foi exatamente o que você disse que teria que retornar

{ 
	"destination_addresses" : [ 
    	"Jardim Copacabana, São Paulo - State of São Paulo, 04942-060, Brésil" 
        ], 
     "origin_addresses" : [ 
     	"Jardim Copacabana, São Paulo - State of São Paulo, 04942-040, Brésil" 
        ], 
      "rows" : [ 
      	{ 
        	"elements" : [ 
            	{ 
                	"distance" : { 
                    	"text" : "0,4 km", "value" : 392 
                        }, 
                     "duration" : { 
                     	"text" : "2 minutes", "value" : 131 
                        }, 
                     "status" : "OK" 
                  } 
               ] 
            } 
         ], 
      "status" : "OK" 
   }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente agradeço a, JulinhoooOtetsuo e ygor.anjos por ter me ajudado.

Eu agradeço a ajuda, consegui de uma outra forma, não era o que eu queria porque preciso dos seguintes dados, latitude, longitude, distancia e tempo tipo drive. mas de qualquer forma esse codigo que vou postar já resolve, vou postar porque pode acontecer de alguem estar com o mesmo problema, segue o codigo abaixo só copiar e colar, não esqueça de colocar a API_KEY

 

<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta charset="utf-8">
    <script src="http://code.jquery.com/jquery-1.8.1.js" type="text/javascript"></script>
  </head>
  <body>
 
  <script async defer
        src="https://maps.googleapis.com/maps/api/js?key=API_KEY">
    </script>
    <!-- Parâmetro sensor é utilizado somente em dispositivos com GPS -->
    <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
      function CalculaDistancia() {
        $('#litResultado').html('Aguarde...');
        // Instancia o DistanceMatrixService.
        var service = new google.maps.DistanceMatrixService();
        // Executa o DistanceMatrixService.
        service.getDistanceMatrix({
            origins: [$("#txtOrigem").val()], // Origem
            destinations: [$("#txtDestino").val()], // Destino
            travelMode: google.maps.TravelMode.DRIVING, // Modo (DRIVING | WALKING | BICYCLING)
            unitSystem: google.maps.UnitSystem.METRIC // Sistema de medida (METRIC | IMPERIAL)
        }, callback); // Vai chamar o callback
      }

      // Tratar o retorno do DistanceMatrixService
      function callback(response, status) {
        // Verificar o status.
        if (status != google.maps.DistanceMatrixStatus.OK) { // Se o status não for "OK".
            $("#litResultado").html(status);
        } else { // Se o status for "OK".
            $("#litResultado").html("&nbsp;"); // Remove o "aguarde".

            // Popula os campos.
            $("#txtOrigemResultado").val(response.originAddresses);
            $("#txtDestinoResultado").val(response.destinationAddresses);
            $("#txtDistancia").val(response.rows[0].elements[0].distance.text);
            var tempo = response.rows[0].elements[0].duration.text;
            tempo = tempo.replace("day", "dia").replace("hour", "hora").replace("min", "minuto");
            $("#txtTempo").val(tempo);

            //Atualizar o mapa.
            $("#map").attr("src", "https://maps.google.com/maps?saddr=" + response.originAddresses + "&daddr=" + response.destinationAddresses + "&output=embed");
        }
      }
    </script>

    <form action="calculadistancia.php" method="post">
      <div><span>Pesquisa:</span></div>
      <label for="txtOrigem"><strong>Endere&ccedil;o de origem</strong></label>
      <input name="pesquisaOrigem" type="text" id="txtOrigem" class="field" style="width: 400px" value="04942040" />
      <label for="txtDestino"><strong>Endere&ccedil;o de destino</strong></label>
      <input name="pesquisaDestino" type="text" id="txtDestino" class="field" style="width: 400px" value="04942060" />
      <input type="button" value="Calcular dist&acirc;ncia" onclick="CalculaDistancia()" class="btnNew" />
      <div><span id="litResultado">&nbsp;</span></div>

      <div><span>Resposta:</span></div>
      <label for="txtOrigemResultado"><strong>Endere&ccedil;o de origem</strong></label>
      <input name="resultadoOrigem" readonly="readonly" type="text" id="txtOrigemResultado" class="field" style="width: 400px" value="" />
      <label for="txtDestinoResultado"><strong>Endere&ccedil;o de destino</strong></label>
      <input name="resultadoDestino" readonly="readonly" type="text" id="txtDestinoResultado" class="field" style="width: 400px" value="" />
      <br />
      <label for="txtDistancia"><strong>Dist&acirc;ncia</strong></label>
      <input name="distancia" readonly="readonly" type="text" id="txtDistancia" value="" /> 
      <label for="txtTempo"><strong>Tempo</strong></label>
      <input name="tempo" readonly="readonly" type="text" id="txtTempo" value="" />
      <input type="submit" value="Enviar para o servidor" />
    </form>

    <div style="padding: 10px 0 0; clear: both">
      <iframe width="750" scrolling="no" height="350" frameborder="0" id="map" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?saddr=R. Antero de Figueiredo 6A, 1700-041 Lisboa, Portugal&daddr=R. Antero de Figueiredo 6A, 1700-041 Lisboa, Portugal&output=embed"></iframe>
    </div>

  </head>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.