ขัดเงา Python ของคุณโดยเชื่อมต่อแอพของคุณกับ WordPress
เผยแพร่แล้ว: 2022-10-18WordPress ได้กลายเป็นระบบจัดการเนื้อหา (CMS) ที่มีการใช้งานมากที่สุด เนื่องจากส่วนติดต่อการเขียนโปรแกรมแอปพลิเคชัน (API) มีส่วนน้อย WordPress REST API ช่วยให้ WordPress สามารถ "พูดคุย" กับแอปพลิเคชันอื่นๆ ที่เขียนในภาษาต่างๆ ได้ รวมถึง Python
Python เป็นภาษาการเขียนโปรแกรมที่ขยายได้พร้อมการใช้งานที่หลากหลายและไวยากรณ์ที่มนุษย์อ่านได้ ทำให้เป็นเครื่องมือที่ทรงพลังสำหรับการจัดการเนื้อหา WordPress จากระยะไกล
ต่อไปนี้คือกรณีการใช้งาน WordPress REST API สำหรับแอปของคุณและวิธีที่คุณสามารถใช้ Python เพื่อสนับสนุนแอปเหล่านี้:
- ใช้เทมเพลตที่กำหนดไว้ล่วงหน้าเพื่อให้แอปของคุณเปลี่ยนข้อมูลดิบเป็นโพสต์ที่มีรูปแบบพร้อมคำอธิบายอย่างรวดเร็ว
- สร้างแอปพลิเคชัน back-office บน Django และ Python ที่แสดงข้อเสนอแบบจำกัดเวลาให้กับลูกค้าของคุณทุกครั้งที่มีส่วนลดเฉพาะวัตถุหรือเหตุการณ์การขายเกิดขึ้น
- รวมสคริปต์ Python เพื่อเรียกใช้ภายในไซต์ WordPress ของคุณ
บทช่วยสอนนี้จะช่วยคุณสร้างแอปพลิเคชันคอนโซล Python อย่างง่ายที่สื่อสารและดำเนินการกับ WordPress REST API รหัสโครงการที่สมบูรณ์ยังมีอยู่
การติดตั้งและกำหนดค่า WordPress
ขั้นแรก ให้ติดตั้งและเรียกใช้เว็บไซต์ WordPress ภายในเครื่องสำหรับการพัฒนาของคุณ นี่เป็นวิธีที่ยอดเยี่ยมในการเริ่มต้นใช้งาน WordPress เนื่องจากคุณไม่จำเป็นต้องสร้างบัญชีหรือซื้อชื่อโดเมนสำหรับเว็บโฮสติ้ง
ก่อนที่จะติดตั้ง WordPress ในเครื่อง ส่วนประกอบบางอย่างจำเป็นต้องทำงานบนคอมพิวเตอร์ของคุณ รวมถึงเว็บเซิร์ฟเวอร์ Apache ฐานข้อมูลในเครื่อง และภาษา PHP ที่ใช้เขียน WordPress
โชคดีที่เราสามารถใช้ DevKinsta ซึ่งเป็นชุดพัฒนา WordPress ในพื้นที่ฟรีที่มีให้สำหรับระบบปฏิบัติการหลักทั้งหมด (คุณไม่จำเป็นต้องเป็นลูกค้า Kinsta จึงจะใช้งานได้)
DevKinsta พร้อมใช้งานสำหรับ Windows, Mac และ Linux และติดตั้ง WordPress รวมถึงการพึ่งพาทั้งหมดบนเครื่องของคุณ
ก่อนติดตั้ง DevKinsta คุณต้องมี Docker ทำงานอยู่ในเครื่อง ดังนั้นให้ดาวน์โหลดและติดตั้ง Docker Engine หากคุณยังไม่ได้ติดตั้ง
หลังจากติดตั้ง Docker Desktop คุณสามารถดาวน์โหลดแพ็คเกจที่เหมาะกับระบบปฏิบัติการของคุณได้โดยอัตโนมัติ
เมื่อคุณเรียกใช้ตัวติดตั้ง DevKinsta Docker จะเริ่มเริ่มต้นทันที:
จากนั้นเลือก ไซต์ WordPress ใหม่ จากเมนู สร้างไซต์ใหม่ :
ตอนนี้ตัวติดตั้ง DevKinsta ต้องการให้คุณสร้างข้อมูลรับรองสำหรับบัญชีผู้ดูแลระบบ WordPress:
เมื่อติดตั้งแล้ว DevKinsta จะเป็นแอปพลิเคชันแบบสแตนด์อโลน ตอนนี้คุณสามารถเข้าถึงทั้งไซต์ WordPress (ผ่านปุ่ม เปิดไซต์ ) และแดชบอร์ดผู้ดูแลระบบ WordPress (ปุ่มผู้ ดูแลระบบ WP )
ถัดไป คุณต้องเปิดใช้งาน SSL และ HTTPS สำหรับเว็บไซต์ของคุณ สิ่งนี้ช่วยเพิ่มความปลอดภัยของเว็บไซต์ของคุณผ่านใบรับรอง SSL
ไปที่แอป DevKinsta แล้วคลิกปุ่ม เปิดไซต์ แท็บเบราว์เซอร์ใหม่จะแสดงหน้าแรกของไซต์ WordPress ของคุณ:
นี่คือบล็อก WordPress ของคุณ ซึ่งคุณสามารถเริ่มเขียนได้ แต่เพื่อให้ Python เข้าถึงและใช้ WordPress REST API เราต้องกำหนดค่าผู้ดูแลระบบ WordPress ก่อน
ตอนนี้ให้คลิกปุ่มผู้ ดูแลระบบ WP บนแอป DevKinsta จากนั้นระบุผู้ใช้และรหัสผ่านของคุณเพื่อเข้าถึง แดชบอร์ด WordPress :
เมื่อคุณเข้าสู่ระบบแล้ว คุณจะเห็น WordPress Dashboard :
WordPress ใช้การรับรองความถูกต้องของคุกกี้เป็นวิธีมาตรฐาน แต่ถ้าคุณต้องการควบคุมโดยใช้ REST API คุณต้องรับรองความถูกต้องด้วยเทคนิคที่อนุญาตให้เข้าถึง WordPress REST API
สำหรับสิ่งนี้ คุณจะต้องใช้รหัสผ่านแอปพลิเคชัน เหล่านี้เป็นสตริงยาว 24 อักขระที่ WordPress สร้างและเชื่อมโยงกับโปรไฟล์ผู้ใช้ที่ได้รับอนุญาตให้จัดการเว็บไซต์ของคุณ
ในการใช้รหัสผ่านแอปพลิเคชัน ให้คลิกเมนู ปลั๊กอิน บนแดชบอร์ด จากนั้นค้นหาปลั๊กอินที่มีชื่อเดียวกัน จากนั้นติดตั้งและเปิดใช้งานปลั๊กอินรหัสผ่านแอปพลิเคชัน:
ในการเริ่มสร้างรหัสผ่านแอปพลิเคชันของคุณ ให้เริ่มต้นด้วยการขยายเมนู ผู้ใช้ และคลิก ผู้ใช้ทั้งหมด :
ตอนนี้ คลิก แก้ไข ด้านล่างชื่อผู้ใช้ผู้ดูแลระบบของคุณ:
เลื่อนลงมาที่หน้า แก้ไขผู้ใช้ และค้นหาส่วน รหัสผ่านแอปพลิเคชัน ที่นี่ ระบุชื่อสำหรับรหัสผ่านแอปพลิเคชัน ซึ่งคุณจะใช้ในภายหลังเพื่อตรวจสอบคำขอแอป Python ของคุณและใช้ REST API:
คลิก เพิ่มรหัสผ่านแอปพลิเคชันใหม่ เพื่อให้ WordPress สามารถสร้างรหัสผ่าน 24 อักขระแบบสุ่มสำหรับคุณ:
ถัดไป ให้คัดลอกรหัสผ่านนี้และบันทึกไว้ในที่ปลอดภัยเพื่อใช้ในภายหลัง โปรดจำไว้ว่า คุณจะไม่สามารถเรียกคืนรหัสผ่านนี้ได้เมื่อคุณปิดหน้านี้
สุดท้าย คุณต้องกำหนดค่าลิงก์ถาวร WordPress ช่วยให้คุณสร้างโครงสร้าง URL ที่กำหนดเองสำหรับลิงก์ถาวรและไฟล์เก็บถาวรของคุณ มาเปลี่ยนกันเพื่อให้บทความ WordPress ชื่อเช่น "Your First WordPress Website" สามารถเข้าถึงได้ผ่าน URL ที่ใช้งานง่าย https://your-website.local:port/your-first-wordpress-website/ แนวทางนี้มีประโยชน์หลายประการ รวมถึงความสามารถในการใช้งานและความสวยงามที่ได้รับการปรับปรุง
ในการกำหนดค่าลิงก์ถาวร ให้ขยายส่วน การตั้งค่า แล้วคลิกเมนู ลิงก์ถาวร ที่นี่ เปลี่ยนการ ตั้งค่าทั่วไป เป็น ชื่อโพสต์ :

