Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fábio BN

Busca de CEPs em Base dos Correios

Recommended Posts

Oi Pessoal.

 

Eu li em alguns fóruns e blogs que o Correio permite fazer consulta de CEPs através do LINK:
http://m.correios.com.br/movel/buscaCepConfirma.do

Onde fazemos uma busca enviando o CEP e ele retorna o endereço de uma base atualizada.

 

Contudo, não achei nenhum exemplo em ASP e nem XML, achei exemplos do tipo abaixo:

class BuscaCEP
{
    protected function formata($response)
    {
        $dom = new DOMDocument();
        @$dom->loadHTML($response);
        $xpath = new DOMXPath($dom);
        $values = $xpath->query('//*[@class="respostadestaque"]');
        $result = [];

        // Se não encontrar CEP, retorna false
        if (!$values->length) {
            return false;
        }

        // Obtém informações desejadas, tratando-as quando necessário
        foreach ($values as $value) {
            $result[] = preg_replace(
                '~[\s]{2,}~',
                '',
                trim($value->childNodes->item(0)->nodeValue)
            );
        }

        list($logradouro, $bairro, $localidade, $cep) = $result;
        list($localidade, $uf) = explode('/', $localidade);

        return compact('logradouro', 'bairro', 'localidade', 'uf', 'cep');
    }

    public function busca($cep)
    {
        $response = file_get_contents(
            'http://m.correios.com.br/movel/buscaCepConfirma.do',
            false,
            stream_context_create([
                'http' => [
                    'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
                    'method' => 'POST',
                    'content' => http_build_query([
                        'cepEntrada' => $cep,
                        'metodo' => 'buscarCep',
                    ]),
                ],
            ])
        );

        return $this->formata($response);
    }
}

Alguém tem algum exemplo em ASP?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu encontrei um exemplo em ASP no LINK:
http://prof-fabiano.blogspot.com.br/2014/05/webservice-consulta-de-cep-diretamente.html

 

E fiz pequenas alterações:

<%

function fixAcento(sDec) 
  dim objRE
  set objRE = new RegExp
  
  sDec = Replace(sDec, "+", " ")
  objRE.Pattern = "%([0-9a-fA-F]{2})"
  objRE.Global = True
  fixAcento = objRE.Replace(sDec, GetRef("fixAcentoHex")) 
end Function

function fixAcentoHex(sMatch, lhex_digits, lpos, ssource)
  fixAcentoHex = chr("&H" & lhex_digits)
end Function

  dim webservice_query(2)
  Dim Parsed(9,9)

  webservice_url = "http://m.correios.com.br/movel/buscaCepConfirma.do"

  webservice_query(0) = ".//*[@class='resposta']"   'CHAVE DE AUTENTICAÇÃO DO WEBSERVICE
  webservice_query(1) = ".//*[@class='respostadestaque']" ' VALORES POSSÍVEIS: XML, QUERY_STRING OU JAVASCRIPT
  webservice_query(2) = "01310000" ' CEP QUE SERÁ PESQUISADO


  webservice_url = webservice_url &"?"&_ 
    "auth="&_
  webservice_query(0)&_
    "&formato="&_
  webservice_query(1)&_
    "&cep="&_
  webservice_query(2)

  ' EFETUAR REQUISIÇÃO AO WEBSERVICE  
  set Xml = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0")
  
  Xml.open "GET", webservice_url, false
  Xml.send()
  Resultado = Xml.responseText
  Resultado = split( Resultado, "&")

  ' MONTANDO PARÂMETROS
  for e = 1 To ubound( Resultado)
    temporario = split( Resultado(e), "=")
    Parsed(e,0) = temporario(0)
    Parsed(e,1) = replace( temporario(1), "+", " ")
  next

  ' MONTANDO RESPOSTA
  select Case Parsed(1,1)

  case "2"
    texto = " "&_
    "Cidade com logradouro único "&_
    "Cidade: "&Parsed(4,1)&" "&_
    "UF: "&Parsed(3,1)

  case "1"
     texto = " "&_
     "Cidade com logradouro completo "&_
     "Tipo de Logradouro: "&Parsed(6,1)&" "&_ 
     "Logradouro: "&Parsed(7,1)&" "&_
     "Bairro: "&Parsed(5,1)&" "&_
     "Cidade: "&Parsed(4,1)&" "&_ 
     "UF: "&Parsed(3,1)
  end select

  ' PRINTANDO O RESULTADO NA TELA
  Response.Write fixAcento( texto )

  set Xml = nothing
  

%>

E está dando o erro:

Erro de tempo de execução do Microsoft VBScript erro '800a0009'

Subscrito fora do intervalo: '[number: 1]'

/cep.asp, line 47

 

Linha 47 tem: Parsed(e,1) = replace( temporario(1), "+", " ")

 

Abraços!

Fábio!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou com um Exemplo em PHP que funcionou perfeitamente:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sem título</title>
</head>

<body>



<?php
class BuscaCEP
{
    protected function formata($response)
    {
        $dom = new DOMDocument();
        @$dom->loadHTML($response);
        $xpath = new DOMXPath($dom);
        $values = $xpath->query('//*[@class="respostadestaque"]');
        $result = [];

        // Se não encontrar CEP, retorna false
        if (!$values->length) {
            return false;
        }

        // Obtém informações desejadas, tratando-as quando necessário
        foreach ($values as $value) {
            $result[] = preg_replace(
                '~[\s]{2,}~',
                '',
                trim($value->childNodes->item(0)->nodeValue)
            );
        }

        list($logradouro, $bairro, $localidade, $cep) = $result;
        list($localidade, $uf) = explode('/', $localidade);

        return compact('logradouro', 'bairro', 'localidade', 'uf', 'cep');
    }

