Classe para consulta de CEP

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Classe para consulta de CEP

Mensagem por bencz »

Código: Selecionar todos

#include "hbxml.ch"
#include "hbclass.ch"

function main()
  local cep := BuscaCEP():New("99999999")
  ? cep:GetTipo() + " " + cep:GetLogradouro()
  ? cep:GetBairro()
  ? cep:GetCidade()
  ? cep:GetUF()
return nil

class BuscaCEP
private:
  data cLogradouro init ""
  data cBairro     init ""
  data cCidade     init ""
  data cTipo       init ""
  data cCep        init ""
  data cUF         init ""
  data cSrvResp    init ""

public:
  method new(cep) constructor
  method busca(cep)
  
  inline method GetLogradouro()
    return ::cLogradouro
  endmethod
   
  inline method GetBairro()
    return ::cBairro
  endmethod
   
  inline method GetCidade()
    return ::cCidade
  endmethod
  
  inline method GetTipo()
    return ::cTipo
  endmethod
   
  inline method GetUF()
    return ::cUF
  endmethod
  
  inline method GetSrvSts()
    return ::cSrvResp
  endmethod  
endclass

method new(cep) class BuscaCEP
  if cep != nil
    ::cCep := cep
  else        
    ::cCep := "99999999"       
  endif
  ::busca()
return self

method busca(cep) class BuscaCEP
  local oHttp, cXML
  local oDoc, oIterator          
  
  if cep != nil
    ::cCep := cep
  endif
  
  oHttp:= TIpClientHttp():new( "http://cep.republicavirtual.com.br/web_cep.php?cep="+::cCep+"&formato=xml" ) 
  oHttp:open() 
  cXML := oHttp:readAll()
  oHttp:close()
  
  oDoc := TXmlDocument():New(cXML, HBXML_STYLE_NOESCAPE)
  if oDoc:nError != HBXML_ERROR_NONE
    ? "Erro ao ler o XML dos correios"
  endif

  oIterator := TXmlIterator():New( oDoc:findfirst( "webservicecep" ) ) 
  if oIterator:Next():cData == "1"
     ::cSrvResp    := oIterator:Next():cData
     ::cUF         := oIterator:Next():cData
     ::cCidade     := oIterator:Next():cData
     ::cBairro     := oIterator:Next():cData
     ::cTipo       := oIterator:Next():cData
     ::cLogradouro := oIterator:Next():cData
  else
    ? "ERRO :("
  endif
  
return nil
Imagem
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Classe para consulta de CEP

Mensagem por alxsts »

Olá!

Muito bacana! Obrigado por compartilhar. Vou testar.

Interessante: atualmente, muitos tópicos postados neste site, que é o maior site ativo a tratar de um dinossauro chamado xBase, exemplificam programação orientada a objetos. Seria a a prova concreta da sobrevivência da alma?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Classe para consulta de CEP

Mensagem por bencz »

"Interessante: atualmente, muitos tópicos postados neste site, que é o maior site ativo a tratar de um dinossauro chamado xBase, exemplificam programação orientada a objetos. Seria a a prova concreta da sobrevivência da alma?", Alexandre

Lindo isto que você postou Alexandre :)

Bom, eu sou adepto a programação OO para no xBase, repare que praticamente em todos os exemplos que postei, utilizo apenas a programação OO, acho muito legal a programação xBase em conjunto com OO.

Poderiamos fazer um incentivo aqui na comunidade, oque acha ?
Imagem
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Classe para consulta de CEP

Mensagem por fladimir »

Olha eu não entendo muito de OOP mas to dentro no q eu puder ajudar/aprender vamos juntos.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Classe para consulta de CEP

Mensagem por JoséQuintas »

Como eu já falei aqui no grupo, tem horas que não sei se estou facilitando ou complicando.
Na sua classe, sinceramente, achei que complicou o que não precisava complicar.
Aqui minha rotina é esta, que uso durante os GETs de cadastro:

Código: Selecionar todos

@ 1, 0 SAY "CEP:" GET mCep PICTURE "99999-999" VALID CepOk( @mCep, @mEndereco, @mCidade, @mUf )
@ Row()+1, 0 SAY "Endereco:" GET mEndereco
@ Row()+1, 0 SAY "Número:" GET mNumero
@ Row()+1, 0 SAY "Cidade:" GET mCidade
@ Row()+1, 0 SAY "UF:" GET mUF
READ

FUNCTION CepOk( mCep, mEndereco, mBairro, mCidade, mUf )
   LOCAL mTexto
   
   IF Val( SoNumeros( mCep ) ) == 0
      RETURN .T.
   ENDIF
   mTexto := WebCep( mCep )
   mUf       := Pad( XmlNode( mTexto, "UF" ), 2 )
   mCidade   := Pad( XmlNode( mTexto, "CIDADE" ), Len( mCidade ) )
   mBairro   := Pad( XmlNode( mTexto, "BAIRRO" ), Len( mBairro ) )
   mEndereco := Pad( XmlNode( mTexto, "LOGRADOURO" ), Len( mEndereco ) )
   RETURN .T.
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
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Classe para consulta de CEP

Mensagem por bencz »

JoséQuintas, boa tarde!

BOm, a sua versão é funcional sim, comletamente, mas ai acabamos voltando para a ideia de programação tradicional do xBase, a idéia q eu quis apresentar é simplesmente a ideia do POO com xBase :)
Imagem
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Classe para consulta de CEP

Mensagem por JoséQuintas »

Programação tradicional do xbase?
Que tal em VB?

Código: Selecionar todos

PUBLIC FUNCTION CepOk( mCep As String, mEndereco As String, mBairro As String, mCidade As String, mUf As String)
   DIM mTexto AS String
   
   IF Val( SoNumeros( mCep ) ) = 0
      RETURN TRUE
   ENDIF
   mTexto = WebCep( mCep )
   mUf      = Pad( XmlNode( mTexto, "UF" ), 2 )
   mCidade  = Pad( XmlNode( mTexto, "CIDADE" ), Len( mCidade ) )
   mBairro   = Pad( XmlNode( mTexto, "BAIRRO" ), Len( mBairro ) )
   mEndereco = Pad( XmlNode( mTexto, "LOGRADOURO" ), Len( mEndereco ) )
   RETURN TRUE
Seu exemplo pode ser usado como está, pode ser usado pra aprender OOP, pra fazer um webservice, ou pra usar a biblioteca de XML.
O exemplo é válido.
OOP é ótimo, uso muito. Eu só comentei que acho que pra esse caso só complica.
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