05th fev 2009

Consulta livre em base de CEPs com PHP

Sempre foi uma guerra conseguir uma base dos CEPs do Brasil com os respectivos endereços;  os Correios até hoje mantém a base deles fechada, só disponibilizam comercialmente.

O Almir lá do Poomax postou essa semana uma notícia sobre uma empresa que abriu a sua base de CEPs para consulta, via requisição HTTP, num serviço batizado de CEP Livre. O retorno pode ser em CSV ou XML. A base é totalmente aberta, todos podem usar – inclusive comercialmente – e os usuários podem alimentá-la com novos endereços, correções, etc…

Fui testar e funciona muito bem. Aproveitei e resolvi dar uma ajuda, criando um service em PHP que recebe um CEP no formato XXXXX-XXX, faz a requisição no servidor do CEP Livre e retorna os dados para serem tratados, como quiserem, no PHP.

Não vou entrar no detalhe da implementação – tem um exemplo de uso online e o código fonte para download está aqui. Conhecimentos mínimos de PHP são o suficiente para o uso da mesma

A classe que faz a requisição e todo tratamento do XML é a CEPLivreService (ver CEPLivreService.php). Use o método buscaEndereco(String CEP) – passe o CEP como String no formato XXXXX-XXX – e ele retornará um objeto CEP (ver o arquivo CEP.php, que faz o papel de um bean). Esse objeto tem, entre alguns métodos, os seguintes mais importantes:

  • getStatus() – 1 para endereço associado ao CEP, 0 para nenhum endereço
  • getTipoLogradouroDesc() - descrição do tipo de logradouro (rua, avenida, etc…)
  • getLogradouro() – logradouro
  • getBairro() – bairro
  • getCidade() - cidade
  • getUf() – unidade da Federação (por extenso)
  • getUfSigla() – unidade da Federação (sigla, por exemplo SP)
  • getCep() – o próprio CEP

Exemplo de uso (faça download para um completo):

<?php
require(“CEPLivreService.php”);
$service = new CEPLivreService();
$address = $service->buscaEndereco(“06766-000″);
echo $address->getTipoLogradouroDesc() . ” ” . $address->getLogradouro();
?>

Sintam-se a vontade para alterar, modificar, corrigir!

Posts relacionados

Avalie

1 estrela2 estrelas3 estrelas4 estrelas5 estrelas (No Ratings Yet)

