Lustruiește-ți cotletele Python conectându-ți aplicația cu WordPress

Publicat: 2022-10-18

WordPress a devenit cel mai folosit sistem de management al conținutului (CMS) datorită în mare parte interfeței sale de programare a aplicațiilor (API). API-ul REST WordPress îi permite WordPress să „vorbească” cu alte aplicații scrise în diferite limbi, inclusiv Python.

Python este un limbaj de programare extensibil cu diverse utilizări și o sintaxă care poate fi citită de om, ceea ce îl face un instrument puternic pentru gestionarea de la distanță a conținutului WordPress.

Iată câteva cazuri de utilizare a API-ului REST WordPress pentru aplicațiile dvs. și cum puteți utiliza Python pentru a le susține:

  • Utilizați șabloane predefinite pentru a permite aplicației dvs. să transforme rapid datele brute în postări formatate cu explicații.
  • Creați o aplicație de back-office pe Django și Python care afișează oferte pe timp limitat pentru clienții dvs. de fiecare dată când are loc o reducere specifică unui obiect sau un eveniment de vânzare.
  • Integrați scripturi Python pentru a rula în site-ul dvs. WordPress

Acest tutorial vă va ajuta să creați o aplicație simplă de consolă Python care comunică și execută operațiuni pe API-ul REST WordPress. Codul complet al proiectului este de asemenea disponibil.


Instalarea și configurarea WordPress

Mai întâi, să instalăm și să rulăm un site web WordPress local pe mașina dvs. de dezvoltare. Aceasta este o modalitate excelentă de a începe cu WordPress, deoarece nu trebuie să vă creați un cont sau să cumpărați un nume de domeniu pentru găzduire web.

Înainte de a instala WordPress local, unele componente sunt necesare pentru a rula pe computerul dvs., inclusiv serverul web Apache, o bază de date locală și limbajul PHP în care este scris WordPress.

Din fericire, putem folosi DevKinsta, o suită locală gratuită de dezvoltare WordPress disponibilă pentru toate sistemele de operare majore (nu trebuie să fii client Kinsta pentru a o folosi).

DevKinsta este disponibil pentru Windows, Mac și Linux și instalează WordPress plus toate dependențele sale pe mașina dvs. locală.

Înainte de a instala DevKinsta, trebuie să aveți Docker care rulează local, așa că descărcați și instalați Motorul Docker dacă nu ați făcut încă.

După instalarea Docker Desktop, puteți descărca automat pachetul care se potrivește sistemului de operare.

Captură de ecran a paginii de descărcare a DevKinsta.
Pagina de instalare a DevKinsta.

Când rulați programul de instalare DevKinsta, Docker începe să se inițialeze imediat:

Ecranul Docker de pornire al DevKinsta.
DevKinsta pornește Docker local.

Apoi, alege site WordPress nou din meniul Creare site nou :

DevKinsta creează un nou ecran de site WordPress.
Meniul Creare site nou al DevKinsta.

Acum, programul de instalare DevKinsta vă solicită să creați acreditările pentru contul de administrator WordPress:

Noul ecran de creare a site-ului WordPress al DevKinsta.
DevKinsta afișează formularul noului site WordPress.

Odată instalat, DevKinsta este o aplicație autonomă. Acum puteți accesa atât site-ul WordPress (prin butonul Open Site ) cât și tabloul de bord de administrare WordPress (butonul WP Admin ).

Ecranul cu informații despre site-ul WordPress al DevKinsta.
Panoul cu informații despre site al DevKinsta.

Apoi, trebuie să activați SSL și HTTPS pentru site-ul dvs. web. Acest lucru îmbunătățește securitatea site-ului dvs. prin intermediul unui certificat SSL.

Activarea opțiunii SSL și HTTPS a DevKinsta.
Opțiunea „SSL și HTTPS” a DevKinsta.

Acum accesați aplicația DevKinsta și faceți clic pe butonul Deschidere site . O nouă filă de browser va afișa pagina de pornire a site-ului dvs. WordPress:

