Página 1 de 1

Webservice matrix do google não esta retornando o xml

Enviado: 30 Jan 2016 08:27
por florencio
Ola Pessoal!
Sou novo por aqui. Não tenho muito conhecimento em webservice. Montei uma função juntando informações deste forum e algumas outras fontes. Estou precisando pegar a distância entre dois pontos e para isto estou utilizando a API matrix do google.
Quando digito a URL gerada pelo menu sistema direto no browser, o google retorna com o XML corretamente. Segue exemplo de uma URL gerada pelo meu sistema.
https://maps.googleapis.com/maps/api/di ... or='FALSE'
Porém quando meu sistema faz a consulta para receber a distancia a resposta que é recebida é esta:

<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 400 (Bad Request)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelo ... 0x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelo ... 0x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelo ... 0x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelo ... 0x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
</style>
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>400.</b> <ins>That’s an error.</ins>
<p>Your client has issued a malformed or illegal request. <ins>That’s all we know.</ins>

Segue o código fonte:

Código: Selecionar todos

   vENDCOMPG := "http://maps.googleapis.com/maps/api/distancematrix/xml"
   vORIGINS      := ALLTRIM(vENDO) +","+ALLTRIM(vBAIO)+","+ALLTRIM(vCIDO)+","+ALLTRIM(vCEPO)
   vDESTINATIONS := ALLTRIM(vENDG) +","+ALLTRIM(vBAIG)+","+ALLTRIM(vCIDG)+","+ALLTRIM(vCEPG)
   vMODE         := "CAR"
   vLANGUAGE     := "PT"
   vSENSOR        := "FALSE"
// http://maps.googleapis.com/maps/api/dis ... rigins=''São Paulo''|&destinations=''Rio de Janeiro''|&mode=''.$mode.''|&language=''.$language.''|&sensor=false
   // Monta o documento XML conforme a estrutura definida para este Web Service
   sConteudo := ""
   sConteudo := sConteudo + "origins='"+vORIGINS+"'|&"
   sConteudo := sConteudo + "destinations='"+vDESTINATIONS+"'|&" // |"
   sConteudo := sConteudo + "mode='"+vMODE+"'|&"
   sConteudo := sConteudo + "language='"+vLANGUAGE+"'|&"
   sConteudo := sConteudo + "sensor='"+vSENSOR+"'"
   vENDCOMPG := vENDCOMPG+"?"+sConteudo
   
   oHttp:= TIpClientHttp():new(vENDCOMPG)
   IF ! oHttp:open()
      MsgExclamation("Erro "+oHttp:lastErrorMessage(),"Erro")
      return
   else
      msgexclamation("Deu certo","Deu certo")
      cResposta   := oHttp:readAll()   
      Memowrit( "Google_xOraClip.html", cResposta )      
   ENDIF
//   cResposta   := oHttp:readAll()
   oHttp:close()     
Ficarei muito grato por qualquer ajuda enviada.

Webservice matrix do google não esta retornando o xml

Enviado: 05 Fev 2016 20:27
por sygecom
Isso que você montou não é um consumo de web-service.

E para esse caso do Matrix do Google acredito não precisa de tudo que fez. Você precisa mostrar na tela em um HTML isso?

Webservice matrix do google não esta retornando o xml

Enviado: 20 Fev 2016 07:12
por florencio
Ola. Não preciso guardar o html. Estava guardando apenas para ver a resposta. Ele esta funcionando um pouco melhor agora, mas se eu faço o teste diretamente pelo browser geralmente o endereço é encontrado e o xml retorna corretamente em quase 100% dos casos. Quando a consulta é feita pelo meu sistema as vezes ele não encontra o endereço, por isto precisei fazer um metodo alternativo de ir tentando encontrar usando várias formas. Endereço, cep, endereço + bairro, etc. O detalhe é que preciso que ele seja mais preciso. Acredito que isto possa estar ocorrendo por conta da maneira como devo passar o endereço, ex: espaço em branco, virgula, etc.

Código: Selecionar todos

vENDG := alltrim(pedido_form.ven_end_txt.value)
vNUMG := alltrim(pedido_form.ven_num_txt.value)
vBAIG := alltrim(pedido_form.ven_bai_txt.value)
vCIDG := alltrim(pedido_form.ven_cid_txt.value)
vUFG  := alltrim(pedido_form.ven_uf_txt.value)        
vCEPG := alltrim(pedido_form.ven_cep_txt.value)