23 Responses to “Consulta livre em base de CEPs com PHP”

  1. Almir Neto says with Firefox on Windows XP

    Parabéns pela Classe Chris!

    Almir Neto
    http://www.poomax.com.br

  2. Tárcio Zemel says with Firefox on Windows XP

    Pessoal da República Virtual tem webservice para consulta de CEPs (dentre outros).

  3. Chris says with Firefox on Ubuntu 8.10

    Não conhecia esse, Tárcio! Valeu pela dica ;)

  4. Sergio Costa says with Firefox on Windows XP

    Seu trabalho, junto com a iniciativa do pessoal da (PC)² , pouparam-me um bocado de tempo e me permitiram implementar um recurso pra lá de útil no sistema da empresa. Obrigado, de coração!

  5. Chris says with Firefox on Mac Os X 10.5

    Que bacana, Sergio! Bom que ajudou!

    Em breve vou fazer um post sobre como utilizar esse sistema com a biblioteca para integrar PHP com ajax que fiz! Ficou bacana!

    []s!

  6. Alex says with Internet Explorer on Windows XP

    Muito legal mesmo esta classe. Não cheguei a olhar todos os detalhes….mas não vi como retornar o CEP passando uma parte do nome do logradouro. Esta função está sendo feita ou tá pronta e eu não vi?
    Valeu

  7. Chris says with Firefox on Mac Os X 10.5

    Olá Alex! Obrigado pelo elogio!
    Não existe uma busca de CEP pelo logradouro; a API fornecida pela PC2 apenas disponibiliza busca de logradouros por CEP.
    Se a mesma disponbilizar essa consulta, eu a implemento nessa classe e disponibilizo!

    []s!

  8. Chris B. - idéias e pensamentos » Blog Archive » Consulta de CEP em ajax says with Wordpress

    [...] 5th, 2009 Resolvi juntar duas bibliotecas que fiz (e estão disponibilizadas no site): a de consulta de endereço por CEP e a JS Calls PHP (interação entre javascript e PHP) para criar uma consulta de endereços [...]

  9. Sergio Costa says with Firefox on Windows XP

    Chris, nao sei se vc já notou ou corrigiu isso, mas a passagem dos parâmetros “estado” e “estado_sigla” está invertida quando você cria uma instância da classe CEP, no arquivo CEPLivreService.php (aqui, tá nas linhas 59 e 60). Só trocar uma linha pela outra e pronto, resorvido!

    Abraço!

  10. Chris says with Firefox on Ubuntu 8.10

    Sérgio, não tinha notado isso, não! Valeu, vou arrumar!

  11. Christian says with Internet Explorer on Windows XP

    Pessoal, boa noite. eu estou com uma planilha em excel para analisar os cadastros da minha empresa. Existe alguma maneira de eu inserir um código no excel pra fazer a consulta e alimentar minha planilha, para que eu possa comparar os endereços ? São 1800 linhas de cadastro, fica lento fazer um por um.

    Obrigado

  12. Chris says with Firefox on Mac Os X 10.5

    @Christian (xará?!?!) uma forma é você criar uma macro que faça a consulta a esse serviço… pelo que vejo, existem várias opções de implementação, mas não vejo uma forma simples.

  13. Christian says with Internet Explorer on Windows XP

    É xará….acabei pegando um arquivo de ceps em mdb e exportei proexcel, depois fiz uns procvs e resolvi a parada….só não sei qão atualizado está esse arquivo, mas já ajudou bastante….

    Obrigado,

    Christian

  14. Christian says with Internet Explorer on Windows XP

    Fala Xará, beleza ? baixei seus fontes e testei elo modelo online; nenhum dos dois está funcionando….sabe o motivo ?

    Obrigado,

    Christian

  15. Chris says with Firefox on Mac Os X 10.5

    Estranho, Christian, pois re-testei aqui – inclusive é o mesmo que http://www.chrisb.com.br/exemplos/basecep/form.html – e está funcionando corretamente para os CEPs que consultei.
    Você digitou no formato certo? (XXXXX-XXX)

  16. Sergio Costa says with Firefox on Windows Vista

    Oi Chris

    Depois de uma atualização no host onde hospedo o site da empresa, seu código para consulta de CEP parou de funcionar. Habilitei a exibição de erros e acabei descobrindo que eles desabilitaram no php.ini as opções allow_url_fopen e allow_url_include. Abri um chamado de suporte no webhost, mas ainda nao tive resposta.

    Pode ser que seja o caso do amigo acima, então, será que tem alguma maneira rápida de contornar essa restrição (um bom POG pra sua coleção, quem sabe) ?

    Um abraço!

  17. Chris says with Firefox on Mac Os X 10.5

    Sergio, muito estranho terem desabilitado o allow_url_fopen… dei uma procurada rápida no Google, e vi uma página de muitas pessoas com esse problema
    http://www.bigresource.com/PHP-ISP-turned-allow_url_fopen-off-i7T6BLUB.html

    Vou dar uma olhada com calma em como poderia mudar isso, mas a princípio é uma coisa que o servidor não deveria bloquear…

    Obrigado!

  18. Christian says with Internet Explorer on Windows XP

    Cara, na verdade todos os ceps que estou tentando validar não constam na base. Tentei um cep manjado e funcionou.

    Obrigado,

    Christian

  19. Edson says with Firefox on Windows XP

    Chris,

    Parabéns por sua iniciativa por disponibilizar o código fonte.

    É uma grande contribuição a esse projeto que acredito assim como muitos que o CEP deva ser acessível a todos.

  20. Chris says with Firefox on Mac Os X 10.5

    Edson, quanto mais gente disponibilizar o código fonte dos seus projetos e afins, mais a comunidade open source vai crescer e mais projetos maduros teremos! Obrigado!
    []s!

  21. Renato says with Firefox on Ubuntu 8.10

    O arquivo *.ZIP com os fontes sumiu?

  22. Chris says with Firefox on Mac Os X 10.5

    Renato, parece que o servidor está bloqueando arquivos .zip… vou entrar em contato com o meu serviço de hospedagem e ver o que aconytece.
    Por enquanto, dá para baixar por aqui http://www.chrisb.com.br/cep/cep.zip.bkp, dpeois é só tirar o .bkp do final

    Obrigado por avisar!

  23. Valdeir Antonio says with Internet Explorer on Windows -1

    Cris,

    Muito bom, esta funcionando legal. agora fui usar esse cep 54800-000 e ele não encontrou. qual o procedimento para cadastra esse novo CEP

Leave a Reply