Skip to content

Como executar o código Python no PHP

Victor Torres edited this page Jan 23, 2017 · 4 revisions

UPDATE:

O usuário chapeupreto fez uma versão do script totalmente em PHP baseada em nosso script Python: https://github.com/chapeupreto/sinesp


Muita gente me perguntou como obter os resultados gerados pela biblioteca Python do SINESP Client no PHP.

Aqui descrevo como chamar um script simples em Python (baseado no exemplo que tem no README da nossa biblioteca) para enviar os dados obtidos em formato JSON para nossa aplicação em PHP, onde iremos receber e utilizar da melhor forma possível.

Instalando a biblioteca

Lembre-se de instalar a biblioteca com

pip install sinesp-client

Escrevendo o script em Python

Vamos criar um script chamado placa.py, que será executado em linha de comando e receberá a placa do veículo como primeiro argumento:

import json
import sys

from sinesp_client import SinespClient

sc = SinespClient()
plate = sys.argv[1]
result = sc.search(plate)
json_result = json.dumps(result)
print(json_result)

Escrevendo o script PHP

Para chamar/executar nosso script em Python a partir do PHP e retomar os resultados é bem simples também:

Cuidado com o comando shell_exec, ele deixa seu código suscetível a injections de código malicioso.

<?php
  $placa = 'M**4***';
  $informacoesDaPlacaEmJSON = shell_exec('python placa.py ' . $placa);
  $informacoesDaPlaca = json_decode($informacoesDaPlacaEmJSON);
?>

O objeto gerado

Se a gente imprimir o objeto gerado com a função print_r do PHP:

print_r($informacoesDaPlaca);

Nós obtemos:

stdClass Object
(
    [city] => GUARAMIRIM
    [model_year] => 201*
    [plate] => M**4***
    [color] => VERMELHA
    [status_code] => 0
    [brand] => FIAT/SIENA EL FLEX
    [return_code] => 0
    [date] => 23/02/2016 19:59:59
    [state] => SC
    [chassis] => ************57158
    [year] => 201*
    [return_message] => Sem erros.
    [model] => FIAT/SIENA EL FLEX
    [status_message] => Sem restrição
)

Alguns dados foram omitidos.

Acessando os resultados individuais

Isso permite que você também possa acessar os dados assim:

print($informacoesDaPlaca->city);
print($informacoesDaPlaca->state);

O que retornaria:

GUARAMIRIM
SC