Jak uruchamiać skrypty Pythona w WordPress

Opublikowany: 2023-08-03

Popularność Pythona stale rośnie dzięki łatwości użytkowania, potężnym bibliotekom i prostej składni. Często przyłapuję się na prototypowaniu poszczególnych funkcjonalności dla WordPressa za pomocą Pythona przed przekonwertowaniem ich na PHP.

Ale zamiast tego, dlaczego po prostu nie uruchomić Pythona na WordPressie? W tym poście omówimy różne metody, których można użyć do uruchamiania kodu Pythona bezpośrednio na stronie WordPress.

Uruchom skrypty Pythona na WordPressie

Możemy użyć wbudowanej funkcji PHP o nazwie exec() do uruchamiania zewnętrznych skryptów, w tym z Pythona. Będzie to wymagało trochę kodu zarówno w PHP, jak i Pythonie, aby zacząć działać, ale jest to całkiem łatwe, gdy zrozumiesz, jak wszystko do siebie pasuje.

david-clode-ojlt2xbwuws-unsplash-1

Możemy stworzyć wtyczkę lub fragment kodu. To zależy od tego, co chcesz zbudować, ale zazwyczaj tworzę fragment kodu, który jest łatwiejszy do zarządzania w interfejsie witryny.

Najpierw upewnij się, że Python jest globalnie zainstalowany na twoim serwerze. Możesz to zrobić samodzielnie, jeśli masz uprawnienia administratora, jeśli nie, musisz poprosić swojego hosta o zainstalowanie. Na przykład w Cloudways musieliśmy poprosić ich o zainstalowanie Pythona dla nas.

Funkcja PHP

Stworzymy kod, aby utworzyć funkcję PHP, która uruchomi dowolny skrypt Pythona w WordPress. Aby ułatwić korzystanie, najpierw pokażę fragment, którego można użyć z wtyczką do zarządzania fragmentami kodu. Następnie możemy przyjrzeć się tworzeniu niestandardowej wtyczki, która zrobi to samo.

Dzięki tej funkcji wszystkie skrypty Pythona znajdują się w bibliotece multimediów, a my możemy wybrać skrypt do uruchomienia, określając identyfikator elementu biblioteki multimediów. Pamiętaj, że prawdopodobnie będziesz musiał zezwolić na przesyłanie typu MIME Pythona. Użyłem tej wtyczki, aby ją włączyć.

Wygląda to trochę skomplikowanie, ponieważ skończyło się na dodaniu wielu funkcji obsługi błędów. Ale w istocie wszystko, co robi kod, to znalezienie pliku z biblioteki multimediów i uruchomienie skryptu, wyświetlając wszystko, co zwróci.

Pamiętaj, że użyłem „python3”, ponieważ jest to zainstalowane na moim komputerze. Możesz chcieć zmienić go na „python”.

