Ir para conteúdo

POWERED BY:

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 violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por daemon
      Boa tarde,
       
      Duvida simples...
       
      Quando recupero os dados RSS, para inserir no banco de dados esta salvando corretamento porém no mysql esta com (ponto) . na frente de todos os registros via RSS.
       
      Fica com um ponto na frente outro atras...
       
      Data/hora:
      .2024-11-30 10:03:47.
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

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