Página 1 de 2

Busca CEP na net

Enviado: 03 Fev 2015 19:06
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.

Busca CEP na net

Enviado: 04 Fev 2015 08:45
por aferra
acredito que dê para adaptar.

http://fivewin.com.br/index.php?/topic/ ... infalivel/

Busca CEP na net

Enviado: 07 Fev 2015 20:15
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.

Busca CEP na net

Enviado: 07 Fev 2015 20:29
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.

Busca CEP na net

Enviado: 07 Fev 2015 21:29
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.

Busca CEP na net

Enviado: 15 Abr 2015 17:55
por JoséQuintas
Me parece que os correios alteraram o esquema.
Por acaso esse ainda funciona?

Busca CEP na net

Enviado: 15 Abr 2015 18:55
por Itamar M. Lins Jr.
Está funcionando.

Saudações,
Itamar M. Lins Jr.

Busca CEP na net

Enviado: 15 Abr 2015 19:13
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,

Busca CEP na net

Enviado: 15 Abr 2015 19:37
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>

Busca CEP na net

Enviado: 15 Abr 2015 19:47
por Itamar M. Lins Jr.
Hummmm! 1,2,3... Mudando! :-)
Que beleza!

Saudações,
Itamar M. Lins Jr.

Busca CEP na net

Enviado: 15 Abr 2015 21:09
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

Busca CEP na net

Enviado: 15 Abr 2015 23:44
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.

Busca CEP na net

Enviado: 16 Abr 2015 10:25
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.

Busca CEP na net

Enviado: 17 Abr 2015 10:34
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.

Busca CEP na net

Enviado: 17 Abr 2015 12:20
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.