Pagina de pornire a site-ului dvs. WordPress local.
Pagina principală WordPress.

Acesta este blogul tău WordPress, unde poți începe să scrii. Dar pentru a permite lui Python să acceseze și să utilizeze API-ul REST WordPress, trebuie mai întâi să configuram administratorul WordPress.

Acum faceți clic pe butonul WP Admin din aplicația DevKinsta, apoi furnizați utilizatorul și parola pentru a accesa Tabloul de bord WordPress :

Ecran de autentificare în tabloul de bord WordPress.
Formular de conectare WordPress.

Odată ce v-ați conectat, veți vedea Tabloul de bord WordPress :

Bun venit la ecranul de administrare WordPress.
Pagina WordPress Dashboard.

WordPress folosește autentificarea prin cookie-uri ca metodă standard. Dar dacă doriți să îl controlați folosind API-ul REST, trebuie să vă autentificați cu o tehnică care să acorde acces la API-ul REST WordPress.

Pentru aceasta, veți folosi parolele aplicației. Acestea sunt șiruri lungi de 24 de caractere pe care WordPress le generează și le asociază cu un profil de utilizator care are permisiunea de a vă gestiona site-ul.

Pentru a utiliza parolele de aplicație, faceți clic pe meniul Plugin din tabloul de bord, apoi căutați pluginul cu același nume. Apoi instalați și activați pluginul pentru parolele aplicației:

Instalarea și activarea pluginului WordPress Application Passwords.
Plugin pentru parole de aplicație pentru WordPress.

Pentru a începe să creați parola aplicației, începeți prin a extinde meniul Utilizatori și faceți clic pe Toți utilizatorii :

Meniul WordPress extins pentru utilizatori.
Meniu extins pentru utilizatori.

Acum, faceți clic pe Editați sub numele dvs. de utilizator administrator:

Faceți clic pe butonul „Editați” de sub utilizatorul dvs. WordPress din meniul Utilizatori.
Interfață WP-Admin WordPress.

Derulați în jos pagina Editați utilizator și găsiți secțiunea Parole aplicației . Aici, furnizați un nume pentru parola aplicației, pe care o veți folosi mai târziu pentru a vă autentifica solicitările aplicației Python și pentru a utiliza API-ul REST:

Tabloul de bord pentru pluginul Parolele aplicației.
Pagina Parola aplicației.

Faceți clic pe Adăugați o nouă parolă pentru aplicație , astfel încât WordPress să poată genera o parolă aleatorie de 24 de caractere pentru dvs.:

Noua parolă generată de pluginul Application Passwords.
Pagina Parolă nouă a aplicației.

Apoi, copiați această parolă și salvați-o într-o locație sigură pentru a o utiliza mai târziu. Rețineți că nu veți putea recupera această parolă odată ce închideți această pagină.

În cele din urmă, trebuie să configurați permalink-urile. WordPress vă permite să creați o structură URL personalizată pentru permalink-urile și arhivele dvs. Să o schimbăm astfel încât o postare WordPress intitulată, de exemplu, „Primul tău site WordPress” să poată fi accesată prin adresa URL intuitivă https://your-website.local:port/your-first-wordpress-website/. Această abordare aduce mai multe beneficii, inclusiv o utilizare și o estetică îmbunătățite.

Pentru a configura permalink-uri, extindeți secțiunea Setări și faceți clic pe meniul Permalink -uri. Aici, schimbați setările comune la numele postării :

Modificarea setărilor de permalink WordPress.

Setarea structurii permalink utilizând structura numelui postului este, de asemenea, necesară, deoarece ne va permite să recuperăm postări mai târziu în codul nostru Python folosind formatul JSON. În caz contrar, va fi generată o eroare de decodare JSON.

Cum să controlezi WordPress din Python

WordPress este scris în PHP, dar are un API REST care permite altor limbaje de programare, site-uri și aplicații să-și consume conținutul. Expunerea conținutului WordPress în arhitectura REST îl face disponibil în format JSON. Prin urmare, alte servicii se pot integra cu WordPress și pot efectua operațiuni de creare, citire, actualizare și ștergere (CRUD) fără a necesita o instalare locală a WordPress.

Apoi, veți construi o aplicație Python simplă pentru a vedea cum puteți utiliza API-ul REST WordPress pentru a crea, prelua, actualiza și șterge postări.

Creați un director nou pentru noul proiect Python simplu și denumiți-l așa cum ar fi PythonWordPress :

 ../PythonWordPress

Acum, veți crea un mediu virtual pentru proiectul dvs., permițându-i acestuia să mențină un set independent de pachete Python instalate, izolându-le de directoarele de sistem și evitând conflictele de versiuni. Creați un mediu virtual executând comanda venv :

 python3 -m venv .venv

Acum, rulați o comandă pentru a activa mediul virtual .venv . Această comandă variază în funcție de sistemul de operare:

  • Windows: .venvScriptsactivate
  • Mac/Linux: .venv/bin/activate

Apoi, stocați configurația legată de contul dvs. WordPress. Pentru a separa configurația aplicației de codul Python, creați un fișier .env în directorul proiectului și adăugați aceste variabile de mediu în fișier:

 WEBSITE_URL="<>" API_USERNAME="<>" API_PASSWORD="<>"

Din fericire, citirea datelor de mai sus dintr-o aplicație Python este ușoară. Puteți instala pachetul Python-dotenv , astfel încât aplicația dvs. să poată citi configurația din fișierul .env :

 pip install python-dotenv

Apoi, instalați aiohttp , un client/server HTTP asincron pentru Python:

 pip install aiohttp

Acum adăugați un fișier numit app.py cu următorul cod:

 import asyncio menu_options = { 1: 'List Posts', 2: 'Retrieve a Post' } def print_menu(): for key in menu_options.keys(): print (key, '--', menu_options[key] ) async def main(): while(True): print_menu() option = input_number('Enter your choice: ') #Check what choice was entered and act accordingly if option == 1: print('Listing posts...') elif option == 2: print('Retrieving a post...') else: print('Invalid option. Please enter a number between 1 and 5.') def input_number(prompt): while True: try: value = int(input(prompt)) except ValueError: print('Wrong input. Please enter a number ...') continue if value < 0: print("Sorry, your response must not be negative.") else: break return value def input_text(prompt): while True: text = input(prompt) if len(text) == 0: print("Text is required.") continue else: break return text if __name__=='__main__': asyncio.run(main())

Codul de mai sus afișează un meniu consolă și vă solicită să introduceți un număr pentru a alege o opțiune. Apoi, veți extinde acest proiect și veți implementa codul care vă permite să enumerați toate postările și să preluați o anumită postare folosind ID-ul postării.

Preluarea postărilor în cod

Pentru a interacționa cu WordPress REST API, trebuie să creați un nou fișier Python. Creați un fișier numit wordpress_api_helper.py cu următorul conținut:

 import aiohttp import base64 import os import json from dotenv import load_dotenv load_dotenv() user=os.getenv("API_USERNAME") password=os.getenv("API_PASSWORD") async def get_all_posts(): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.get("/wp-json/wp/v2/posts") as response: print("Status:", response.status) text = await response.text() wp_posts = json.loads(text) sorted_wp_posts = sorted(wp_posts, key=lambda p: p['id']) print("=====================================") for wp_post in sorted_wp_posts: print("id:", wp_post['id']) print("title:", wp_post['title']['rendered']) print("=====================================") async def get_post(id): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.get(f"/wp-json/wp/v2/posts/{id}") as response: print("Status:", response.status) text = await response.text() wp_post = json.loads(text) print("=====================================") print("Post") print(" id:", wp_post['id']) print(" title:", wp_post['title']['rendered']) print(" content:", wp_post['content']['rendered']) print("=====================================")

Observați utilizarea bibliotecii aiohttp de mai sus. Limbile moderne oferă sintaxă și instrumente care permit programarea asincronă. Acest lucru crește receptivitatea aplicației, permițând programului să efectueze sarcini alături de operațiuni precum solicitări web, operațiuni de bază de date și I/O pe disc. Python oferă asyncio ca bază pentru cadrul său de programare asincronă, iar biblioteca aiohttp este construită pe deasupra asyncio pentru a aduce acces asincron la operațiunile HTTP Client/Server realizate în Python.

Funcția ClientSession de mai sus rulează asincron și returnează un obiect de session , pe care programul nostru îl folosește pentru a efectua o operație HTTP GET împotriva punctului final /wp-json/wp/v2/posts . Singura diferență dintre o solicitare de a prelua toate postările și o solicitare pentru una anume este că această ultimă solicitare trece un parametru post id în ruta URL: /wp-json/wp/v2/posts/{id} .

Acum, deschideți fișierul app.py și adăugați declarația de import :

 from wordpress_api_helper import get_all_posts, get_post

Apoi, modificați funcția main pentru a apela funcțiile get_all_posts și get_post :

 if option == 1: print('Listing posts...') await get_all_posts() elif option == 2: print('Retrieving a post...') id = input_number('Enter the post id: ') await get_post(id)

Apoi rulați aplicația:

 python app.py

Veți vedea apoi meniul aplicației:

Pornirea aplicației Python conectată la WordPress.
Meniul aplicației Python.

Acum încercați opțiunea 1 pentru a vedea lista de postări pe care le preia aplicația dvs. Python și opțiunea 2 pentru a selecta o postare:

Încercați opțiunea 1 pentru a vedea lista de postări pe care le preia aplicația dvs. Python și opțiunea 2 pentru a selecta o postare.
Aplicația Python afișează lista de postări și o singură postare selectată de utilizator.

Crearea de postări în cod

Pentru a crea o postare WordPress în Python, începeți prin a deschide fișierul wordpress_api_helper.py și adăugați funcția create_post :

Te lupți cu timpii de nefuncționare și problemele WordPress? Kinsta este soluția de găzduire concepută pentru a vă economisi timp! Verificați caracteristicile noastre
 async def create_post(title, content): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.post( f"/wp-json/wp/v2/posts?content={content}&title={title}&status=publish" , auth=aiohttp.BasicAuth(user, password)) as response: print("Status:", response.status) text = await response.text() wp_post = json.loads(text) post_id = wp_post['id'] print(f'New post created with id: {post_id}')

Acest cod apelează funcția de post din obiectul session , trecând parametrul de auth lângă adresa URL a punctului final al API-ului REST. Obiectul de auth conține acum utilizatorul WordPress și parola pe care ați creat-o folosind parolele aplicației. Acum, deschideți fișierul app.py și adăugați cod pentru a importa create_post și meniul:

 from wordpress_api_helper import get_all_posts, get_post, create_post menu_options = { 1: 'List Posts', 2: 'Retrieve a Post', 3: 'Create a Post' }

Apoi adăugați o a treia opțiune de meniu:

 elif option == 3: print('Creating a post...') title = input_text('Enter the post title: ') content = input_text('Enter the post content: ') await create_post(title, f"{content}")

Apoi, rulați aplicația și încercați opțiunea 3, pasând un titlu și conținut pentru a crea o nouă postare în WordPress:

Crearea unei postări WordPress cu Python.
Aplicația Python afișează postarea WordPress nou creată.

Dacă alegeți din nou opțiunea 1, se va returna id-ul și titlul postării nou adăugate:

Se returnează id-ul și titlul postării nou adăugate.
Aplicația Python returnează titlul și id-ul noii postări.

De asemenea, puteți deschide site-ul dvs. WordPress pentru a vedea noua postare:

Postarea nou creată în browser.
Imaginea din browser a noii postări WordPress.

Actualizarea postărilor în cod

