Buscar CEP com PHP ou CakePHP Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 4 anos, 2 meses, 3 semanas, 5 dias atrás.

Este artigo é muito antigo ou seu conteúdo foi descontinuado, com certeza outro artigo foi escrito para substituí-lo, use o campo de pesquisa logo acima e desculpe o incomodo!

Hoje o Alisson da K7 Comunicação me chamou no Facebook pra mostrar um recurso muito interessante que ele está disponibilizando pra Comunidade de programadores, e embora os exemplos da seção como usar sejam para PHP não vejo porque não usar em qualquer outra linguagem, já que o retorno é em json.

O recurso anunciado é a busca de CEP, um serviço gratuito e muito prático de usar, para tal vou criar uma função que vai checar se o cURL está ativo no servidor e usá-lo, caso contrário ele irá usar o file_get_contents, mas porque isso? Porque o cURL é mais rápido e com muito mais recursos.

No fim do artigo vou mostrar como fazer um behavior para o CakePHP e também como usá-lo no Controller.

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

Vamos lá, primeiramente vamos conseguir um token válido, acesse o site http://buscacep.k7comunicacao.com.br/ e em seguida clique em Quero Usar (um botão verde e grande no meio da tela), faça o cadastro do nome e email que o site envia um token para seu email, só isso.

Agora vamos criar uma função chamada getCEP().

function getCEP($cep=null,$token=null)
{
    if(function_exists('curl_version')){
        $url    = "http://buscacep.k7comunicacao.com.br/cep/$cep/$token";
        $ch   = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $retorno  = curl_exec($ch);
        curl_close($ch);
        $resposta = json_decode($retorno);
    }else{
        $url = "http://buscacep.k7comunicacao.com.br/cep/$cep/$token";
        $resposta = file_get_contents($url);
    }

    $resposta = get_object_vars($resposta);

    if($resposta['retorno']=='erro'){
        //throw new InternalErrorException($resposta['mensagem']);
        header("HTTP/1.1 500 Internal Server Error");
        throw new Exception($resposta['mensagem']);
    }

    return $resposta;
}

E para usar você é só chamar a função getCEP, assim:

print_r(getCEP('seuCEP','seuToken'));

A função verifica se o cURL está ativo no servidor e caso esteja ele vai usá-lo, se não vai usar o file_get_content, em seguida verifica se o retorno foi um erro, ou seja caso o token ou o cep estejam inválidos ou faltando ele vai retornar uma mensagem de erro.

Agora para usar no CakePHP, é só seguir a mesma lógica porém temos mais 3 passos aqui

01 - Crie o arquivo CepBehavior.php em app/Model/Behavior com o código:

<?php
class CepBehavior extends ModelBehavior
{
    ...
}

02 - Adicione um parametro a função getFunction, o "Model $Model,".

04 - E por fimDentro do class adicione sua função adicionando public e na checagem de erro descomente a linha 1 e apague ou comente as linhas 2 e 3, assim:

public function getCEP(Model $Model,$cep=null,$token=null)
{
    if(function_exists('curl_version')){
        $url    = "http://buscacep.k7comunicacao.com.br/cep/$cep/$token";
        $ch   = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $retorno  = curl_exec($ch);
        curl_close($ch);
        $resposta = json_decode($retorno);
    }else{
        $url = "http://buscacep.k7comunicacao.com.br/cep/$cep/$token";
        $resposta = file_get_contents($url);
    }

  $resposta = get_object_vars($resposta);

    if($resposta['retorno']=='erro'){
        throw new InternalErrorException($resposta['mensagem']);
        //header("HTTP/1.1 500 Internal Server Error");
        //throw new Exception($resposta['mensagem']);
    }

    return $resposta;
}

Agora para usar, basta chamar no model assim:

public $actsAs = array('Cep');

E no seu Controller:

debug($this->SeuModel->getCep('seuCEP','seuToken'));

Muito prático, rápido e eficiente.

Parabéns ao Alisson Pissetti pela iniciativa :D, programadores de todas as linguagens agradecem.

E aqui os arquivos criados para Download


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!