Busca CEP na net

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

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Busca CEP na net

Mensagem por Itamar M. Lins Jr. »

Ola!
O site republicavirtual está fora do ar
Eu achei esse dos correios:
http://m.correios.com.br/movel/buscaCepConfirma.do alguém do grupo tem tem rotina pronta p/ consulta ?


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
aferra
Usuário Nível 1
Usuário Nível 1
Mensagens: 41
Registrado em: 30 Mai 2008 06:55
Localização: Ribeirão Preto/SP

Busca CEP na net

Mensagem por aferra »

acredito que dê para adaptar.

http://fivewin.com.br/index.php?/topic/ ... infalivel/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Busca CEP na net

Mensagem por JoséQuintas »

Use o meu webservice.
Ele busca on-line nos correios.
Como fica tudo salvo no banco de dados, mesmo se os correios sairem do ar ele continua funcionando com a base local.
Dá uma olhada em contribuições.

De qualquer forma, o república virtual não era online.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Busca CEP na net

Mensagem por Itamar M. Lins Jr. »

Agradeço pela dica, porém olha que maravilha, on line no correio.
Ainda não ficou da forma que quero, porque desejo usar a classe tHtmlDocument(), da mesma forma que uso a tXMLDocument() para ler XML NFe.
Tive que fazer a gambiarra com at(), o bom é achar o NODE sei lá mais o quê bati cabeça aqui e não saiu nada.

Código: Selecionar todos

*********************
Function ChkCep(cCep)
*********************
*
*
Local cUf,cLo,cBai,cCid
LOCAL cHtml, oNode, oDoc, cURL, oHTTP
If empty(cCep)
   hwg_Msginfo("Informe o CEP")
   return .f.
EndIf
cURL := "http://m.correios.com.br/movel/buscaCepConfirma.do"
oHTTP:= TIPClientHTTP():New( cURL )
oHTTP:oURL:addGetForm( { ;
      "cepEntrada"  => cCep , ;
      "tipoCep" => "cepTemp" ,;
      "metodo" => "buscarCep" } )
      
   IF ! oHTTP:Open()
      hwg_msginfo( "Erro conectando:", oHTTP:lastErrorMessage() )
      RETURN .F.
   ENDIF
   cHtml := oHTTP:ReadAll()
   oHTTP:Close()
   oDoc:=THtmlDocument():New( cHtml )
   oDoc:writeFile( "resultado.html" )

cUF :=""
cCID:=""
cBAI:=""
cLOG:=""
cRUA:=""

cRUA:=substr(cHTML, at('>Logradouro:',cHTML), 200) 
cRUA:=alltrim(subStr(cRUA, at('"respostadestaque">',cRUA) + 19, rat('</span>',cRUA)-81))

cBAI:=substr(cHTML, at('>Bairro:',cHTML), 150)
cBAI:=substr(cBAI, At('"respostadestaque">',cBAI)+19, at('</span>', cBAI)-1)

cCID:=substr(cHTML, at('>Localidade / UF:',cHTML), 250)
cCID:=AllTrim( substr(cCID, At('"respostadestaque">',cCID)+19, rat('</span>', cCID)-86) )

cUF :=AllTrim( substr(cCID, At("/",cCID)+1,2) )
cCID:=AllTrim( substr(cCID, 1, At("/",cCID)-1 ))

   vCl14 := cRUA
   oCl14 : Refresh()
   vCl15 := cBAI
   oCl15 : Refresh()
   vCl17 := cCID
   oCl17 : Refresh()
   vCl19 := cUF
   oCl19 : Refresh()

Return .t.

Se devolvesse em XML seria mais show ainda.
Tanto faz LINUX/Windows/Android código limpo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Busca CEP na net

Mensagem por JoséQuintas »

ve se ajuda, o que fiz em asp:

Código: Selecionar todos

   cLogradouro = ""
   cBairro = ""
   cCidade = ""
   cUf = ""
   cCep = ""
   For nCont = 1 To 8
      cTemp = Ltrim(Rtrim(XmlNode(cResultado,"span")))
      If cTemp = "Logradouro:" or cTemp = "Endereço" Then
         cLogradouro = Ltrim(Rtrim(XmlNode(cResultado,"span")))
      ElseIf cTemp = "Bairro:" Then
         cBairro = Ltrim(Rtrim(XmlNode(cResultado,"span")))
      ElseIf cTemp = "Localidade / UF:" or cTemp = "Localidade/UF:" Then
         cTemp = Ltrim(Rtrim(XmlNode(cResultado,"span")))
         If InStr(cTemp,"/") <> 0 Then
            cCidade = Mid(cTemp,1,Instr(cTemp,"/")-1)
            cUf = Mid(cTemp,Instr(cTemp,"/")+1)
            cCidade = Ltrim(Rtrim(cCidade))
            cUf = Ltrim(Rtrim(cUf))
         End If
      Elseif cTemp = "CEP:" Then
         cTemp = Ltrim(Rtrim(XmlNode(cResultado,"span")))
         cCep = RTrim(LTrim(cTemp))
         If Len(cCep) = 8 And Len(SoNumeros(cCep)) = 8 Then
            cCep = Mid(cCep,1,5) & "-" & Mid(cCep,6,3)
         End If
      End If