การตั้งค่าโครงสร้างลิงก์ถาวรโดยใช้โครงสร้าง ชื่อโพสต์ ก็จำเป็นเช่นกัน เนื่องจากจะทำให้เราสามารถเรียกข้อมูลโพสต์ในภายหลังในโค้ด Python ของเราโดยใช้รูปแบบ JSON มิฉะนั้น จะเกิดข้อผิดพลาดในการถอดรหัส JSON
วิธีควบคุม WordPress จาก Python
WordPress เขียนด้วย PHP แต่มี REST API ที่ช่วยให้ภาษาการเขียนโปรแกรม ไซต์ และแอปอื่น ๆ สามารถใช้เนื้อหาได้ การเปิดเผยเนื้อหา WordPress ในสถาปัตยกรรม REST ทำให้พร้อมใช้งานในรูปแบบ JSON ดังนั้น บริการอื่น ๆ สามารถรวมเข้ากับ WordPress และดำเนินการสร้าง อ่าน อัปเดต และลบ (CRUD) โดยไม่ต้องติดตั้ง WordPress ในเครื่อง
ขั้นต่อไป คุณจะต้องสร้างแอป Python อย่างง่าย เพื่อดูว่าคุณสามารถใช้ WordPress REST API เพื่อสร้าง ดึงข้อมูล อัปเดต และลบโพสต์ได้อย่างไร
สร้างไดเร็กทอรีใหม่สำหรับโปรเจ็กต์ Python อย่างง่ายของคุณ และตั้งชื่อมันว่า PythonWordPress
:
../PythonWordPress
ตอนนี้ คุณจะสร้างสภาพแวดล้อมเสมือนสำหรับโปรเจ็กต์ของคุณ ซึ่งช่วยให้รักษาชุดแพ็คเกจ Python ที่ติดตั้งอิสระ แยกจากไดเร็กทอรีระบบของคุณและหลีกเลี่ยงข้อขัดแย้งของเวอร์ชัน สร้างสภาพแวดล้อมเสมือนโดยดำเนินการคำสั่ง venv
:
python3 -m venv .venv
ตอนนี้ เรียกใช้คำสั่งเพื่อเปิดใช้งานสภาพแวดล้อมเสมือน . venv คำสั่งนี้แตกต่างกันไปตามระบบปฏิบัติการ:
- Windows:
.venvScriptsactivate
- Mac/Linux:
.venv/bin/activate
ถัดไป เก็บการกำหนดค่าที่เกี่ยวข้องกับบัญชี WordPress ของคุณ หากต้องการแยกการกำหนดค่าแอปออกจากโค้ด Python ให้สร้างไฟล์ . env ในไดเร็กทอรีโปรเจ็กต์ของคุณ และเพิ่มตัวแปรสภาพแวดล้อมเหล่านี้ลงในไฟล์:
WEBSITE_URL="<>" API_USERNAME="<>" API_PASSWORD="<>"
โชคดีที่การอ่านข้อมูลด้านบนจากแอป Python นั้นเป็นเรื่องง่าย คุณสามารถติดตั้งแพ็คเกจ Python-dotenv เพื่อให้แอปพลิเคชันของคุณสามารถอ่านการกำหนดค่าจากไฟล์ .env ได้ :
pip install python-dotenv
จากนั้นติดตั้ง aiohttp ซึ่งเป็นไคลเอนต์/เซิร์ฟเวอร์ HTTP แบบอะซิงโครนัสสำหรับ Python:
pip install aiohttp
ตอนนี้เพิ่มไฟล์ชื่อ app.py ด้วยรหัสต่อไปนี้:
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())
รหัสด้านบนแสดงเมนูคอนโซลและขอให้คุณป้อนตัวเลขเพื่อเลือกตัวเลือก ถัดไป คุณจะขยายโครงการนี้และใช้รหัสที่ช่วยให้คุณสามารถแสดงรายการโพสต์ทั้งหมดและเรียกข้อมูลโพสต์เฉพาะโดยใช้รหัสโพสต์

