Lustruiește-ți cotletele Python conectându-ți aplicația cu WordPress
Publicat: 2022-10-18WordPress 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.
Când rulați programul de instalare DevKinsta, Docker începe să se inițialeze imediat:
Apoi, alege site WordPress nou din meniul Creare site nou :
Acum, programul de instalare DevKinsta vă solicită să creați acreditările pentru contul de administrator 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 ).
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.
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:
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 :
Odată ce v-ați conectat, veți vedea Tabloul de bord WordPress :
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:
Pentru a începe să creați parola aplicației, începeți prin a extinde meniul Utilizatori și faceți clic pe Toți utilizatorii :
Acum, faceți clic pe Editați sub numele dvs. de utilizator administrator:
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:
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.:
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 :

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:
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:
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
:
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:
Dacă alegeți din nou opțiunea 1, se va returna id-ul și titlul postării nou adăugate:
De asemenea, puteți deschide site-ul dvs. WordPress pentru a vedea noua postare:
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ă.
Alegerea opțiunii 2 și transmiterea ID-ului postării actualizate va returna detaliile postării nou adăugate:
Ș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:
Notă: Postarea ștearsă poate apărea în continuare dacă rulați opțiunea Listă 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.