Consultar e Importar Cep da Internet para o Sistema.

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

Moderador: Moderadores

Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Marcos »

Senhores, alguém poderia nos ajudar com esta questão, preciso implementar em uma aplicação GUI utilizando Harbour com Minigui a consulta de Cep pela Internet, e importar as informações e assim gravar em um banco Mysql, se alguém nos ajudar seria de grande valia.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por fladimir »

Tem algumas formas...

Vc pode usar o ACBr como ponte, gera o comando em um arquivo TXT na pasta q é monitorada pelo ACBr ou acessa o ACBr via TCP e manda o comando e le o retorno, se for via TXT o retorno será lido através de memoread por exemplo.

Fora isto se souber algum webservice q forneça a informação pode acessar o webservice e tratar o retorno através de métodos GET e POST (tem exemplo aqui no fórum)

Ou já tem tb banco de dados com os CEPs etc em SQL ai seria somente alterar o script para inserir no seu banco.
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.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Fernando queiroz »

Código: Selecionar todos

***************************
static FUNCTION ConsultarCEP
***************************
LOCAL oHttp, cXML, cCep
LOCAL cRes, cResTxt, cUf, cCidade, cTipo, cEnde, cBairro
 
DO WHILE .T.
	IF M->CEP = SPACE(09)
	   RETURN .F.
	ENDIF
	oHttp:= TIpClientHttp():new( "http://www.jpatecnologia.com.br/cep.asp?cep="+M->Cep+"&clipper=1" )
	IF ! oHttp:open()
		Alert( "Erro na conexů: "+ oHttp:lastErrorMessage() )
		RETURN .T.
	ENDIF
	cXML := oHttp:readAll()
	oHttp:close()

	IF Empty(cXML)
**		alert( "Ocorreu um erro inesperado. Tente outro CEP...")
		return .t.
	ENDIF


	cUf 		:= Substr( cXML, At("<uf>",cXML)+4, At("</uf>",cXML)-At("<uf>",cXML)-4 )
	cCidade		:= Substr( cXML, At("<cidade>",cXML)+8, At("</cidade>",cXML)-At("<cidade>",cXML)-8 )
	cEnde		:= Substr( cXML, At("<logradouro>",cXML)+12, At("</logradouro>",cXML)-At("<logradouro>",cXML)-12 )
	cBairro		:= Substr( cXML, At("<bairro>",cXML)+8, At("</bairro>",cXML)-At("<bairro>",cXML)-8 )

	IF LEN(cEnde) # 0
	   M->ENDER := cEnde+space(60-len(cEnde))
	endif
	IF LEN(cBairro) # 0
	   M->BAIR  := cBairro+SPACE(50-LEN(Cbairro))
	endif   
	IF LEN(cCidade) # 0
		M->CIDADE:= cCidade+space(50-len(cCidade))
	endif
	IF LEN(cUf) # 0
		M->UF:= cUf+space(02-len(cCidade))
	endif
	return .t.
 	
ENDDO
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Fernando queiroz »

Marcos
respondendo a sua indagação se a função é clipper, ela esta funcionando em HARBOUR o parâmetro clipper nela é somente para retornar todas as letras em MAIÚSCULAS E SEM ACENTOS



#include "hbgtinfo.ch" no .PRG
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por JoséQuintas »

Dividindo em etapas:

Código: Selecionar todos

PROCEDURE Main

   LOCAL cCep := Space(8), cEndereco := Space(40), cBairro := Space(20), cCidade := Space(20), cUF := Space(2)
   CLS
   @ 2, 20 GET cCep PICTURE "99999-999" VALID CepOk( @cCep, @cEndereco, @cBairro, @cCidade, @cUF )
   @ 3, 20 GET cEndereco
   @ 4, 20 GET cBairro
   @ 5, 20 GET cCidade
   @ 6, 20 GET cUF
   READ

   RETURN

FUNCTION CepOk( mCep, mEndereco, mBairro, mCidade, mUf, mPesquisa )

   LOCAL mTexto

   hb_Default( @mPesquisa, .T. )
   IF Val( SoNumeros( mCep ) ) == 0 .OR. ! mPesquisa
      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.

FUNCTION WebCep( cCep )

   LOCAL cTexto

   WSave()
   Mensagem( "Consultando CEP nos correios, ESC abandona" )
   cTexto := DownloadTexto( ;
      "http://www.jpatecnologia.com.br/cep.asp" + ;
      "?cep=" + cCep + ;
      "&usuario=pctoledo"+ ;
      "&empresa=pctoledo" + ;
      "&CLIPPER=1" )
   WRestore()
   cTexto := iif( ValType( cTexto ) == "C", cTexto, "" )

   // Talvez salvar neste ponto

   RETURN cTexto

FUNCTION DownloadTexto( cUrl )

   LOCAL oSoap, cRetorno, aRetorno, nAscii

   cRetorno := ""
   BEGIN SEQUENCE WITH __BreakBlock()
      oSoap := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
      oSoap:Open( "GET", cUrl, .F.)
      oSoap:Send()
      aRetorno := oSoap:ResponseBody()
      IF ValType( aRetorno ) == "C"
         cRetorno := aRetorno
      ELSE
         cRetorno := ""
         FOR EACH nAscii IN aRetorno
            cRetorno += Chr( nAscii )
         NEXT
      ENDIF
   END SEQUENCE

   RETURN cRetorno
As funções extras são do meu aplicativo, mas pelo nome pode fazer equivalente - SE PRECISAR.

SoNumeros() - retorna só os números
WSave(), WRestore() - salva tela/restaura
Mensagem(), MsgExclamation(), etc.... - mensagens
XmlNode() - extrair blocos de XML. Tem na SefazClass a mais nova.
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

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por JoséQuintas »

Nota

Está separado porque:

- A rotina de baixar algo da internet serve pra muita coisa, não só pro CEP
- A rotina de consultar CEP pode ser usada em outras formas
- Validar o CEP pra preencher automático, tem a rotina própria
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
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Marcos »

Obrigado a todos pelo retorno, mas não tenho conhecimento suficiente para portar isto tudo para harbour. Alguém teria algo pronto para harbour?
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por JoséQuintas »

Obrigado a todos pelo retorno, mas não tenho conhecimento suficiente para portar isto tudo para harbour. Alguém teria algo pronto para harbour?
Fiquei confuso, porque a rotina postada já é em Harbour.
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
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Marcos »

JoséQuintas, na verdade sou Eu que fiz confusão, vou testar e reporto o resultado, desculpe a falta de experiência.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Marcos »

JoséQuintas, veja abaixo a rotina feita separadamente, não retornou nenhum resultado, acredito que esta faltando alguma coisa por ser GUI, pode me ajudar ?

Código: Selecionar todos

#include 'minigui.ch'

function Consulta_Cep()
local cCep     := ''
local cEndereco:= ''
local cBairro  := ''
local cCidade  := ''
local cUF      := ''
define window form_cep;
   at 000,000;
   width 500;
   height 305;
   title 'Consultar Cep (online)';
   icon 'ICONEZED';
   modal;
   nosize
   @ 030,005 label lbl_cep;
      of form_cep;
      value 'CEP';
      autosize;
      font 'tahoma' size 010;
      bold;
      fontcolor _preto_001;
      transparent
   @ 030,070 textbox tbox_cep;
      of form_cep;
      height 027;
      width 85;
      value cCep;
      font 'tahoma' size 010;
      backcolor _fundo_get;
      fontcolor _letra_get_1;
      inputmask '99999-999'
   @ 060,005 label lbl_endereco;
      of form_dados;
      value 'Endereço';
      autosize;
      font 'tahoma' size 010;
      bold;
      fontcolor _preto_001;
      transparent
   @ 060,070 textbox tbox_endereco;
      of form_cep;
      height 027;
      width 380;
      value cEndereco;
      font 'tahoma' size 010;
      backcolor _fundo_get;
      fontcolor _letra_get_1
   @ 090,005 label lbl_bairro;
      of form_dados;
      value 'Bairro';
      autosize;
      font 'tahoma' size 010;
      bold;
      fontcolor _preto_001;
      transparent
   @ 090,070 textbox tbox_bairro;
      of form_cep;
      height 027;
      width 280;
      value cBairro;
      font 'tahoma' size 010;
      backcolor _fundo_get;
      fontcolor _letra_get_1
   @ 0120,005 label lbl_cidade;
      of form_dados;
      value 'Cidade';
      autosize;
      font 'tahoma' size 010;
      bold;
      fontcolor _preto_001;
      transparent
   @ 0120,070 textbox tbox_cidade;
      of form_cep;
      height 027;
      width 250;
      value cCidade;
      font 'tahoma' size 010;
      backcolor _fundo_get;
      fontcolor _letra_get_1
   @ 0160,005 label lbl_uf;
      of form_dados;
      value 'UF';
      autosize;
      font 'tahoma' size 010;
      bold;
      fontcolor _preto_001;
      transparent
   @ 0160,070 textbox tbox_uf;
      of form_cep;
      height 027;
      width 30;
      value cUf;
      font 'tahoma' size 010;
      backcolor _fundo_get;
      fontcolor _letra_get_1
   define label linha_rodape
      col 000
      row form_cep.height-090
      value ''
      width form_cep.width
      height 001
      backcolor _preto_001
      transparent .F.
   end label
   *  botões
   define buttonex button_ok
      picture 'IMG_BUSCA'
      col form_cep.width-225
      row form_cep.height-085
      width 120
      height 050
      caption 'Ok, buscar'
      action CepOk( @cCep, @cEndereco, @cBairro, @cCidade, @cUF )
      fontbold .T.
      tooltip 'Buscar online as informações Digitadas'
      flat .F.
      noxpstyle .T.
   end buttonex
   define buttonex button_cancela
      picture 'IMG_VOLTAR'
      col form_cep.width-100
      row form_cep.height-085
      width 090
      height 050
      caption 'Voltar'
      action form_cep.release
      fontbold .T.
      tooltip 'Sair desta tela sem gravar informações'
      flat .F.
      noxpstyle .T.
   end buttonex
end window
form_cep.center
form_cep.activate
return(nil)
*-------------------------------------------------------------------------------
static function CepOk( mCep, mEndereco, mBairro, mCidade, mUf, mPesquisa )
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 ) )
******ACRESCENTEI ESTA PARTE ****
if form_cep.tbox_endereco.Value = mEndereco
   msgstop('Esta aqui', + mEndereco)
else
   msgstop('Esta aqui')
endif
**************************************
RETURN NIL
*-------------------------------------------------------------------------------
FUNCTION WebCep( cCep )
LOCAL cTexto
*Mensagem( "Consultando CEP nos correios, ESC abandona" )
cTexto := DownloadTexto( ;
         "http://www.jpatecnologia.com.br/cep.asp" + ;
	      "?cep=" + cCep + ;
	      "&usuario=pctoledo"+ ;
	      "&empresa=pctoledo" + ;
	      "&CLIPPER=1" )

	   cTexto := iif( ValType( cTexto ) == "C", cTexto, "" )

	   // Talvez salvar neste ponto
RETURN cTexto
*-------------------------------------------------------------------------------
FUNCTION DownloadTexto( cUrl )
LOCAL oSoap, cRetorno, aRetorno, nAscii
cRetorno := ""
BEGIN SEQUENCE WITH __BreakBlock()
   oSoap := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oSoap:Open( "GET", cUrl, .F.)
   oSoap:Send()
   aRetorno := oSoap:ResponseBody()
   IF ValType( aRetorno ) == "C"
      cRetorno := aRetorno
   ELSE
      cRetorno := ""
      FOR EACH nAscii IN aRetorno
         cRetorno += Chr( nAscii )
      NEXT
   ENDIF
END SEQUENCE
RETURN cRetorno
*-------------------------------------------------------------------------------
FUNCTION XmlNode( cXml, cNode, lComTag )
LOCAL nInicio, nFim, cResultado := ""
hb_Default( @lComTag, .F. )
nInicio := At( "<" + cNode, cXml )
// a linha abaixo é depois de pegar o início, senão falha
IF " " $ cNode
cNode := Substr( cNode, 1, At( " ", cNode ) - 1 )
ENDIF
IF nInicio != 0
IF ! lComTag
 nInicio := nInicio + Len( cNode ) + 2
 IF nInicio != 1 .AND. Substr( cXml, nInicio - 1, 1 ) != ">" // Quando tem elementos no bloco
   nInicio := hb_At( ">", cXml, nInicio ) + 1
 ENDIF
ENDIF
nFim := hb_At( "</" + cNode + ">", cXml, nInicio )
IF nFim != 0
 nFim -=1
 IF lComTag
   nFim := nFim + Len( cNode ) + 3
 ENDIF
 cResultado := Substr( cXml, nInicio, nFim - nInicio + 1 )
ENDIF
ENDIF
RETURN cResultado
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Toledo »

Amigo, tente estas modificações:

Código: Selecionar todos

  @ 030,070 textbox tbox_cep;
	      of form_cep;
	      height 027;
	      width 85;
	      value cCep;
	      font 'tahoma' size 010;
	      backcolor _fundo_get;
	      fontcolor _letra_get_1;
	      inputmask '99999-999';
	      on enter {|| CepOk(StrTran(form_cep.tbox_cep.Value,"-",""))}

Código: Selecionar todos

static function CepOk( mCep )
mTexto := WebCep( mCep )
form_cep.tbox_uf.Value := Pad( XmlNode( mTexto, "uf" ), 2 )
form_cep.tbox_cidade.Value := Pad( XmlNode( mTexto, "cidade" ), 25 )
form_cep.tbox_bairro.Value := Pad( XmlNode( mTexto, "bairro" ), 25 )
form_cep.tbox_endereco.Value := Pad( XmlNode( mTexto, "logradouro" ), 40 )
RETURN NIL
No campo CEP digite o cep e depois pressione ENTER.

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

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por JoséQuintas »

A minigui não aceita algo assim?

Código: Selecionar todos

... on enter { || CepOk( @form_cep.tbox_cep.Value, @form_cep.tbox_endereco.Value, @form_cep.tbox_bairro.value, @form_cep.tbox.cidade.value, @form_cep.tbox_uf.value ) }
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
Marcos
Usuário Nível 3
Usuário Nível 3
Mensagens: 355
Registrado em: 20 Set 2003 09:16
Localização: Cáceres/Mato Grosso

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Marcos »

Mestres Toledo e JoséQuintas não deu certo nenhuma opção, se colocar no evento on enter não acontece nada, se colocar no evento action do botão dá erro.
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por Toledo »

Amigo, segue em anexo o seu código com as alterações que passei na minha mensagem anterior.

Abraços,
Anexos
cepdemo.rar
(512.87 KiB) Baixado 272 vezes
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

Consultar e Importar Cep da Internet para o Sistema.

Mensagem por JoséQuintas »

Fugindo um pouco do assunto principal, mas sobre o exemplo postado:
Dá pra gerar a minigui que foi usada nesse exemplo com Harbour 3.4?
Como chegar até ela?

Sei que tem pelo menos 3 versões de minigui, e geralmente com Harbour próprio, então não sei se isso é possível, ou quais os caminhos.
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