<?php function cwpai_run_python_script($media_id) { // Pobierz ścieżkę do pliku multimedialnego na serwerze $media_path = get_attached_file($media_id); // Sprawdź, czy plik multimedialny istnieje if ($media_path) { // Ustaw komendę Pythona $python_command = 'python3 ' . escapeshellarg($media_path); // Uruchom skrypt Pythona i przechwyć dane wyjściowe exec($python_command, $output, $return_status); if ($return_status === 0) { // Skrypt wykonany pomyślnie, zwróć dane wyjściowe return implode("\n", $output); } else { // Wykonanie skryptu nie powiodło się, zapisz błąd i zwróć komunikat o błędzie error_log('Błąd podczas wykonywania skryptu Pythona. Polecenie: ' . $python_command); return 'Błąd podczas wykonywania skryptu Pythona.'; } } else { // Nie znaleziono pliku multimedialnego, zapisz błąd i zwróć komunikat o błędzie error_log('Nie znaleziono pliku multimedialnego dla identyfikatora nośnika ' . $media_id); zwróć „Nie znaleziono pliku multimedialnego.”; } } // Przykład użycia z media ID 6 $result = cwpai_run_python_script(6); // Wypisz wynik lub obsłuż błąd if (is_string($result)) { // Jeśli wynikiem jest ciąg znaków, oznacza to komunikat o błędzie echo $result; } else { // Jeśli wynik nie jest łańcuchem, powinien to być wynik skryptu Pythona // Wyświetl wynik lub wykonaj dalsze przetwarzanie, jeśli to konieczne echo $result; }

Jeśli stworzymy wtyczkę, struktura może wyglądać tak:

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

cwpai_plugin.php wygląda tak:

<?php /* Nazwa wtyczki: CWPAI Opis wtyczki My Python: Wtyczka do wykonywania skryptów Pythona dla plików multimedialnych. Wersja: 1.0 Autor: Twoje imię */ // Kod wtyczki zostanie umieszczony tutaj. function cwpai_run_python_script($nazwa_pliku) { // Pobierz ścieżkę do katalogu wtyczek $plugin_dir = ścieżka_katalogu_wtyczek(__PLIK__); // Ustaw ścieżkę skryptu Pythona względem katalogu wtyczek $python_script_path = $plugin_dir . 'aktywa/py/' . $nazwa_pliku; // Sprawdź, czy plik skryptu Pythona istnieje if (file_exists($python_script_path)) { // Ustaw komendę Pythona $python_command = 'python3 ' . escapeshellarg($python_script_path); // Uruchom skrypt Pythona i przechwyć dane wyjściowe exec($python_command, $output, $return_status); if ($return_status === 0) { // Skrypt wykonany pomyślnie, zwróć dane wyjściowe return implode("\n", $output); } else { // Wykonanie skryptu nie powiodło się, zapisz błąd i zwróć komunikat o błędzie error_log('Błąd podczas wykonywania skryptu Pythona. Polecenie: ' . $python_command); return 'Błąd podczas wykonywania skryptu Pythona.'; } } else { // Nie znaleziono pliku skryptu Pythona, zarejestruj błąd i zwróć komunikat o błędzie error_log('Nie znaleziono pliku skryptu Pythona: ' . $python_script_path); zwróć „Nie znaleziono pliku skryptu Pythona.”; } }

W przypadku wtyczki szybsze jest umieszczanie skryptów Pythona w określonym katalogu (w tym przykładzie jest to asset/py), co pozwala dodawać i edytować je przez FTP. Dlatego lepiej, jeśli masz dużo Pythona do uruchomienia w WordPress.

Aby go użyć, po prostu wywołaj funkcję:

// Przykład użycia z plikiem o nazwie „example.py” $result = cwpai_run_python_script('example.py'); // Wypisz wynik lub obsłuż błąd if (is_string($result)) { // Jeśli wynikiem jest ciąg znaków, oznacza to komunikat o błędzie echo $result; } else { // Jeśli wynik nie jest łańcuchem, powinien to być wynik skryptu Pythona // Wyświetl wynik lub wykonaj dalsze przetwarzanie, jeśli to konieczne echo $result; }

Krótki kod

W „produkcji” pomocne może być również utworzenie krótkiego kodu WP w celu uruchomienia skryptu Pythona. Możemy użyć tej samej ogólnej funkcji z góry, modyfikując ją tak, aby stała się krótkim kodem WordPress:

function cwpai_run_python_script($atts) { // Wyodrębnij atrybuty shortcode $args = shortcode_atts(array('media_id' => '1'), $atts); // Pobierz ścieżkę do pliku multimedialnego na serwerze $media_path = get_attached_file($args['media_id']); // Sprawdź, czy plik multimedialny istnieje if ($media_path) { // Ustaw komendę Pythona $python_command = 'python3 ' . escapeshellarg($media_path); // Uruchom skrypt Pythona i przechwyć dane wyjściowe exec($python_command, $output, $return_status); if ($return_status === 0) { // Skrypt wykonany pomyślnie, zwróć dane wyjściowe return implode("\n", $output); } else { // Wykonanie skryptu nie powiodło się, zapisz błąd i zwróć komunikat o błędzie error_log('Błąd podczas wykonywania skryptu Pythona. Polecenie: ' . $python_command); return 'Błąd podczas wykonywania skryptu Pythona.'; } } else { // Nie znaleziono pliku multimedialnego, zarejestruj błąd i zwróć komunikat o błędzie error_log('Nie znaleziono pliku multimedialnego dla identyfikatora nośnika ' . $args['media_id']); zwróć „Nie znaleziono pliku multimedialnego.”; } } add_shortcode('run_python_script', 'cwpai_run_python_script');

Teraz możesz używać krótkiego kodu [run_python_script media_] bezpośrednio w swoich postach i na stronach. Zastąp „6” identyfikatorem pliku multimedialnego, którego chcesz użyć.

Skorzystaj z usługi hostowanej

Istnieją dziesiątki hostowanych usług, które umożliwiają dostęp do Pythona za pośrednictwem interfejsów API. Może to być pomocne w przypadku bardziej złożonych projektów i przepływów pracy, zwłaszcza że możesz uzyskać dostęp do danych wyjściowych w PHP (przy użyciu CURL), tak jakbyś stworzył własną niestandardową wtyczkę.

Najpierw musisz utworzyć interfejs API w języku Python. Oto dobre źródło informacji na ten temat. Zasadniczo użyjesz Flask do stworzenia aplikacji internetowej, która udostępnia punkty końcowe API. Następnie będziesz hostować tę aplikację internetową za pomocą jednej z tych usług i uzyskiwać dostęp do różnych punktów końcowych API za pomocą PHP.

Oto przykładowa aplikacja w języku Python z interfejsem API:

# api.py import random from flask import Flask, request, jsonify app = Flask(__name__) things_list = [ "Jabłko", "Banan", "Marchew", "Pies", "Słoń", "Kwiat", "Gitara" , "Dom", "Igloo", "Kurtka" ] @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'Otrzymano wiadomość: {message}. Losowa rzecz: {random_thing}'} return jsonify(response_data) if __name__ == '__main__': app.run(debug=True)

I jak uzyskam do niego dostęp w PHP, co pozwoli mi korzystać z tych danych w WordPress (czy to zmiana pól bazy danych, dodanie nowego użytkownika itp.)

<?php // Adres URL punktu końcowego interfejsu API $apiUrl = 'http://twoja-python-api-domain.com/api/data'; // Dane do wysłania do API Pythona $data = array( 'message' => 'Witaj z PHP!' ); // Konwersja danych do formatu JSON $dataJson = json_encode($data); // Inicjalizacja sesji cURL $ch = curl_init(); // Ustaw opcje 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('Typ zawartości: aplikacja/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, prawda); // Wykonaj sesję cURL i przechwyć odpowiedź $response = curl_exec($ch);

Teraz, dzięki danym $response, możesz używać ich z dowolnymi funkcjami WordPress. To jest podstawowy przykład, ale dobrze pokazać, jak to zrobić.

Jeśli jesteś trochę techniczny i chcesz czegoś taniego, sugerowałbym wdrożenie aplikacji Pythona za pomocą Digital Ocean, który kosztuje 2,50 USD miesięcznie za proste rzeczy.

Jeśli chcesz czegoś szybkiego, prostego i łatwego, sprawdź PythonAnywhere.com, który zaczyna się od 5 USD miesięcznie.

Poza małymi scenariuszami ta metoda jest prawdopodobnie najlepszym sposobem na robienie rzeczy.

Konwertuj Pythona na PHP

Inną opcją byłoby po prostu przekonwertowanie Pythona na PHP i użycie wtyczki, takiej jak Code Snippets, do uruchomienia tej funkcji.

Możesz ręcznie przekonwertować go na PHP lub użyć narzędzia takiego jak ChatGPT lub CodeWP, aby wkleić go w Pythonie i poprosić o przepisanie go na PHP. Oto przykład z CodeWP, narzędziem AI stworzonym specjalnie dla twórców WordPress:

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

Wniosek

Będąc programistą WordPress, który pracuje ze sztuczną inteligencją, często muszę szybko wymyślić coś w Pythonie, a nawet stworzyć kompletne funkcjonalności na poziomie produkcyjnym w tym języku.

Postępując zgodnie z tymi metodami, możesz szybko uruchomić Pythona w witrynie WordPress i uzyskać dostęp do wszelkich danych wyjściowych, które może wygenerować.