Clipper On Line • Ver Tópico - Webservice matrix do google não esta retornando o xml

Webservice matrix do google não esta retornando o xml

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Webservice matrix do google não esta retornando o xml

Mensagempor florencio » 30 Jan 2016 07:27

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.
[url]https://maps.googleapis.com/maps/api/distancematrix/xml?origins='rua viri, 50, Parada Inglesa, São Paulo, SP'|&destinations='RUA ALBERTO APAROTI,CONJUNTO RESIDENCIAL JOSÉ BONIFACIO,SÃO PAULO,08255310'|&mode='CAR'|&language='PT'|&sensor='FALSE'[/url]
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/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.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:
   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.
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
florencio
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 14
Data de registro: 09 Nov 2014 08:45
Cidade/Estado: São Paulo / SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Webservice matrix do google não esta retornando o xml

Mensagempor sygecom » 05 Fev 2016 19:27

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?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7005
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Webservice matrix do google não esta retornando o xml

Mensagempor florencio » 20 Fev 2016 06:12

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.

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
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
florencio
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 14
Data de registro: 09 Nov 2014 08:45
Cidade/Estado: São Paulo / SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Webservice matrix do google não esta retornando o xml

Mensagempor Mário Isa » 03 Dez 2018 19:56

Alô Florêncio !

Vc conseguiu resolver seu problema ?

Mário
Avatar de usuário

Mário Isa
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 902
Data de registro: 07 Jul 2004 13:54
Cidade/Estado: Ilha Solteira-sp
Curtiu: 5 vezes
Mens.Curtidas: 8 vezes

Webservice matrix do google não esta retornando o xml

Mensagempor florencio » 24 Abr 2022 06:01

Ola Mario, Na ocasião consegui resolver o problema. Esta conseguindo usar?
florencio
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 14
Data de registro: 09 Nov 2014 08:45
Cidade/Estado: São Paulo / SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 11 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro