Comment exécuter des scripts Python dans WordPress

Publié: 2023-08-03

Python continue de gagner en popularité en raison de sa facilité d'utilisation, de ses bibliothèques puissantes et de sa syntaxe simple. Je me retrouve souvent à prototyper des fonctionnalités individuelles pour WordPress avec Python avant de les convertir en PHP.

Mais au lieu de faire cela, pourquoi ne pas simplement exécuter Python sur WordPress ? Dans cet article, nous aborderons les différentes méthodes pouvant être utilisées pour exécuter du code Python directement sur un site Web WordPress.

Exécuter des scripts Python sur WordPress

Nous pouvons utiliser une fonction PHP intégrée appelée exec() pour exécuter des scripts externes, y compris à partir de Python. Cela nécessitera un peu de code en PHP et en Python pour fonctionner, mais c'est assez facile une fois que vous comprenez comment tout s'emboîte.

david-clode-ojlt2xbwuws-unsplash-1

Nous pouvons soit créer un plugin, soit un extrait de code. Cela dépend de ce que vous cherchez à construire, mais je crée généralement un extrait de code qui est plus facile à gérer sur le frontend du site Web.

Tout d'abord, assurez-vous que Python est globalement installé sur votre serveur. Vous pouvez le faire vous-même si vous avez un accès root, sinon, vous devrez demander à votre hébergeur de l'installer. Par exemple, sur Cloudways, nous avions besoin qu'ils installent Python pour nous.

Fonction PHP

Nous allons créer le code pour créer une fonction PHP qui exécutera n'importe quel script Python dans WordPress. Pour faciliter l'utilisation, je vais d'abord vous montrer un extrait qui peut être utilisé avec un plugin Code Snippet Management. Ensuite, nous pouvons jeter un œil à la création d'un plugin personnalisé pour faire la même chose.

Avec cette fonction, tous les scripts Python résident dans la médiathèque et nous pouvons sélectionner le script à exécuter en spécifiant l'ID de l'élément de la médiathèque. Gardez à l'esprit que vous devrez probablement autoriser le téléchargement du type mime Python. J'ai utilisé ce plugin pour l'activer.

Cela semble un peu compliqué car j'ai fini par ajouter beaucoup de gestion des erreurs. Mais à la base, tout ce que le code fait est de trouver le fichier dans la médiathèque et d'exécuter le script, en produisant tout ce qu'il finit par renvoyer.

Veuillez noter que j'ai utilisé 'python3' car c'est ce qui est installé sur ma machine. Vous voudrez peut-être le changer en 'python'.

<?php function cwpai_run_python_script($media_id) { // Récupère le chemin du fichier multimédia sur le serveur $media_path = get_attached_file($media_id); // Vérifie si le fichier multimédia existe if ($media_path) { // Définit la commande Python $python_command = 'python3 ' . escapeshellarg($media_path); // Exécutez le script Python et capturez la sortie exec($python_command, $output, $return_status); if ($return_status === 0) { // Script exécuté avec succès, renvoie la sortie return implode("\n", $output); } else { // L'exécution du script a échoué, consigne l'erreur et renvoie un message d'erreur error_log('Erreur lors de l'exécution du script Python. Commande : ' . $python_command); return 'Erreur lors de l'exécution du script Python.'; } } else { // Fichier média introuvable, consigne l'erreur et renvoie un message d'erreur error_log('Fichier média introuvable pour l'ID média ' . $media_id); return 'Fichier multimédia introuvable.'; } } // Exemple d'utilisation avec l'ID de média 6 $result = cwpai_run_python_script(6); // Afficher le résultat ou gérer l'erreur if (is_string($result)) { // Si le résultat est une chaîne, cela indique un message d'erreur echo $result; } else { // Si le résultat n'est pas une chaîne, il doit s'agir de la sortie du script Python // Affiche la sortie ou effectue un traitement supplémentaire si nécessaire echo $result; }

Si nous créons un plugin, la structure peut ressembler à ceci :

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

cwpai_plugin.php ressemble à ceci :

<?php /* Nom du plug-in : CWPAI My Python Plugin Description : un plug-in permettant d'exécuter des scripts Python pour les fichiers multimédias. Version : 1.0 Auteur : Votre nom */ // Le code du plugin ira ici. function cwpai_run_python_script($file_name) { // Récupère le chemin du répertoire du plugin $plugin_dir = plugin_dir_path(__FILE__); // Définit le chemin du script Python par rapport au répertoire du plugin $python_script_path = $plugin_dir . 'assets/py/' . $nom_fichier ; // Vérifie si le fichier de script Python existe if (file_exists($python_script_path)) { // Définit la commande Python $python_command = 'python3 ' . escapeshellarg($python_script_path); // Exécutez le script Python et capturez la sortie exec($python_command, $output, $return_status); if ($return_status === 0) { // Script exécuté avec succès, renvoie la sortie return implode("\n", $output); } else { // L'exécution du script a échoué, consigne l'erreur et renvoie un message d'erreur error_log('Erreur lors de l'exécution du script Python. Commande : ' . $python_command); return 'Erreur lors de l'exécution du script Python.'; } } else { // Fichier de script Python introuvable, consigne l'erreur et renvoie un message d'erreur error_log('Fichier de script Python introuvable : ' . $python_script_path); return 'Fichier de script Python introuvable.'; } }

Pour le plugin, il est plus rapide d'inclure les scripts Python dans un répertoire spécifique (dans cet exemple, il s'agit de assets/py), ce qui vous permet de les ajouter et de les modifier via FTP. Par conséquent, c'est mieux si vous avez beaucoup de Python à exécuter dans WordPress.