vCONT := 1
do while .t.
   IF vCONT == 1
      pedido_form.StatusBar.Item(1) := "Status: Verificando se endereço é encontrado junto ao Google" 
   ELSEIF vCONT == 2 .and. !empty(pedido_form.ven_bai_txt.value)
      vBAIG := ""
   ELSEIF vCONT == 3 .and. !empty(pedido_form.ven_cid_txt.value)
      vCIDG := ""
   ELSEIF vCONT == 4 .and. !empty(pedido_form.ven_cep_txt.value)
      vENDG := ""     
      vCEPG := alltrim(pedido_form.ven_cep_txt.value)
   else
      vCONT := 5
      MsgExclamation("Endereço não encontrado junto ao google, isto não significa que o endereço não exista, confira a grafia, altere o bairro e preencha o cep. Se ainda assim não conseguir faça uma pesquisa no google maps e veja se desta maneira consegue localizar. Se localizar veja como foi exibido e preencha os dados na tela de pedido da mesma maneira.", "Por favor verifique o endereço.")
      pedido_form.sinal_img.picture  := "sinalvermelho.bmp"      
      exit
   endif      
      
   vENDCOMPG := "http://maps.googleapis.com/maps/api/distancematrix/xml"
   vORIGINS      := strtran(alltrim(vpar_end)," ","+")+"+"+strtran(alltrim(vpar_bai)," ","+")+"+"+strtran(alltrim(vpar_cid)," ","+")+"+"+strtran(alltrim(vpar_uf)," ","+")+"+"+"Brasil" // "Manaus" // "Av. Luis Stamatis, 999, Jaçanã, São Paulo, SP" // ALLTRIM(vENDO) +","+ALLTRIM(vBAIO)+","+ALLTRIM(vCIDO)+","+ALLTRIM(vCEPO)
   vDESTINATIONS := iif(!EMPTY(vENDG),strtran(alltrim(vENDG)," ","+")+"+","")+iif(!EMPTY(vNUMG),strtran(alltrim(vNUMG)," ","+")+"+","")+strtran(alltrim(vBAIG)," ","+")+"+"+strtran(alltrim(vCIDG)," ","+")+"+"+strtran(alltrim(vUFG)," ","+")+"+"+strtran(alltrim(vCEPG)," ","+")+"+"+"Brasil" // "Recife" // ALLTRIM(vENDG) +","+ALLTRIM(vBAIG)+","+ALLTRIM(vCIDG)+","+ALLTRIM(vCEPG)

   vMODE         := "driving"
   vLANGUAGE     := "pt-BR"
   vSENSOR        := "FALSE"

   sConteudo := ""
   sConteudo := sConteudo + "origins="+vORIGINS+"&"
   sConteudo := sConteudo + "destinations="+vDESTINATIONS+"&" // |"
   sConteudo := sConteudo + "mode="+vMODE+"&"
   sConteudo := sConteudo + "language="+vLANGUAGE // +"%22" // "'|&"

   vENDCOMPG := vENDCOMPG+"?"+sConteudo
   
   oHttp:= TIpClientHttp():new(vENDCOMPG)
   IF ! oHttp:open()

      return
   else
      cXml   := oHttp:readAll()   
      Memowrit( "Google_xOraClip.html", cXml )      
   ENDIF

   oHttp:close()  

   cNode := NIL
   cAttrib := NIL
   cValue := NIL
   xmlDoc := TXmlDocument():New( cXml )
   IF xmlDoc:nStatus != 1
      MsgExclamation("Erro ao ler XML","Erro ao ler XML")
      Return Nil
   ENDIF
   xmlIter := TXmlIterator():New( xmlDoc:oRoot )
   xmlNode := xmlIter:Find()
   DO WHILE xmlNode != NIL
      if !empty(xmlNode:cData)
         if subs(xmlNode:cData,1,1) # "<"
            oCampo :=xmlNode:cName
            oConteudo:=xmlNode:cData
         endif
      else
         oCampo :=xmlNode:cName
         oConteudo:=""
      endif
      
      if padr(oCampo,19) == "destination_address"

         if empty(alltrim(oConteudo))
            vCONT := vCONT + 1
            exit
         endif
      endif
      if padr(oCampo,8) == "distance"
//      achou a distancia
         xmlNode := xmlIter:Next()          // joga pro proximo campo         
         oCampo :=xmlNode:cName
         oConteudo:=xmlNode:cData
        
         if padr(oCampo,5) == "value"      
//            msgexclamation("achou value","achou value")         
            if val(oConteudo) > 1000
               pedido_form.ven_dest_txt.value := val(oConteudo) / 1000
            else
               pedido_form.ven_dest_txt.value := 0
            endif
            pedido_form.sinal_img.picture  := "sinalverde.bmp"
            return
         endif
      endif
   
     
      xmlNode := xmlIter:Next()                        // joga pro proximo campo
   ENDDO
   if !empty(pedido_form.ven_dest_txt.value) .or. vCONT >= 5
      exit
   endif

enddo

Webservice matrix do google não esta retornando o xml

Enviado: 03 Dez 2018 20:56
por Mário Isa
Alô Florêncio !

Vc conseguiu resolver seu problema ?

Mário

Webservice matrix do google não esta retornando o xml

Enviado: 24 Abr 2022 06:01
por florencio
Ola Mario, Na ocasião consegui resolver o problema. Esta conseguindo usar?