Deschideți fișierul wordpress_api_helper.py și adăugați funcția update_post :

 async def update_post(id, title, content): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.post( f"/wp-json/wp/v2/posts/{id}?content={content}&title={title}&status=publish" , auth=aiohttp.BasicAuth(user, password)) as response: print("Status:", response.status) text = await response.text() wp_post = json.loads(text) post_id = wp_post['id'] print(f'New post created with id: {post_id}')

Apoi deschideți fișierul app.py și adăugați cod pentru a importa update_post și meniul:

 from wordpress_api_helper import get_all_posts, get_post, create_post, update_post menu_options = { 1: 'List Posts', 2: 'Retrieve a Post', 3: 'Create a Post', 4: 'Update a Post' }

Apoi, adăugați o a patra opțiune de meniu:

 elif option == 4: print('Updating a post...') id = input_number('Enter the post id: ') title = input_text('Enter the post title: ') content = input_text('Enter the post content: ') await update_post(id, title, f"{content}")

Apoi rulați aplicația și încercați opțiunea 4, transmițând un ID de postare, un titlu și un conținut pentru a actualiza o postare existentă.

Actualizarea unei postări WordPress.
Aplicația Python afișează meniul actualizat.

Alegerea opțiunii 2 și transmiterea ID-ului postării actualizate va returna detaliile postării nou adăugate:

Returnează detaliile postării nou actualizate.
Aplicația Python afișează postarea actualizată.

Ștergerea postărilor din cod

Puteți transmite ID-ul postării către API-ul REST pentru a șterge o postare.

Deschideți fișierul wordpress_api_helper.py și adăugați funcția delete_post :

 async def delete_post(id): async with aiohttp.ClientSession(os.getenv("WEBSITE_URL")) as session: async with session.delete( f"/wp-json/wp/v2/posts/{id}" , auth=aiohttp.BasicAuth(user, password)) as response: print("Status:", response.status) text = await response.text() wp_post = json.loads(text) post_id = wp_post['id'] print(f'Post with id {post_id} deleted successfully.')

Acum deschideți fișierul app.py și adăugați cod pentru a importa delete_post și meniul:

 from wordpress_api_helper import get_all_posts, get_post, create_post, update_post, delete_post menu_options = { 1: 'List Posts', 2: 'Retrieve a Post', 3: 'Create a Post', 4: 'Update a Post', 5: 'Delete a Post', }

Apoi, adăugați o a cincea opțiune de meniu:

 elif option == 5: print('Deleting a post...') id = input_number('Enter the post id: ') await delete_post(id)

Acum rulați aplicația și încercați opțiunea 5, pasând un id pentru a șterge postarea existentă în WordPress:

Ștergerea unei postări WordPress cu aplicația Python.
Aplicația Python afișează ștergerea postării selectate.

Notă: Postarea ștearsă poate apărea în continuare dacă rulați opțiunea Listă postări :

Postări în lista de aplicații Python.
Aplicația Python afișează lista originală de postări.

Pentru a confirma că ați șters postarea, așteptați câteva secunde și încercați din nou opțiunea Listă postări . Si asta e!

rezumat

Datorită API-ului REST WordPress și bibliotecilor client HTTP ale Python, aplicațiile Python și WordPress pot face echipă și pot vorbi între ele. Avantajul API-ului REST este că vă permite să operați WordPress de la distanță dintr-o aplicație Python, unde limbajul puternic al lui Python permite crearea automată de conținut care urmează structura și frecvența dorită.

DevKinsta face crearea și dezvoltarea unui site WordPress local rapid și ușor. Oferă un mediu local pentru dezvoltarea temelor și pluginurilor WordPress și oferă un model de implementare simplificat datorită modelului său de instalare autonom, bazat pe Docker.

Care este experiența ta de lucru cu Python și WordPress?

Când sunteți gata să extindeți această experiență, puteți citi Ghidul complet pentru noțiunile de bază ale API-ului REST WordPress pentru a explora alte posibilități.