Pour l'utiliser, il suffit d'appeler la fonction :

// Exemple d'utilisation avec le nom de fichier "example.py" $result = cwpai_run_python_script('example.py'); // Afficher le résultat ou gérer l'erreur if (is_string($result)) { // Si le résultat est une chaîne, cela indique un message d'erreur echo $result; } else { // Si le résultat n'est pas une chaîne, il doit s'agir de la sortie du script Python // Affiche la sortie ou effectue un traitement supplémentaire si nécessaire echo $result; }

Petit code

En "production", créer un shortcode WP pour exécuter un script Python peut également être utile. Nous pouvons utiliser la même fonction générale ci-dessus, en la modifiant pour en faire un shortcode WordPress :

function cwpai_run_python_script($atts) { // Extraction des attributs de shortcode $args = shortcode_atts(array('media_id' => '1'), $atts); // Récupère le chemin du fichier multimédia sur le serveur $media_path = get_attached_file($args['media_id']); // Vérifie si le fichier multimédia existe if ($media_path) { // Définit la commande Python $python_command = 'python3 ' . escapeshellarg($media_path); // Exécutez le script Python et capturez la sortie exec($python_command, $output, $return_status); if ($return_status === 0) { // Script exécuté avec succès, renvoie la sortie return implode("\n", $output); } else { // L'exécution du script a échoué, consigne l'erreur et renvoie un message d'erreur error_log('Erreur lors de l'exécution du script Python. Commande : ' . $python_command); return 'Erreur lors de l'exécution du script Python.'; } } else { // Fichier multimédia introuvable, consigner l'erreur et renvoyer un message d'erreur error_log('Fichier multimédia introuvable pour l'ID de média ' . $args['media_id']); return 'Fichier multimédia introuvable.'; } } add_shortcode('run_python_script', 'cwpai_run_python_script');

Vous pouvez désormais utiliser le shortcode [run_python_script media_] directement dans vos publications et pages. Remplacez "6" par l'ID du fichier multimédia que vous souhaitez utiliser.

Utiliser un service hébergé

Il existe des dizaines de services hébergés qui vous permettent d'accéder à Python via des API. Cela peut être utile pour des projets et des flux de travail plus complexes, d'autant plus que vous pouvez accéder à la sortie en PHP (à l'aide de CURL) comme si vous créiez votre propre plugin personnalisé.

Tout d'abord, vous devrez créer une API avec Python. Voici une bonne ressource pour cela. Vous utiliserez essentiellement Flask pour créer une application Web qui expose les points de terminaison de l'API. Ensuite, vous hébergerez cette application Web avec l'un de ces services et accéderez aux différents points de terminaison de l'API avec PHP.

Voici un exemple d'application Python contenant l'API :

# api.py import random from flask import Flask, request, jsonify app = Flask(__name__) things_list = [ "Apple", "Banana", "Carrot", "Dog", "Elephant", "Flower", "Guitar" , "Maison", "Igloo", "Veste" ] @app.route('/api/data', method=['POST']) def process_data() : data = request.get_json() message = data.get ('message') random_thing = random.choice(things_list) response_data = {'response' : f'Message reçu : {message}. Chose aléatoire : {random_thing}'} return jsonify(response_data) if __name__ == '__main__' : app.run(debug=True)

Et comment j'y accéderais en PHP, me permettant d'utiliser ces données dans WordPress (qu'il s'agisse de modifier les champs de la base de données, d'ajouter un nouvel utilisateur, etc.)

<?php // URL du point de terminaison de l'API $apiUrl = 'http://your-python-api-domain.com/api/data' ; // Données à envoyer à l'API Python $data = array( 'message' => 'Hello from PHP!' ); // Convertit les données en JSON $dataJson = json_encode($data); // Initialise la session cURL $ch = curl_init(); // Définir les options 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, vrai); // Exécute la session cURL et capture la réponse $response = curl_exec($ch);

Désormais, avec les données $response, vous pouvez les utiliser avec toutes les fonctions WordPress. Ceci est un exemple de base, mais bon pour montrer comment vous feriez cela.

Si vous êtes un peu technique et que vous voulez quelque chose de bon marché, je vous suggère de déployer votre application Python en utilisant Digital Ocean qui coûte 2,50 $/mois pour des choses simples.

Si vous voulez quelque chose de rapide, simple et facile, consultez PythonAnywhere.com qui commence à 5 $/mois.

À part les petits scénarios, cette méthode est probablement la meilleure façon de faire les choses.

Convertir Python en PHP

Une autre option serait de simplement convertir Python en PHP et d'utiliser un plugin comme Code Snippets pour exécuter cette fonction.

Vous pouvez le convertir manuellement en PHP ou utiliser un outil comme ChatGPT ou CodeWP pour le coller dans le Python et demander qu'il soit réécrit en PHP. Voici un exemple avec CodeWP, un outil d'IA spécialement conçu pour les créateurs WordPress :

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

Conclusion

En tant que développeur WordPress qui travaille avec l'IA, j'ai souvent besoin de modéliser rapidement quelque chose avec Python, ou même de créer des fonctionnalités complètes au niveau de la production dans le langage.

En suivant ces méthodes, vous pouvez rapidement exécuter python sur un site WordPress et accéder à toute sortie qu'il peut produire.