    public function busca($cep)
    {
        $response = file_get_contents(
            'http://m.correios.com.br/movel/buscaCepConfirma.do',
            false,
            stream_context_create([
                'http' => [
                    'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
                    'method' => 'POST',
                    'content' => http_build_query([
                        'cepEntrada' => $cep,
                        'metodo' => 'buscarCep',
                    ]),
                ],
            ])
        );

        return $this->formata($response);
    }
}

// Rotina de Exibir
$buscarcep = new BuscaCEP();
$dados = $buscarcep->busca('01310000');
print_r($dados);

?>

</body>
</html>

Alguém saberia transcrever isto em ASP?

 

Obrigado!

 

Fábio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Pessoal.

 

Ninguém conseguiu nada a respeito deste tópico?
Eu infelizmente não entendi de certas coisas, mas me parece estar fácil resolver isso para quem entende de XML e ou DOM. Não entendi para que serve o $values = $xpath->query('//*[@class=respostadestaque]');

No PHP o código acima funciona, agora passar esse código para ASP somente para quem entende mesmo, estranho é que não se acha quase nada a respeito disso na rede, nem sobre o de buscar o endereço pelo CEP, acessando a base do correio diretamente, parece ser um assunto meio restrito, como se quem sabe não ensina, ou coisa assim.

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Pessoal.

Eu consultando em alguns outros locais, descobri um script que funciona.

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento sem título</title>
</head>

<body>



<%  '   
  '  Função de busca de Endereço pelo CEP   
  '  -   Desenvolvido Felipe Olivaes para ajaxbox.com.br   
  '  -   Adaptação de exemplo para utilização com ASP por Otávio Nogueira  
  '  -   Utilizando WebService de CEP da republicavirtual.com.br   
  '  
  
  'Remove Caracteres Especiais
  
  function fixAcento(sDec) 
  dim objRE
  set objRE = new RegExp
  
  sDec = Replace(sDec, "+", " ")
  objRE.Pattern = "%([0-9a-fA-F]{2})"
  objRE.Global = True
  fixAcento = objRE.Replace(sDec, GetRef("fixAcentoHex")) 
end Function

function fixAcentoHex(sMatch, lhex_digits, lpos, ssource)
  fixAcentoHex = chr("&H" & lhex_digits)
end Function
  'Remove Caracteres Especiais

   
  
function busca_cep( cep )  
  
    url = "http://republicavirtual.com.br/web_cep.php?cep="& cep &"&formato=query_string"  
      
    set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")   
    xmlhttp.open "GET", url, false   
    xmlhttp.send ""  
       
    xmlhttp_resultado = xmlhttp.responseText   
    set xmlhttp = nothing   
  
    arr_resultado = split( xmlhttp_resultado, "&" )  
  
    dim resultado(7)  
    for i = lbound( arr_resultado ) to ubound( arr_resultado )  
  
        resultado( i ) = arr_resultado( i )  
          
    next  
  
    arr = split( join( resultado, "=" ), "=" )  
  
    dim arr_2(14)  
    for i = lbound( arr ) to ubound( arr )  
  
        arr_2( i ) = replace( arr( i ), "+", " " )  
          
    next      
      
    busca_cep = arr_2  
end function  
  
 '   
 ' Exemplo de utilização    
 '    
     
 'Vamos buscar o CEP 90020022    
resultado = busca_cep( "01310000" )  
  
select case resultado( 2 )  
      
    case "2"  
    texto = " "&_  
         "Cidade com logradouro único" &_   
         "<b>Cidade: </b> "&resultado( 8 ) &" "&_  
         "<b>UF: </b> "&resultado( 5 )  
      
      
    case "1"  
    texto = " "&_  
         "Cidade com logradouro completo "&_  
         "<b>Tipo de Logradouro: </b> "&resultado( 12 ) &" "&_  
         "<b>Logradouro: </b> "&resultado( 14 ) &" "&_  
         "<b>Bairro: </b> "&resultado( 10 ) &" "&_   
         "<b>Cidade: </b> "&resultado( 8 ) &" "&_  
         "<b>UF: </b> "&resultado( 6 )  
      
    case else  
  
    texto = "Falha ao buscar cep: "& resultado( 4 )  
end select  

  Response.Write fixAcento( texto )

%> 

</body>
</html>

Não sei se tem como adaptar este script para puxar da base do Correio, mas por enquanto vou usar ele mesmo, não sei até quando que este servidor irá ficar ativo.

Abraços!

Fábio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Xanburzum.

No assunto informar um CEP e trazer o endereço, estou usando com ASP o "republicavirtual". É uma alternativa.

E no PHP estou usando o outro código que puxa direto da base do Correio.

 

Abraços!

 

Fábio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

e está funcionando ok

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. Funciona.

 

Eu só não consegui fazer funcionar em ASP na base de dados do LINK http://m.correios.com.br/movel/buscaCepConfirma.do
Mas em PHP funcionou.

No ASP funcionou o script do LINK: http://republicavirtual.com.br/web_cep.php

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.