Página 1 de 1

Rastrear objeto no site dos Correios

Enviado: 15 Jul 2009 22:45
por software_facil
Prezados, alguém já fez rotina para pesquisar o andamento de um objeto pelo site
dos Correios ? Tenho uma rotina que busca o endereço através do cep, no site dos
Correios, mas não consegui adaptar para fazer essa nova tarefa.

Abraços

Marcelo Neves

Re: Rastrear objeto no site dos Correios

Enviado: 16 Jul 2009 07:57
por asimoes
Olá Marcelo,

Eu não tenho, mas fiquei interessado na rotina de consulta do endereço pelo cep no site dos correios, você poderia publicar aqui no forúm?

[]´s

Re: Rastrear objeto no site dos Correios

Enviado: 16 Jul 2009 08:43
por software_facil
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

Re: Rastrear objeto no site dos Correios

Enviado: 16 Jul 2009 10:42
por asimoes
Marcelo,

Obrigado pela dica.

Onde eu encontro esta função setproperty?

[]´s

Re: Rastrear objeto no site dos Correios

Enviado: 16 Jul 2009 15:03
por HASA
software_facil escreveu:função setproperty
:)) A função setproperty() faz parte da MINIGUI.lib ok
Honório