:oncoming_automobile: API em PHP para consultar informações de veículos na base de dados do SINESP Cidadão
SINESP Cidadão é uma base de dados pública de veículos brasileiros muito útil para identificar carros ou motos roubados ou suspeitos.
Infelizmente, o governo não mantém uma API pública para realizar esse tipo de consulta. Até então, a única maneira de visualizar as informações de um determinado veículo era através do site do Sinesp respondendo a perguntas de verificação (
captchas) para cada uma das requisições. Assim, houve a necessidade de desenvolver uma API de modo a facilitar o acesso a essas informações.
Se um veículo com a placa especificada for encontrado, o servidor irá retornar com as seguintes informações:
Essas informações estarão disponíveis por meio de um
array associativoou como
atributodo objeto.
Instale a versão mais recente com:
composer require chapeupreto/sinesp
Abaixo um exemplo simples e geral de utilização da biblioteca:
use Sinesp\Sinesp;$veiculo = new Sinesp;
try { $veiculo->buscar('GWW-6471'); if ($veiculo->existe()) { print_r($veiculo->dados()); } } catch (\Exception $e) { echo $e->getMessage(); }
O método
buscar()deve ser o primeiro método a ser invocado. Esse método é empregado para localizar informações do veiculo com a placa informada.
Após a chamada ao método
buscar(), o método
dados()irá retornar um array associativo contendo todas as informações do veículo.
Ainda, ao invés de utilizar todo o array retornado pelo método
dados(), pode-se também recuperar uma informação isoladamente acessando-a como atributo do objeto:
echo 'O municipio do veiculo é ', $veiculo->municipio;
O SINESP pode bloquear conexões vindas de fora do país. Caso a consulta não retorne resultados por erro de conexão (por exemplo, erro de
timeout), pode-se realizar uma consulta usando proxy.
Existem diversos proxy gratuitos (e.g.,
http://proxylist.hidemyass.com/) que podem ser encontrados facilmente na Internet. Um exemplo de utilização com proxy encontra-se abaixo:
$veiculo = new Sinesp; $veiculo->proxy('177.54.144.208', '80'); // Com proxy, esse metodo deve ser chamado antes do metodo buscar()$veiculo->buscar('GWW-6471'); print_r($veiculo->dados());
Opcionalmente, ao invés de usar o metodo
proxy($ip, $porta), pode-se utilizar um array associativo com as chaves
ipe
portacomo segundo argumento do método
buscar():
$veiculo = new Sinesp; $veiculo->buscar('GWW-6471', ['ip' => '177.54.144.208', 'porta' => '80']); // a consulta usara o proxy especificadoprint_r($veiculo->dados());
Uma vez que o SINESP não mata sua requisição após bloqueio, é provável que você acabe se deparando com erro(s) 504. A fim de evitar transtorno, foi disponibilizado o método
timeoutpara definir um tempo máximo de resposta:
$veiculo->timeout(5); // tempo em segundos
Dica: Em combinação com o proxy (fazendo múltiplas tentativas com diferentes proxies), isso poderá aumentar consideravelmente suas chances de sucesso para múltiplas requisições
Com diferentes proxies, mas sem timeout
Com diferentes proxies e timeout