05th mar 2009
Consulta de CEP em ajax
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 através do CEP usando requisição assíncrona.
No pacote, há um arquivo cep.htm e a subpasta jscallsphp; não é necessário alterar nada na pasta ou nos arquivos delas, já está configurada pronta para uso.
O cep.htm contém um exemplo de uso (veja funcionando). Só é necessário fazer a chamada aos arquivos da JS Calls PHP. Com isso, no javascript você terá no contexto um objeto chamado cepLivre que possui o método buscaEndereco(String cep). O CEP deve ser passado no formato XXXXX-XXX.
No exemplo, passei também uma função de callback que trata retorno do método; é retornado um objeto com vários atributos que possuem as informações do endereço. Os atributos são:
- status – 1 para CEP válido, 0 para inválido
- tipoLogradouroDesc - descrição do tipo de logradouro (rua, avenida, etc…)
- logradouro – logradouro
- bairro – bairro
- cidade - cidade
- uf – unidade da Federação (por extenso)
- ufSigla – unidade da Federação (sigla, por exemplo SP)
- cep – o próprio CEP
Dúvidas e sugestões, são bem vindos.
[UPDATE] Esqueci de expor que todo esse pacote está disponibilizado sob a licença GPL. Sintam-se livres para baixar, usar e modificar. Obrigado a quem avisou! [/UPDATE]

Oi Chris!
Excelente ferramenta! Pretendo usar, mas fiquei curioso sobre o porque de você não colocar nenhuma informação de autoria ou licenciamento nos arquivos? Desconsidere se já houver, mas é que não vi nada quando li, e olha que eu também pesquisei em todos os arquivos usando um one-liner de cat e grep basicamente(vício feio da época que eu usava Slackware). Agora você me dá licença que eu vou brincar um pouquinho com elas!
Valeu pelos elogios!
Na verdade, o pacote original da JS Calls PHP vem com um readme.txt que fala da licensa – GPL.
De qualquer forma, esqueci de comentar mesmo.
Bem, o uso é livre, pode ser usado em qualque aplicação, o código pode ser modificado livremente. Open source na cabeça! hehe
Abraços, e se possível dê feedback
É.. realmente muito bom essas bibliotecas, alivia um bocado o serviço hehe
você estuda o que!?
Abs,
Tudo bem, já havia descoberto isso hoje após uma googlada. E quanto ao feedback, acho que seria legal já ter um noscript no cep.html avisando aos usuários sem javascript, ou com ele desabilitado, que a funcionalidade seria limitada. Sei que é obrigação de quem for fazer uma página usando esta ferramenta de se preocupar com este tipo de coisa, mas você sabe como é, nem todo mundo presta atenção nestes detalhes e não custa nada ajudar! Por enquanto é só!
Abraço!
Thiago, uma vez que é uma biblioteca para requisições assíncronas via javascript, parti do princípio que não seria necessário fazer isso no .html de exemplo, até porque foge do escopo do exemplo (desculpe a redundância! hehe) além do que é uma biblioteca voltada a desenvolvedores e não o usuário final.
Mas, valeu pelo toque!
Abraço!
Para quem baixou a biblioteca e teve problema: corrigi um erro na configuração. Mandei o config.php que uso localmente ao invés de usar o config.php do servidor aqui do blog. Corrigi o .zip, está okey agora!
Cara, excelente tool que criou ! Essa é daquelas “óbvias que ninguém pensou em fazer” manja ? Isso é uma PUTA mão na roda !
A base você está buscando no server da republica(algumacoisa) ou de outro canto ?
Baixei aqui, vou dar uma olhada no código e daí depois volto e comento – aqueles comentários técnicos, longos e (chatos de ler)
Ah sim, esqueci: vou usar sem dúvidas a partir de hoje, ó
Parabéns mano !
Abração !
Ah, na verdade alguém já tinha pensado; os caras que fizeram o DWR, que é um framework para aplicações java! Eu peguei a idéia e implementei aqui pro PHP! hehe
A base, eu uso a que uma consultoria disponibiliza. Parece que é deles, estão populando na mão, para ser uma base “open”, sem ter necesidade de pagar a licensa pros correios. E disponibilizam uma consulta por http, que retorna um xml com os dados do endereço.
Tem o link para o site dos caras no post linkado ali no começo do texto!
Vlw!
EXCELENTE, Chris! Demais, MESMO!
Estou em desenvolvimento de um projeto com uma colega e no cadastro precisaríamos justamente de algo assim. Caiu como uma luva de pelica!
Só uma dúvida, como fazer para manter atualizada a “base” de CEPs?
Cara, dá uma olhada aqui: http://www.chrisb.com.br/blog/consulta-livre-em-base-de-ceps-com-php/
Ali explico de onde é feita a consulta. Basicamente é uma base de dados open source que uma consultoria abriu uma “API” (tem uma URL para a qual você passa o CEP como parámetro e ele retorna um XML).
No post ali tem todos o link pro site do projeto e mais infos!
E que bacana quer curtiu e ajudou! Entre em contato qq. coisa!
[]s!
Cara..mto bomo script…mas se voce consultar na base do correio o cep: 37550-000 verá que vai retornar mais de 1 endereço, e este serviço do cep livre nao esta 100%..
=/
mas vlw!!
Chris, seu script é muito bom. Tenho um parecido com ele…
Mas como todo desenvolvedor tenho que testar a aplicação em todos os navegadores.
o que aconteceu é que essa funcionalidade não da certo em nenhum IE.
Eu não uso ie mas meus clientes usam…
se souber de alguma solução me avisa por favor
se eu conseguir resolver eu posto aqui o link.
vlw.
[]s
Olá André!
Muito obrigado, primeiramente, por ter se interessado pela biblioteca.
Vi aqui e o erro na verdade nem é da JS Calls PHP em si, mas sim do exemplo que eu montei para teste unitário; estava usando o Dreamweaver para fazer o código e usei o autocompletar para inserir os scripts do js, e ao invés de colocar type=”text/javascript” acabou sendo inserido “application/javascript”.
Corrigi o teste unitário do CEP (http://www.chrisb.com.br/jscallsphp/unit/teste_cep.php) e está funcionando corretamente; hoje de noite vou refazer todos os htmls dos testes unitários e atualizar o pacote!
Obrigado denovo!
[...] aproveitei essa atualização para corrigir um bug reportado pelo André nas páginas de exemplos, que gerava erro no IE (o erro era nos htmls dos exemplos, nada a ver com a [...]
o link de download está quebrado
Ronaldo, fiz uma migração de servidor exatamente porque o antigo não estava aceitando arquivos .zip e tinha esquecido de voltar algumas coisas… corrigi o link!
Obrigado por avisar
Ola, ja tem uma base de dados atualizada para esse ano?
Por exemplo.. o CEP 46530000 – nao aparece nessa busca e nos correios ja aparecem.. peguei esse aleatorio, não testei outros..
Se alguém ainda acessar esse tópico e puder responder.. agradeceria..
Valeu!