Como executar scripts Python no WordPress

Publicados: 2023-08-03

Python continua a crescer em popularidade devido à sua facilidade de uso, bibliotecas poderosas e sintaxe simples. Muitas vezes me pego prototipando funcionalidades individuais para WordPress com Python antes de convertê-las em PHP.

Mas, em vez de fazer isso, por que não executar o Python no WordPress? Nesta postagem, discutiremos os vários métodos que podem ser usados ​​para executar o código Python diretamente em um site WordPress.

Executar scripts Python no WordPress

Podemos usar uma função PHP integrada chamada exec() para executar scripts externos, inclusive do Python. Isso exigirá um pouco de código em PHP e Python para funcionar, mas é muito fácil quando você entende como tudo se encaixa.

david-clode-ojlt2xbwuws-unsplash-1

Podemos criar um plug-in ou um trecho de código. Depende do que você deseja criar, mas normalmente crio um trecho de código que é mais fácil de gerenciar no front-end do site.

Primeiro, verifique se o Python está instalado globalmente em seu servidor. Você pode fazer isso sozinho se tiver acesso root, caso contrário, precisará pedir ao seu host para instalá-lo. Por exemplo, no Cloudways, precisávamos que eles instalassem o Python para nós.

Função PHP

Criaremos o código para criar uma função PHP que executará qualquer script Python no WordPress. Para facilitar o uso, mostrarei primeiro um snippet que pode ser usado com um plug-in Code Snippet Management. Em seguida, podemos dar uma olhada na construção de um plug-in personalizado para fazer a mesma coisa.

Com essa função, todos os scripts Python residem na biblioteca de mídia e podemos selecionar o script a ser executado especificando o ID do item da biblioteca de mídia. Tenha em mente que você provavelmente precisará permitir que o tipo mime do Python seja carregado. Eu usei este plugin para habilitá-lo.

Isso parece um pouco complicado porque acabei adicionando muito tratamento de erros. Mas, basicamente, tudo o que o código faz é localizar o arquivo na biblioteca de mídia e executar o script, exibindo o que quer que ele acabe retornando.

Observe que usei 'python3', pois é o que está instalado em minha máquina. Você pode querer alterá-lo para 'python'.

