Come eseguire script Python su WordPress

Pubblicato: 2023-08-03

Python continua a crescere in popolarità grazie alla sua facilità d'uso, potenti librerie e sintassi semplice. Mi ritrovo spesso a creare prototipi di singole funzionalità per WordPress con Python prima di convertirle in PHP.

Ma invece di farlo, perché non eseguire Python su WordPress? In questo post discuteremo i vari metodi che possono essere utilizzati per eseguire il codice Python direttamente su un sito Web WordPress.

Esegui script Python su WordPress

Possiamo usare una funzione PHP integrata chiamata exec() per eseguire script esterni, incluso da Python. Ciò richiederà un po 'di codice sia in PHP che in Python per funzionare, ma è abbastanza facile una volta capito come tutto si adatta.

david-clode-ojlt2xbwuws-unsplash-1

Possiamo creare un plugin o uno snippet di codice. Dipende da cosa stai cercando di costruire, ma in genere creo uno snippet di codice che è più facile da gestire sul frontend del sito web.

Innanzitutto, assicurati che Python sia installato a livello globale sul tuo server. Puoi farlo da solo se disponi dell'accesso root, in caso contrario dovrai chiedere al tuo host web di installarlo. Ad esempio, su Cloudways, avevamo bisogno che installassero Python per noi.

Funzione PHP

Creeremo il codice per creare una funzione PHP che eseguirà qualsiasi script Python in WordPress. Per facilità d'uso, ti mostrerò prima uno snippet che può essere utilizzato con un plug-in Code Snippet Management. Quindi possiamo dare un'occhiata alla creazione di un plug-in personalizzato per fare la stessa cosa.

Con questa funzione, tutti gli script Python risiedono nella libreria multimediale e possiamo selezionare lo script da eseguire specificando l'ID elemento della libreria multimediale. Tieni presente che probabilmente dovrai consentire il caricamento del tipo mime di Python. Ho usato questo plugin per abilitarlo.

Questo sembra un po 'complicato perché ho finito per aggiungere molta gestione degli errori. Ma in sostanza, tutto ciò che fa il codice è trovare il file dalla libreria multimediale ed eseguire lo script, emettendo tutto ciò che finisce per restituire.

Tieni presente che ho usato "python3" poiché è quello che è installato sulla mia macchina. Potresti voler cambiarlo in "python".

