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.