<?php function cwpai_run_python_script($media_id) { // Obtém o caminho do arquivo de mídia no servidor $media_path = get_attached_file($media_id); // Verifique se o arquivo de mídia existe if ($media_path) { // Defina o comando Python $python_command = 'python3 '. escapeshellarg($media_path); // Executa o script Python e captura a saída exec($python_command, $output, $return_status); if ($return_status === 0) { // Script executado com sucesso, retorna a saída return implode("\n", $output); } else { // A execução do script falhou, registre o erro e retorne uma mensagem de erro error_log('Erro ao executar o script Python. Comando: ' . $python_command); return 'Erro ao executar o script Python.'; } } else { // Arquivo de mídia não encontrado, registre o erro e retorne uma mensagem de erro error_log('Arquivo de mídia não encontrado para ID de mídia ' . $media_id); return 'Arquivo de mídia não encontrado.'; } } // Exemplo de uso com ID de mídia 6 $result = cwpai_run_python_script(6); // Exibe o resultado ou manipula o erro if (is_string($result)) { // Se o resultado for uma string, indica uma mensagem de erro echo $result; } else { // Se o resultado não for uma string, deve ser a saída do script Python // Exibe a saída ou executa processamento adicional, se necessário echo $resultado; }

Se criarmos um plugin, a estrutura pode ficar assim:

 wp-content/plugins/ cwpai_my-python-plugin/ cwpai_plugin.php assets/ py/ script.py

cwpai_plugin.php se parece com isto:

<?php /* Nome do plug-in: CWPAI My Python Descrição do plug-in: Um plug-in para executar scripts Python para arquivos de mídia. Versão: 1.0 Autor: Seu nome */ // O código do plug-in irá aqui. function cwpai_run_python_script($file_name) { // Obtenha o caminho do diretório do plugin $plugin_dir = plugin_dir_path(__FILE__); // Defina o caminho do script Python relativo ao diretório do plug-in $python_script_path = $plugin_dir . 'ativos/py/' . $file_name; // Verifique se o arquivo de script Python existe if (file_exists($python_script_path)) { // Defina o comando Python $python_command = 'python3 '. escapeshellarg($python_script_path); // Executa o script Python e captura a saída exec($python_command, $output, $return_status); if ($return_status === 0) { // Script executado com sucesso, retorna a saída return implode("\n", $output); } else { // A execução do script falhou, registre o erro e retorne uma mensagem de erro error_log('Erro ao executar o script Python. Comando: ' . $python_command); return 'Erro ao executar o script Python.'; } } else { // Arquivo de script Python não encontrado, registre o erro e retorne uma mensagem de erro error_log('Arquivo de script Python não encontrado: ' . $python_script_path); return 'Arquivo de script Python não encontrado.'; } }

Para o plugin, é mais rápido incluir os Scripts Python em um diretório específico (neste exemplo, é assets/py), permitindo que você adicione e edite-os via FTP. Portanto, é melhor se você tiver muito Python para executar no WordPress.

Para utilizá-lo, basta chamar a função:

// Exemplo de uso com o nome de arquivo "example.py" $result = cwpai_run_python_script('example.py'); // Exibe o resultado ou manipula o erro if (is_string($result)) { // Se o resultado for uma string, indica uma mensagem de erro echo $result; } else { // Se o resultado não for uma string, deve ser a saída do script Python // Exibe a saída ou executa processamento adicional, se necessário echo $resultado; }

Código curto

Em "produção", criar um shortcode WP para executar um script Python também pode ser útil. Podemos usar a mesma função geral acima, modificando para torná-la um shortcode do WordPress:

function cwpai_run_python_script($atts) { // Extrair atributos shortcode $args = shortcode_atts(array('media_id' => '1'), $atts); // Obtém o caminho do arquivo de mídia no servidor $media_path = get_attached_file($args['media_id']); // Verifique se o arquivo de mídia existe if ($media_path) { // Defina o comando Python $python_command = 'python3 '. escapeshellarg($media_path); // Executa o script Python e captura a saída exec($python_command, $output, $return_status); if ($return_status === 0) { // Script executado com sucesso, retorna a saída return implode("\n", $output); } else { // A execução do script falhou, registre o erro e retorne uma mensagem de erro error_log('Erro ao executar o script Python. Comando: ' . $python_command); return 'Erro ao executar o script Python.'; } } else { // Arquivo de mídia não encontrado, registre o erro e retorne uma mensagem de erro error_log('Arquivo de mídia não encontrado para ID de mídia ' . $args['media_id']); return 'Arquivo de mídia não encontrado.'; } } add_shortcode('run_python_script', 'cwpai_run_python_script');

Agora você pode usar o shortcode [run_python_script media_] diretamente em seus posts e páginas. Substitua "6" pelo ID do arquivo de mídia que você deseja usar.

Use um serviço hospedado

Existem dezenas de serviços hospedados por aí que permitem acessar o Python por meio de APIs. Isso pode ser útil para projetos e fluxos de trabalho mais complexos, especialmente porque você pode acessar a saída em PHP (usando CURL) como se tivesse criado seu próprio plug-in personalizado.

Primeiro, você precisará criar uma API com Python. Aqui está um bom recurso para isso. Basicamente, você usará o Flask para criar um aplicativo da web que exponha os pontos de extremidade da API. Em seguida, você hospedará esse aplicativo da web com um desses serviços e acessará os diferentes terminais de API com PHP.

Aqui está um exemplo de aplicativo Python que possui a API:

# api.py import random from flask import Flask, request, jsonify app = Flask(__name__) things_list = [ "Apple", "Banana", "Carrot", "Dog", "Elephant", "Flower", "Guitar" , "House", "Igloo", "Jacket" ] @app.route('/api/data', methods=['POST']) def process_data(): data = request.get_json() message = data.get ('message') random_thing = random.choice(things_list) response_data = {'resposta': f'Mensagem recebida: {mensagem}. Coisa aleatória: {random_thing}'} return jsonify(response_data) if __name__ == '__main__': app.run(debug=True)

E como eu acessaria em PHP, permitindo que eu usasse esses dados no WordPress (seja alterando campos do banco de dados, adicionando um novo usuário, etc...)

<?php // API endpoint URL $apiUrl = 'http://your-python-api-domain.com/api/data'; // Dados a serem enviados para a API do Python $data = array( 'message' => 'Hello from PHP!' ); // Converte dados para JSON $dataJson = json_encode($data); // Inicializa sessão cURL $ch = curl_init(); // Definir opções de cURL curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataJson); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Tipo de conteúdo: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, verdadeiro); // Executa a sessão cURL e captura a resposta $response = curl_exec($ch);

Agora, com os dados $response, você pode usá-los com qualquer função do WordPress. Este é um exemplo básico, mas bom para mostrar como você faria isso.

Se você é um pouco técnico e quer algo barato, sugiro implantar seu aplicativo Python usando o Digital Ocean, que custa US$ 2,50/mês para coisas simples.

Se você quer algo rápido, simples e fácil, confira PythonAnywhere.com, que começa em US$ 5/mês.

Além de pequenos cenários, esse método é provavelmente a melhor maneira de fazer as coisas.

Converter o Python em PHP

Outra opção seria simplesmente converter o Python em PHP e usar um plugin como o Code Snippets para executar essa função.

Você pode convertê-lo manualmente em PHP ou usar uma ferramenta como ChatGPT ou CodeWP para colar no Python e solicitar que seja reescrito em PHP. Aqui está um exemplo com CodeWP, uma ferramenta AI criada especificamente para criadores de WordPress:

lepage-2023-07-24-at-12-45-16

Conclusão

Sendo um desenvolvedor WordPress que trabalha com IA, muitas vezes me vejo precisando simular rapidamente algo com Python ou até mesmo criar funcionalidades completas em nível de produção na linguagem.

Seguindo esses métodos, você pode executar rapidamente o python em um site WordPress e acessar qualquer saída que ele possa produzir.