<?php function cwpai_run_python_script($media_id) { // Ottieni il percorso del file multimediale sul server $media_path = get_attached_file($media_id); // Controlla se il file multimediale esiste if ($media_path) { // Imposta il comando Python $python_command = 'python3 ' . escapeshellarg($media_path); // Esegui lo script Python e cattura l'output exec($python_command, $output, $return_status); if ($return_status === 0) { // Script eseguito correttamente, restituisce l'output return implode("\n", $output); } else { // Esecuzione dello script non riuscita, registra l'errore e restituisce un messaggio di errore error_log('Errore durante l'esecuzione dello script Python. Comando: ' . $python_command); return 'Errore durante l'esecuzione dello script Python.'; } } else { // File multimediale non trovato, registra l'errore e restituisce un messaggio di errore error_log('File multimediale non trovato per l'ID multimediale ' . $media_id); return 'File multimediale non trovato.'; } } // Esempio di utilizzo con ID supporto 6 $result = cwpai_run_python_script(6); // Genera il risultato o gestisce l'errore if (è_stringa($risultato)) { // Se il risultato è una stringa, indica un messaggio di errore echo $risultato; } else { // Se il risultato non è una stringa, dovrebbe essere l'output dello script Python // Visualizza l'output o esegue ulteriori elaborazioni se necessario echo $result; }

Se creiamo un plugin, la struttura potrebbe assomigliare a questa:

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

cwpai_plugin.php ha questo aspetto:

<?php /* Nome plug-in: CWPAI My Python Descrizione plug-in: un plug-in per eseguire script Python per file multimediali. Versione: 1.0 Autore: Il tuo nome */ // Il codice del plugin andrà qui. function cwpai_run_python_script($file_name) { // Ottieni il percorso della directory del plugin $plugin_dir = plugin_dir_path(__FILE__); // Imposta il percorso dello script Python relativo alla directory del plugin $python_script_path = $plugin_dir . 'attività/py/' . $nome_file; // Controlla se il file di script Python esiste if (file_exists($python_script_path)) { // Imposta il comando Python $python_command = 'python3 ' . escapeshellarg($python_script_path); // Esegui lo script Python e cattura l'output exec($python_command, $output, $return_status); if ($return_status === 0) { // Script eseguito correttamente, restituisce l'output return implode("\n", $output); } else { // Esecuzione dello script non riuscita, registra l'errore e restituisce un messaggio di errore error_log('Errore durante l'esecuzione dello script Python. Comando: ' . $python_command); return 'Errore durante l'esecuzione dello script Python.'; } } else { // File script Python non trovato, registra l'errore e restituisce un messaggio di errore error_log('File script Python non trovato: ' . $python_script_path); return 'File di script Python non trovato.'; } }

Per il plugin, è più veloce includere gli script Python in una directory specifica (in questo esempio, è assets/py), permettendoti di aggiungerli e modificarli tramite FTP. Pertanto, è meglio se hai molto Python da eseguire in WordPress.

Per usarlo, basta chiamare la funzione:

// Esempio di utilizzo con il nome file "example.py" $result = cwpai_run_python_script('example.py'); // Genera il risultato o gestisce l'errore if (è_stringa($risultato)) { // Se il risultato è una stringa, indica un messaggio di errore echo $risultato; } else { // Se il risultato non è una stringa, dovrebbe essere l'output dello script Python // Visualizza l'output o esegue ulteriori elaborazioni se necessario echo $result; }

Codice corto

In "produzione" può essere utile anche creare uno shortcode WP per eseguire uno script Python. Possiamo usare la stessa funzione generale dall'alto, modificandola per trasformarla in uno shortcode di WordPress:

function cwpai_run_python_script($atts) { // Estrai attributi shortcode $args = shortcode_atts(array('media_id' => '1'), $atts); // Ottieni il percorso del file multimediale sul server $media_path = get_attached_file($args['media_id']); // Controlla se il file multimediale esiste if ($media_path) { // Imposta il comando Python $python_command = 'python3 ' . escapeshellarg($media_path); // Esegui lo script Python e cattura l'output exec($python_command, $output, $return_status); if ($return_status === 0) { // Script eseguito correttamente, restituisce l'output return implode("\n", $output); } else { // Esecuzione dello script non riuscita, registra l'errore e restituisce un messaggio di errore error_log('Errore durante l'esecuzione dello script Python. Comando: ' . $python_command); return 'Errore durante l'esecuzione dello script Python.'; } } else { // File multimediale non trovato, registra l'errore e restituisce un messaggio di errore error_log('File multimediale non trovato per l'ID multimediale ' . $args['media_id']); return 'File multimediale non trovato.'; } } add_shortcode('run_python_script', 'cwpai_run_python_script');

Ora puoi utilizzare lo shortcode [run_python_script media_] direttamente nei tuoi post e nelle tue pagine. Sostituisci "6" con l'ID del file multimediale che desideri utilizzare.

Usa un servizio ospitato

Esistono dozzine di servizi ospitati che ti consentono di accedere a Python tramite API. Questo potrebbe essere utile per progetti e flussi di lavoro più complessi, soprattutto perché puoi accedere all'output in PHP (usando CURL) proprio come se avessi creato il tuo plug-in personalizzato.

Innanzitutto, dovrai creare un'API con Python. Ecco una buona risorsa per questo. Utilizzerai essenzialmente Flask per creare un'app Web che esponga gli endpoint API. Quindi, ospiterai quella webapp con uno di questi servizi e accederai ai diversi endpoint API con PHP.

Ecco un esempio di app Python che ha l'API:

# api.py import random from flask import Flask, request, jsonify app = Flask(__name__) things_list = [ "Apple", "Banana", "Carrot", "Dog", "Elephant", "Flower", "Guitar" , "Casa", "Igloo", "Giacca" ] @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 = {'response': f'Messaggio ricevuto: {message}. Cosa casuale: {random_thing}'} return jsonify(response_data) if __name__ == '__main__': app.run(debug=True)

E come accederò in PHP, permettendomi di utilizzare quei dati in WordPress (che si tratti di modificare i campi del database, aggiungere un nuovo utente, ecc ...)

<?php // URL endpoint API $apiUrl = 'http://your-python-api-domain.com/api/data'; // Dati da inviare all'API Python $data = array( 'message' => 'Ciao da PHP!' ); // Converti i dati in JSON $dataJson = json_encode($data); // Inizializza la sessione cURL $ch = curl_init(); // Imposta le opzioni 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('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, vero); // Esegue la sessione cURL e acquisisce la risposta $response = curl_exec($ch);

Ora, con i dati di $response, puoi usarli con qualsiasi funzione di WordPress. Questo è un esempio di base, ma utile per mostrare come lo faresti.

Se sei un po 'tecnico e vuoi qualcosa di economico, ti suggerisco di distribuire la tua app Python usando Digital Ocean che costa $ 2,50 / mese per cose semplici.

Se vuoi qualcosa di veloce, semplice e facile, dai un'occhiata a PythonAnywhere.com che parte da $ 5 al mese.

A parte i piccoli scenari, questo metodo è probabilmente il modo migliore per fare le cose.

Converti il ​​Python in PHP

Un'altra opzione sarebbe semplicemente convertire Python in PHP e utilizzare un plug-in come Code Snippets per eseguire quella funzione.

Puoi convertirlo manualmente in PHP o utilizzare uno strumento come ChatGPT o CodeWP per incollare Python e richiedere che venga riscritto in PHP. Ecco un esempio con CodeWP, uno strumento AI creato appositamente per i creatori di WordPress:

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

Conclusione

Essendo uno sviluppatore di WordPress che lavora con l'intelligenza artificiale, mi ritrovo spesso a dover simulare rapidamente qualcosa con Python o persino creare funzionalità complete a livello di produzione nel linguaggio.

Seguendo questi metodi, puoi eseguire rapidamente Python su un sito WordPress e accedere a qualsiasi output possa produrre.