Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Malebo
      Boas.
       
      Estou a três semana com erro abaixo, preciso da vossa ajura para poder baixar as imagens do mysql no laradock.
      Abaixo o trecho de codigo, quando executou docker-compose up -d mysql ele nunca sai desta tela.
       
      $ docker-compose build --no-cache mysql
      Building mysql
      Step 1/9 : ARG MYSQL_VERSION=8.0
      Step 2/9 : FROM mysql:${MYSQL_VERSION}
      8.0: Pulling from library/mysql
       
    • Por zinleo1
      Estou precisando consultar o endereço(tipo_logradouro e logradouro) de um cliente no meu banco de dados mas to tendo problemas no select, alguém consegue me ajudar, como faço para dar select em duas tabelas? Segue o código:
       
       

      <html>
          <head>
              <meta charset="UTF-8">
              <title></title>
          </head>
          <body>
      <fieldset>
      <legend>Lista de Registros</legend>
      <table border="1" width="100%">
       <tr>
            <th>Código do Usuário</th>
            <th>Nome do Usuário</th>
            <th>Sobrenome do Usuário</th>
            <th>Tipo de Logradouro</th>
            <th>Logradouro</th>
       </tr>
       
      <?php
          
          if(isset($_POST["consultar"])){
                  $nome = $_POST['nome'];
                  $sobrenome = $_POST['sobrenome'];
                  
                          
                 
               include('conexao.php');
          
                  $sqlconsultaraluno= "select * from aluno where nome_aluno='$nome' or sobrenome_aluno='$sobrenome'"; 
                  $consultaraluno = mysqli_query($con,$sqlconsultaraluno);
                              
                 $i = 0;
              if (mysqli_num_rows($consultaraluno, $consultarendereco) == 0){
                  echo "<h4>Nenhum Registro Encontrado!</h4>";
              }
              else{
              while ($linha = mysqli_fetch_array($consultarendereco)) {
                 $cod_aluno = $linha["cod_aluno"];
                 $nome = $linha["nome_aluno"];
                 $sobrenome = $linha["sobrenome_aluno"];
                         $tipologradouro = $linha['tipo_logradouro'];
                         $logradouro = $linha ['logradouro'];    
                         
                 if ($i % 2 == 0){
                    $cor = "#DDDDDD";
                 }
                 else{
                    $cor = "#FFFFFF";
                 }
                         
                 
          ?>
              <tr bgcolor="<?php echo $cor; ?>"
                          <td></td>
                          <td><?php echo $cod_aluno; ?></td>
                          <td><?php echo $nome; ?></td>
                          <td><?php echo $sobrenome; ?></td>
                          <td><?php echo $tipologradouro; ?></td>
                          <td><?php echo $logradouro; ?></td>
                          
                         
                          <td><?php echo "<a href='editar_usuario.php?id=".$linha["cod_aluno"]."'>Editar</a>";?></td>
                          <td><?php echo "<a href='deletar_usuario.php?id=".$linha["cod_aluno"]."'>Deletar</a>";?></td>
              </tr>
               
              <?php
                 $i++;
                         
              }
          }
        
              }
                      
      ?>
      </table>
          </body>
      </html>
    • Por diogoglobaltec
      criei um formulário dinamico e gostaria de enviar para o arquivo rec.php, os aquivos adicionados pelo no formato file , já tentei colocar em
       x.setAttribute("enctype" , "multipart/form-data");
      também não funcionou segue o arquivo:
       
      <!DOCTYPE html>
          <html>
              <body>
              
                  
                  
                  <p>Click the button to create a FORM and an INPUT element.</p>
                  <button onclick="myFunction()">Try it</button>
                  <button onclick="enviar()">enviar</button>
          <script>
          function myFunction() {
            var x = document.createElement("FORM");
            x.setAttribute("action", "rec.php");
          x.setAttribute("method", "post");
          x.setAttribute("id", "myForm");
            document.body.appendChild(x);

            var y = document.createElement("INPUT");
            y.setAttribute("type", "file");
            y.setAttribute("name", "arquivo[]");
            document.getElementById("myForm").appendChild(y);
      }
           function enviar(){
              document.forms[0].submit(); 
          
          }
          </script>

              </body>
      </html>
       
      consigo pegar no arquivo rec.php o valor de $_POST , mas de $_FILES não consigo pegar como um array, o que está dando errado ? segue o  script PHP 
       
      Arquivo rec.php
      <?php
      foreach($_POST['arquivo'] as $value) {
              echo $value."<br />";
      }
      foreach($_FILES['arquivo'] as $value) {
                     echo $value['arquivo']['name']."<br />";
      }
       
       
       
       
    • Por Jonas Ribeiro Nascimento
      Estou criando meu próprio mvc php para adquirir mais conhecimento.
      Mas estou me deparando com uma coisa muita estranha, eu perco a $_SESSION de uma view para outra view
      Fiz um codigo simples pra testar.a.php ----- view a.php
      <?php session_start(); $_SESSION['teste'] = 'Funcionou'; echo $_SESSION['teste']; ?> <?php session_start(); echo $_SESSION['teste']; // Notice: Undefined variable: _SESSION in var_dump($_SESSION); // Notice: Undefined variable: _SESSION in NULL ?> <?php namespace Sis\Classes; use App\Model\ClassLogin; use Sis\Traits\TraitGetIp; class ClassSession { private $login; private $timeSession = 1200; private $timeCanary = 300; public function __construct(){ if(session_id() == ''){ ini_set("session.save_handler", "files"); //Cabeçalhos somente atraves de arquivos ini_set("session.use_cookies", 1); //Habilita o uso de cookies ini_set("session.use_only_cookies", 1); //Só pode habilitar a seção atraves de coockies ini_set("session.cookie_domain", DOMAIN); //Só aceita coockies vindo do nosso sistema ini_set("session.cookie_httponly", 1); //Só aceita script php e não deixa o javascript alterar o sistema if(DOMAIN != "localhost"){ ini_set("session.cookie_secure", 1); //Para trabalhar com o SSL do servidor ativo } /*Criptografia das nossas sessions*/ ini_set("session.entropy_length", 512); // ini_set("session.entropy_file","/dev/urandom"); ini_set("session.hash_function", "sha256"); ini_set("session.hash_bits_per_character", 5); session_start(); } $this->login = new ClassLogin(); } #Proteger contra roubo de sessão public function setSessionCanary($par=null){ session_regenerate_id(true); if($par == null){ $_SESSION['canary']=[ "birth" => time(), "IP" => TraitGetIp::getUserIp() //Pega o ip do usuario ]; }else{ $_SESSION['canary']['birth']=time(); } } #Verificar a integridade da sessão public function verifyIdSessions(){ if(!isset($_SESSION['canary'])){ $this->setSessionCanary(); } if($_SESSION['canary']['IP'] !== TraitGetIp::getUserIp()){ $this->destructSessions(); $this->setSessionCanary(); } if($_SESSION['canary']['birth'] < time() - $this->timeCanary){ $this->setSessionCanary("Time"); } } #Setar as sessões do nosso sistema public function setSessions($Email){ $this->verifyIdSessions(); $_SESSION['Login'] = true; $_SESSION['Time'] = time(); $_SESSION['Nome'] = $this->login->getIssetSession($Email)['data']['Nome']; $_SESSION['Email'] = $this->login->getIssetSession($Email)['data']['Email']; $_SESSION['Permissoes'] = $this->login->getIssetSession($Email)['data']['Permissoes']; } #Validar as páginas internas do sistema public function verifyInsideSession(){ $this->verifyIdSessions(); if(!isset($_SESSION['Login']) || !isset($_SESSION['Permissoes']) || !isset($_SESSION['canary'])){ $this->destructSessions(); header("Location: ".DIRPAGE."NaoAutorizado"); }else{ if($_SESSION['Time'] >= time() - $this->timeSession){ $_SESSION['Time']=time(); }else{ $this->destructSessions(); header("Location: ".DIRPAGE."NaoAutorizado"); } } } #Destruir as sessions existentes public function destructSessions(){ foreach (array_keys($_SESSION) as $key) { unset($_SESSION[$key]); } } #testar public function testarSessions(){ echo 'oiiiiiiiiiiiiiiiiiiiiiiooooooooooo'; } }

    • Por Allan Carlos dos Santos G
      Bom dia Pessoal, Gostaria de saber como Instalar e colocar pra rodar a versão do Zend PHP 1.11.11, tenho tido dificuldade de achar material na internet e se puderem ajudar, obrigado!
×

Informação importante

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