em
CEP Livre

ceplivre – API de CEPs para formulários

Você provavelmente já deve ter passado por um daqueles formulários onde ao colocar o CEP da rua onde você mora, ele automaticamente preenche os outros campos com o seu endereço. Pois bem, por trás disso existe um simples código que busca em um banco de dados seu endereço através do seu CEP.

Até aí tudo bem, mas e para desenvolver uma engenhoca dessa? Manter o seu banco de dados com os CEPs de todo o brasil atualizados não é tarefa fácil, por isso indico a vocês um site que acabei descobrindo esses dias, o ceplivre, onde através do seu sistema provem informações básicas de endereços, códigos do IBGE, códigos DDD (Discagem Direta à Distância), altitude, área e coordenadas (latitude e longitude) de todas as cidades brasileiras.

Para você ter idéia, hoje o ceplivre conta com uma base de mais de 630.000 CEPs cadastrados que são atualizados diariamente. Manter uma base dessas atualizada não é tarefa fácil, por isso eles dispõem de diversos planos, desde o plano Free, onde você pode efetuar até 15 consultas por dia, até o Plano Premium, com pesquisas ilimitadas e acesso a todas as features do sistema.

O webservice do ceplivre é compatível com todas as principais linguagens de programação web, entregando dados em formatos CSV, XML e JSON. Para utilizar o sistema é simples, basta desenvolver uma rotina que faça acessos HTTP ao servidor, onde as URLs de pesquisa seguem a seguinte estrutura:


http://ceplivre.com.br/consultar/$tipo/$key/$busca/$formato

  • $tipo é o tipo de busca, por CEP (cep) ou por endereço (logradouro).
  • $key é a chave de autenticação enviada por e-mail na confirmação da assinatura.
  • $busca é o termo de busca. Se for um CEP, o código (01001-000). Se for um endereço, parte do nome (Paulista).
  • $formato é o formato do resultado da busca que pode ser XML (xml), CSV (csv) ou JSON (json).

Portanto, para efetuar uma busca em formato JSON, basta utilizar a seguinte URL:


http://ceplivre.com.br/consultar/cep/sua_key_aqui/01001-000/json

Estando tudo Ok, seria retornado o seguinte JSON:

{

    "cep": [
        {
            "tp_logradouro": "Praça",
            "tp_logradouro_id": "8",
            "logradouro": "da Sé",
            "bairro": "Sé",
            "cidade": "São Paulo",
            "uf_sigla": "SP",
            "ufnome": "São Paulo",
            "id_estado_ibge": "35",
            "cep": "01001-000",
            "muncoddv": "3550308",
            "ddd": "11",
            "altitude": "760",
            "latitude": "-23.548",
            "longitude": "-46.636",
            "area": "1522.986",
            "capital": "S"
        }
    ]

}

Agora por exemplo eu poderia manipular esses dados com JavaScript para dar mais interatividade ao meu formulário quando o usuário preencher o campo CEP.