Código: Selecionar todos

Function XmlNode(cTexto,cNode)
   Dim cTrecho, cInicio, cFim
   cTrecho = ""
   cInicio = "<" & cNode
   cFim    = "</" & cNode
   If Instr(ctexto,cInicio) <> 0 And Instr(cTexto,cFim) <> 0 Then
      cTrecho = Mid(cTexto,instr(cTexto,cInicio)+1)
      cTrecho = mid(cTrecho,1,Instr(cTrecho,cFim)-1)
      Do While Mid(cTrecho,1,1) <> ">" And Len(cTrecho) > 1
         cTrecho = Mid(cTrecho,2)
      Loop
      If Len(cTrecho) <= 1 Then
         cTrecho = ""
      Else
         cTrecho = Mid(cTrecho,2)
      End if
   End if
   If Instr(cTexto,cFim) = 0 Then
      cTexto = ""
   Else
      cTexto = Mid(cTexto,Instr(cTexto,cFim)+Len(cFim))
   End If
   XmlNode = cTrecho
End Function
InStr() é o equivalente de At()
Mid() é o equivalente de Substr()
DO WHILE-LOOP é o equivalente de DO WHILE-ENDDO
E na função, ao invés de RETURN cTrecho, é atribuído cTrecho ao nome da função. XmlNode = cTrecho
Com certeza XmlNode() tem equivalente na tHmlDocument(), que é pra extrair um node do xml.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Busca CEP na net

Mensagem por JoséQuintas »

Me parece que os correios alteraram o esquema.
Por acaso esse ainda funciona?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Busca CEP na net

Mensagem por Itamar M. Lins Jr. »

Está funcionando.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Busca CEP na net

Mensagem por Toledo »

Esta funcionando somente em modo POST. Modo GET deixou de funcionar.

Veja também:
http://www.buscacep.correios.com.br/ser ... nsulta=cep

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Busca CEP na net

Mensagem por JoséQuintas »

E esse vém mais fácil, porque no meio de todo html tem o xml:

Código: Selecionar todos

<?xml version = '1.0' encoding = 'ISO-8859-1'?>
<table border="0" cellspacing="1" cellpadding="5" bgcolor="gray">
   <tr bgcolor="#ECF3F6" onclick="javascript:detalharCep('1','2');" style="cursor: pointer;">
      <td width="268" style="padding: 2px">Rua Afonso Pena - de 821/822 a 1679/1680</td>
      <td width="140" style="padding: 2px">Vila Mendonça</td>
      <td width="140" style="padding: 2px">Araçatuba</td>
      <td width="25" style="padding: 2px">SP</td>
      <td width="65" style="padding: 2px">16015-040</td>
   </tr>
</table>
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Busca CEP na net

Mensagem por Itamar M. Lins Jr. »

Hummmm! 1,2,3... Mudando! :-)
Que beleza!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Busca CEP na net

Mensagem por Cavalo Marinho »

Boa noite a todos
Testem esta, um amigo do grupo minigui disponibilizou para todos, estou repassando, achei muito boa e dar para adaptar nos nossos sistemas.

Abraços
Anexos
viaCep.rar
(687.68 KiB) Baixado 103 vezes
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Busca CEP na net

Mensagem por Itamar M. Lins Jr. »

... porque no meio de todo html tem o xml:
Não é um XML :-( é uma tabela.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Busca CEP na net

Mensagem por JoséQuintas »

No final, ao mesmo tempo que é código HTML, é também um XML.

Os nodes são : <table></table> <tr></tr> <td></td>

E alguns possuem elementos adicionais.

Código: Selecionar todos

<td width="268" style="padding: 2px">
Vemos isso nos XMLs de NFE:

Código: Selecionar todos

<nfeProc versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe">
O explorer é que não é muito rígido nisso, e deixa funcionar html incompleto, o que descaracteriza como xml.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Busca CEP na net

Mensagem por Itamar M. Lins Jr. »

Os nodes são : <table></table> <tr></tr> <td></td>
Isso não é node, é a marcação html de uma tabela.
E alguns possuem elementos adicionais.
Isso não é elemento adicional. É o STYLE ou CSS da marcação HTML.
Vemos isso nos XMLs de NFE:
Ai sim é XML.

Resumindo, esse HTML está errado. Quem escreveu não terminou, está incompleto.


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Busca CEP na net

Mensagem por JoséQuintas »

Código: Selecionar todos

<nfe versao="100%">
</nfe>
Isso é um xml

Código: Selecionar todos

<table width="100%">
</table>
Qual a diferença? ao invés de chamar nfe e versao, chama-se table e width.
É um XML onde os campos tem os nomes de comandos html.
É um html, que segue a formatação XML.
É as duas coisas ao mesmo tempo.

Outro exemplo, um arquivo texto contendo:

Código: Selecionar todos

PROCEDURE Main
   RETURN
É um fonte de programa, mas continua sendo um arquivo texto.
Chamar de arquivo texto pode contrariar um programador, mas é um arquivo texto.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder