Bom dia Asimoes,
Estou enviando a rotina, e se não me engano, quem passou foi o Sygecom, portanto, não são meus os créditos.
Código: Selecionar todos
static function buscar_endereco()
Local oUrl,opg,cUrl:=cBuf:=aUF:=aCID:=aBAI:=aLOG:=aCEP:="",nPos:=0
Local aRet := {}
local x_cep := form_registro.gbox_cep_remext.value
local cCEP := space(08)
if Inetestaconectada() == .F.
msgexclamation('Este computador não possui acesso a Internet','Atenção')
return(nil)
endif
if empty(x_cep)
msgexclamation('Primeiro digite um CEP','Atenção')
form_registro.gbox_cep_remext.setfocus
return(nil)
endif
cCEP := alltrim(x_cep)
oUrl:=turl():New("http://www.correios.com.br/servicos/dnec/consultaLogradouroAction.do?Metodo=listaLogradouro&CEP="+ cCEP + "&TipoConsulta=cep")
cUrl:="http://www.correios.com.br/servicos/dnec/consultaLogradouroAction.do?Metodo=listaLogradouro&CEP=" + cCEP + "&TipoConsulta=cep"
opg := TipClientHttp():New( oUrl ,.t.)
opg:nConnTimeout := 20000
if opg:Open( cUrl )
oPg:Post("?Metodo=listaLogradouro&CEP=" + cCEP + "&TipoConsulta=cep") //ResponseText
cUrl:="http://www.correios.com.br/servicos/dnec/detalheCEPAction.do?Metodo=detalhe&Posicao=1&TipoCep=2&CEP=$query"
opg:Open( cUrl )
oPg:Post("?Metodo=detalhe&Posicao=1&TipoCep=2&CEP=$query") //ResponseText
cBuf := opg:readAll()
cBuf = Stuff(cBuf,1,at('Logradouro:',cBuf)-87,"")
cBuf = Stuff(cBuf,at('</table>',cBuf)+8,len(cBuf),"")
nPos := at("value",cBuf)+7
aLOG := substr(cBuf, nPos, at('</td>', cBuf, nPos) - nPos)
nPos := at("value",cBuf,nPos)+7
aBAI := substr(cBuf, nPos, at('</td>', cBuf, nPos) - nPos)
nPos := at("value",cBuf,nPos)+7
aCID := substr(cBuf, nPos, at('/', cBuf, nPos) - nPos)
aUF := substr(cBuf, at('/', cBuf, nPos)+1, 2)
nPos := at("value",cBuf,nPos)+7
aCEP := substr(cBuf, nPos, at('</td>', cBuf, nPos) - nPos)
opg:close()
if cCEP == strtran(aCEP,'-')
aadd( aRet, aLOG )
aadd( aRet, aBAI )
aadd( aRet, aCID )
aadd( aRet, aUF )
aadd( aRet, aCEP )
endif
endif
if len(aRet) = 0
msgexclamation('Cep não encontrado','Atenção')
else
setproperty('form_registro','gbox_endereco_remext','value',aRet[1])
setproperty('form_registro','gbox_bairro_remext','value',aRet[2])
setproperty('form_registro','gbox_cidade_remext','value',aRet[3])
setproperty('form_registro','gbox_uf_remext','value',aRet[4])
endif
return(nil)
Eu uso xHarbour e MiniGUI, se vc usa outra lib gráfica, é bem fácil portar, só mudar as chamadas de tela.
Como vc vê no código, basta chamar a função no action de um botão por exemplo, que ele faz o serviço, se estiver tudo ok, usando o setproperty, eu preencho os respectivos campos com as informações encontradas.
Abaixo segue o código da função inetestaconectada()
Código: Selecionar todos
function inetestaconectada( cAddress )
LOCAL aHosts
LOCAL cName
InetInit()
IF cAddress == NIL
cAddress := "www.google.com.br"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .or. len(aHosts)=0
InetCleanup()
RETURN .f.
endif
InetCleanup()
RETURN .t.
Abraços
Marcelo Neves