กำลังดึงโพสต์ในรหัส
ในการโต้ตอบกับ WordPress REST API คุณต้องสร้างไฟล์ Python ใหม่ สร้างไฟล์ชื่อ wordpress_api_helper.py ด้วยเนื้อหาต่อไปนี้:
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("=====================================")
สังเกตการใช้ไลบรารี aiohttp ด้านบน ภาษาสมัยใหม่มีไวยากรณ์และเครื่องมือที่เปิดใช้งานการเขียนโปรแกรมแบบอะซิงโครนัส สิ่งนี้จะเพิ่มการตอบสนองของแอปพลิเคชันโดยอนุญาตให้โปรแกรมทำงานควบคู่ไปกับการดำเนินการต่างๆ เช่น คำขอเว็บ การทำงานของฐานข้อมูล และดิสก์ I/O Python เสนอ asyncio เป็นพื้นฐานสำหรับเฟรมเวิร์กการเขียนโปรแกรมแบบอะซิงโครนัสและไลบรารี aiohttp ถูกสร้างขึ้นบน asyncio เพื่อนำการเข้าถึง HTTP Client/Server แบบอะซิงโครนัสที่ทำใน Python
ฟังก์ชัน ClientSession
ด้านบนทำงานแบบอะซิงโครนัสและส่งคืนวัตถุ session
ซึ่งโปรแกรมของเราใช้เพื่อดำเนินการ HTTP GET กับจุดปลาย /wp-json/wp/v2/posts
ข้อแตกต่างระหว่างคำขอดึงข้อมูลโพสต์ทั้งหมดและคำขอเฉพาะคือคำขอสุดท้ายนี้ส่งพารามิเตอร์ post id
ในเส้นทาง URL: /wp-json/wp/v2/posts/{id}
ตอนนี้ เปิดไฟล์ app.py และเพิ่มคำสั่ง import
:
from wordpress_api_helper import get_all_posts, get_post
ถัดไป แก้ไขฟังก์ชัน main
เพื่อเรียกใช้ get_all_posts
และ 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)
จากนั้นเรียกใช้แอพ:
python app.py
จากนั้นคุณจะเห็นเมนูแอปพลิเคชัน:
ลองใช้ตัวเลือกที่ 1 เพื่อดูรายการโพสต์ที่แอป Python ของคุณดึงมา และตัวเลือกที่ 2 เพื่อเลือกโพสต์:
การสร้างโพสต์ใน Code
ในการสร้างโพสต์ WordPress ใน Python ให้เริ่มต้นด้วยการเปิดไฟล์ wordpress_api_helper.py และเพิ่มฟังก์ชัน 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}')
รหัสนี้เรียกใช้ฟังก์ชันการ post
ในวัตถุ session
โดยส่ง auth
การตรวจสอบสิทธิ์ข้าง URL ปลายทาง REST API อ auth
เจ็กต์ตรวจสอบสิทธิ์ตอนนี้มีผู้ใช้ WordPress และรหัสผ่านที่คุณสร้างโดยใช้รหัสผ่านแอปพลิเคชัน ตอนนี้ เปิดไฟล์ app.py และเพิ่มโค้ดเพื่อนำเข้า create_post
และเมนู:
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' }
จากนั้นเพิ่มตัวเลือกเมนูที่สาม:
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}")
จากนั้นเรียกใช้แอปและลองใช้ตัวเลือก 3 ส่งชื่อและเนื้อหาเพื่อสร้างโพสต์ใหม่ใน WordPress:
การเลือกตัวเลือก 1 อีกครั้งจะส่งคืน id และชื่อของโพสต์ที่เพิ่มใหม่:
คุณยังสามารถเปิดเว็บไซต์ WordPress ของคุณเพื่อดูโพสต์ใหม่:
กำลังอัปเดตโพสต์ในรหัส
เปิดไฟล์ wordpress_api_helper.py และเพิ่มฟังก์ชัน 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}')
จากนั้นเปิดไฟล์ app.py และเพิ่มรหัสเพื่อนำเข้า update_post
และเมนู:
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' }
จากนั้น เพิ่มตัวเลือกเมนูที่สี่:
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}")
จากนั้นเปิดแอปและลองใช้ตัวเลือกที่ 4 โดยส่งรหัสโพสต์ ชื่อและเนื้อหาเพื่ออัปเดตโพสต์ที่มีอยู่
การเลือกตัวเลือก 2 และส่งรหัสโพสต์ที่อัปเดตจะส่งคืนรายละเอียดของโพสต์ที่เพิ่มใหม่:
การลบโพสต์ในรหัส
คุณสามารถส่งรหัสโพสต์ไปยัง REST API เพื่อลบโพสต์
เปิดไฟล์ wordpress_api_helper.py และเพิ่มฟังก์ชัน 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.')
ตอนนี้เปิดไฟล์ app.py และเพิ่มรหัสเพื่อนำเข้า delete_post
และเมนู:
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', }
จากนั้น เพิ่มตัวเลือกเมนูที่ห้า:
elif option == 5: print('Deleting a post...') id = input_number('Enter the post id: ') await delete_post(id)
ตอนนี้ให้รันแอพแล้วลองตัวเลือก 5 ส่ง id เพื่อลบโพสต์ที่มีอยู่ใน WordPress:
หมายเหตุ: โพสต์ที่ถูกลบอาจยังคงปรากฏขึ้นหากคุณเรียกใช้ตัวเลือก รายการโพสต์ :
หากต้องการยืนยันว่าคุณลบโพสต์แล้ว โปรดรอสักครู่แล้วลองใช้ตัวเลือก รายการโพสต์ อีกครั้ง และนั่นแหล่ะ!
สรุป
ขอบคุณ WordPress REST API และไลบรารีไคลเอนต์ HTTP ของ Python แอป Python และ WordPress สามารถทำงานร่วมกันและพูดคุยกันได้ ประโยชน์ของ REST API คือช่วยให้คุณสามารถใช้งาน WordPress ได้จากระยะไกลจากแอป Python โดยที่ภาษาอันทรงพลังของ Python ช่วยให้สามารถสร้างเนื้อหาอัตโนมัติที่เป็นไปตามโครงสร้างและความถี่ที่คุณต้องการ
DevKinsta ทำให้การสร้างและพัฒนาไซต์ WordPress ในพื้นที่ทำได้ง่ายและรวดเร็ว มีสภาพแวดล้อมในท้องถิ่นสำหรับการพัฒนาธีมและปลั๊กอินของ WordPress และนำเสนอโมเดลการปรับใช้ที่ง่ายขึ้นซึ่งได้รับความอนุเคราะห์จากโมเดลการติดตั้งแบบ Docker ที่มีในตัวเอง
ประสบการณ์ของคุณในการทำงานกับ Python และ WordPress คืออะไร?
เมื่อพร้อมที่จะขยายประสบการณ์นั้น คุณสามารถอ่านคู่มือฉบับสมบูรณ์สำหรับ WordPress REST API Basics เพื่อสำรวจความเป็นไปได้อื่นๆ