Comentários

  1. Legal, mas o serviço é confiável, mesmo? No ar 24/7?

    por Tárcio Zemel Responder
    1. A partir do momento que você paga por um serviço, ele tem que funcionar, por bem ou por mal.

      por Pedro Rogério Responder
  2. 15 ceps por dia no plano free? mas que cep”livre”.

    É tipo um frango de padaria né, levar é R$10, sentir o cheirinho é de graça. rs

    Mas apesar da brincadeira achei o serviço muito bom.

    por Julio Fagundes Responder
  3. ceppago seria um nome mais correto.

    por Padeiro — Responder
    1. +1

      por Tárcio Zemel Responder
    2. +1

      por tony kaique Responder
  4. Livre? 15 consultas/dia não da nem pro cheiro

    por CACA-COBRA Responder
  5. Base atualizada? Por quem? Esta informação está baseada em que?

    Fiz um teste muito básico (e olha que essa história de pesquisar CEPs dá bastante pano para a manga)…

    Testei o CEP 93265-460, da minha rua… Ele nunca deu problemas em nenhum sistema (com base atualizada, é claro), pois na cidade o CEP é por rua e esta rua é muiro pequena, não cortando mais de um bairro e nem possuindo mais de um CEP… Esse é um dos casos mais básicos para teste (acho que só teste de CEP geral pode ser mais simples que isto)…

    Resultado:

    1) Nome do bairro está errado, já foi alterado há bastante tempo para de Christ para Liberdade…
    2) Nome do bairro não era Cristi e sim Christ…

    Para ter uma idéia, já deve fazer mais de 2 anos que o nome do bairro foi alterado…

    Não uso esta aplicação nem de graça… Quem dirá pagando!

    por Marlon — Responder
    1. Opa Marlon, ontem resolvi fazer algo semelhante.
      Criei um webservice de cep que utiliza os dados do próprio correio.
      http://www.feliperoberto.com.br/api/correios/cep.php?cep=93265460
      Os dados exibidos estão corretos? Pois vi que são diferentes do que você citou no post?
      Se estiver certo pode usar a vontade (até meu servidor travar, é um plano baratinho, rs), se não, pode me ajudar a corrigir.

      Queria aproveitar e perguntar ao Pedro se posso publicar aqui um tutorial explicando como foi feito.

      Abraço.

      por Felipe Roberto Responder
      1. Felipe, parabéns pela iniciativa. Pra evitar de seu servidor superlotar faz o seguinte:

        1) Ativa um cache pro browser longo via htaccess
        http://kevin.vanzonneveld.net/techblog/article/control_cache_expire_dates_using_htaccess/

        2) Ativa um cache PHP interno de pelo menos 1 dia pra não sobrecarregar seu PHP (afinal, um cep não muda de um dia pro outro).
        http://imasters.com.br/artigo/11191/php/caching_em_php_com_uma_tecnica_obscura_mas_muito_eficiente/
        (seu servidor irá se encher de arquivos pequenos, mas acho que talvez seja útil)

        3) Ative o Cloudflare no seu domínio. É um CDN de cache muito útil e com versão free.

        Pronto. Acho que assim você fica tranquilo.

        por Micox
  6. Acho que o JSON poderia ser colocado dentro de uma chamada a função (que nem os json do yahoo), assim o script inciaria aquela função só quando json for carregado pra não termos que usar timeout.
    Exemplo de retorno desejado:
    jsonCepLoaded({

    “cep”: [
    {
    "tp_logradouro": "Praça",
    "tp_logradouro_id": "8",
    "logradouro": "da Sé",
    "bairro": "Sé",
    "cidade": "São Paulo",
    "uf_sigla": "SP",
    "ufnome": "São Paulo",
    "id_estado_ibge": "35",
    "cep": "01001-000",
    "muncoddv": "3550308",
    "ddd": "11",
    "altitude": "760",
    "latitude": "-23.548",
    "longitude": "-46.636",
    "area": "1522.986",
    "capital": "S"
    }
    ]

    });

    Assim, eu mesmo declararia a função jsonCepLoaded dizendo o que faria com o json que chegou.

    por Micox Responder
    1. Ah, e 100 ceps diários por 15 reais é bem caro.
      Se eles usarem sistemas de cache no server, caches proxy (como o cloudflare por ex) daria pra baixar bem mais os preços.

      por Micox Responder
      1. Pronto, agora não precisa pagar. Você pode ter seu próprio webservice de cep.
        http://www.pinceladasdaweb.com.br/blog/2012/01/31/webservice-consulta-de-cep-diretamente-ao-site-dos-correios/

        por Felipe Roberto
  7. Muito bacana, de fato não conhecia a ferramenta.
    Vou experimentar. Obrigado.

    por Natanael Oliveira Responder
  8. Muito interessante o post! Pessoal… aproveitando, quem puder dá um pulinho no meu blog: http://www.estradaweb.wordpress.com estou iniciando ainda no aprendizado web, mas sempre que puder vou tentar postar algo interessante lah! Abço

    por Danilo Fernandes de Oliveira Responder
  9. não sei o que é pior… a incompetência do Correios ou esse teu esquema de grana fácil aí

    todo mundo sabe que os Correios mesmo deveria disponibilizar essa API e de graça..

    além disso, existe o http://www.republicavirtual.com.br/ que é público e free, tem as gambi pra pegar direto da porcaria do site e têm também a API de GEOCODE do Google(que também é free) que provávelmente é o que você usa pras suas funcionalidades “premium”…

    “Há uma empresa por trás, o que gera confiança e segurança para você;” que piada!

    por Breno — Responder
    1. Trabalho com geomarketing e testei diversos resultados do geocode do google (que é feito encima do arruamento deles) e o desta base. Há uma diferença significativa quando se trata de municípios menores onde há problemática de arruamento: o CEP do google aparece fora da cidade em muitos casos e nos que chequei eles apareciam corretamente, dentro da cidade.

      Em áreas mais densas talvez não compense usar o serviço (a não ser pelo valor absurdo para usar o geocode acima de 25.000 por dia) mas para áreas onde a falha na base do google é aparente, parece valer a pena para ter a coordenada correta.

      por Iúri Queiroz — Responder
  10. resumindo, ganhando dinheiro em cima da ignorância da galera…

    pelo post achei que quem tinha escrito tinha sido o próprio criador, já que parece mais um comercial… como questionaram antes, como essa base é mantida diáriamente se a informação é dos correios? como ele pode garantir sem explicar como? a única forma seria um acordo especial da empresa dele com os correios, o que óbviamente não existe

    ou o cara trabalha nos correios e rouba um dump da base CEP todos os dias?

    por Breno — Responder
  11. Esse webservice gratuito atualiza o CEP direto no site dos correios:

    http://viacep.com.br/

    Att.

    por Jairo Alves — Responder
  12. Eu imagino que o enriquecimento de dados (com a questão da coordenada geográfica) vai além da necessidade para formulários, que pode ser suprida pela ferramenta dos correios. O que a maioria das pessoas aí despreza ou não compreendeu é que para quem trabalha com informação georreferenciada a latitude e longitude são de grande valia. E mesmo a função geocode do googlemaps é feito encima de uma base de arruamento, que se encontra cagada para a maioria do brasil, da qual chequei aos resultados que procurei e não são os mesmos (e errados como são o do arruamento do googlemaps).

    por Iúri Queiroz — Responder
  13. Pingback: API’s para consulta de CEP » Pinceladas da Web - HTML5 Hard Coding and Bullet Proof CSS

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>