Poles Python Chops Anda dengan Menghubungkan Aplikasi Anda dengan WordPress

Diterbitkan: 2022-10-18

WordPress telah menjadi sistem manajemen konten (CMS) yang paling banyak digunakan karena tidak sedikit dari antarmuka pemrograman aplikasi (API). WordPress REST API memungkinkan WordPress untuk “berbicara” dengan aplikasi lain yang ditulis dalam berbagai bahasa — termasuk Python.

Python adalah bahasa pemrograman yang dapat diperluas dengan beragam kegunaan dan sintaks yang dapat dibaca manusia, menjadikannya alat yang ampuh untuk mengelola konten WordPress dari jarak jauh.

Berikut adalah beberapa kasus penggunaan WordPress REST API untuk aplikasi Anda dan bagaimana Anda dapat menggunakan Python untuk mendukungnya:

  • Gunakan template yang telah ditentukan sebelumnya untuk memungkinkan aplikasi Anda mengubah data mentah menjadi posting yang diformat dengan penjelasan dengan cepat.
  • Bangun aplikasi back-office di Django dan Python yang menampilkan penawaran waktu terbatas kepada pelanggan Anda setiap kali terjadi diskon atau acara penjualan khusus objek.
  • Integrasikan skrip Python untuk dijalankan di dalam situs WordPress Anda

Tutorial ini akan membantu Anda membuat aplikasi konsol Python sederhana yang berkomunikasi dengan dan menjalankan operasi pada REST API WordPress. Kode proyek lengkap juga tersedia.


Menginstal dan Mengonfigurasi WordPress

Pertama, mari instal dan jalankan situs WordPress secara lokal di mesin pengembangan Anda. Ini adalah cara terbaik untuk memulai dengan WordPress karena Anda tidak perlu membuat akun atau membeli nama domain untuk hosting web.

Sebelum menginstal WordPress secara lokal, beberapa komponen harus dijalankan di komputer Anda, termasuk server web Apache, database lokal, dan bahasa PHP yang digunakan untuk menulis WordPress.

Untungnya, kita dapat menggunakan DevKinsta, suite pengembangan WordPress lokal gratis yang tersedia untuk semua OS utama (Anda tidak harus menjadi pelanggan Kinsta untuk menggunakannya).

DevKinsta tersedia untuk Windows, Mac, dan Linux, dan menginstal WordPress plus semua dependensinya di mesin lokal Anda.

Sebelum menginstal DevKinsta, Anda harus menjalankan Docker secara lokal, jadi unduh dan instal Docker Engine jika belum.

Setelah menginstal Docker Desktop, Anda dapat secara otomatis mengunduh paket yang sesuai dengan OS Anda.

Tangkapan layar halaman unduhan DevKinsta.
Halaman instalasi DevKinsta.

Saat Anda menjalankan pemasang DevKinsta, Docker segera memulai inisialisasi:

Layar Docker awal DevKinsta.
DevKinsta memulai Docker secara lokal.

Selanjutnya, pilih situs WordPress Baru dari menu Buat Situs baru :

DevKinsta membuat layar situs WordPress baru.
Menu Buat Situs Baru DevKinsta.

Sekarang penginstal DevKinsta mengharuskan Anda membuat kredensial untuk akun admin WordPress:

Layar pembuatan situs WordPress baru DevKinsta.
DevKinsta menampilkan formulir situs WordPress Baru.

Setelah terinstal, DevKinsta adalah aplikasi mandiri. Sekarang Anda dapat mengakses situs WordPress (melalui tombol Buka Situs ) dan dasbor admin WordPress (tombol Admin WP ).

Layar info situs WordPress DevKinsta.
Panel info Situs DevKinsta.

Selanjutnya, Anda perlu mengaktifkan SSL dan HTTPS untuk situs web Anda. Ini meningkatkan keamanan situs web Anda melalui sertifikat SSL.

Mengaktifkan opsi SSL dan HTTPS DevKinsta.
Opsi "SSL dan HTTPS" DevKinsta.

Sekarang buka aplikasi DevKinsta dan klik tombol Buka situs . Tab browser baru akan menampilkan halaman beranda situs WordPress Anda:

Halaman beranda situs WordPress lokal Anda.
Beranda WordPress.

Ini adalah blog WordPress Anda, tempat Anda dapat mulai menulis. Tetapi untuk mengaktifkan Python untuk mengakses dan menggunakan API REST WordPress, kita harus terlebih dahulu mengkonfigurasi Admin WordPress.

Sekarang klik tombol WP Admin pada aplikasi DevKinsta, lalu berikan pengguna dan kata sandi Anda untuk mengakses Dashboard WordPress :

Layar masuk dasbor admin WordPress.
Formulir masuk WordPress.

Setelah Anda masuk, Anda akan melihat Dasbor WordPress :

Selamat datang di layar admin WordPress.
Halaman Dasbor WordPress.

WordPress menggunakan otentikasi cookie sebagai metode standarnya. Tetapi jika Anda ingin mengontrolnya menggunakan REST API, Anda harus mengotentikasi dengan teknik yang memberikan akses ke WordPress REST API.

Untuk ini, Anda akan menggunakan Kata Sandi Aplikasi. Ini adalah string panjang 24 karakter yang dihasilkan WordPress dan dikaitkan dengan profil pengguna yang memiliki izin untuk mengelola situs web Anda.

Untuk menggunakan Kata Sandi Aplikasi, klik menu Plugin di Dasbor, lalu cari plugin dengan nama yang sama. Kemudian instal dan aktifkan Plugin Kata Sandi Aplikasi:

Menginstal dan mengaktifkan plugin Kata Sandi Aplikasi WordPress.
Plugin Kata Sandi Aplikasi untuk WordPress.

Untuk mulai membuat kata sandi aplikasi Anda, mulailah dengan memperluas menu Pengguna dan mengklik Semua Pengguna :

Menu WordPress Pengguna yang Diperluas.
Menu Pengguna yang Diperluas.

Sekarang, klik Edit di bawah nama pengguna admin Anda:

Klik tombol "Edit" di bawah pengguna WordPress Anda di bawah menu Pengguna.
Antarmuka WP-Admin WordPress.

Gulir ke bawah halaman Edit Pengguna dan temukan bagian Kata Sandi Aplikasi . Di sini, berikan nama untuk Kata Sandi Aplikasi, yang akan Anda gunakan nanti untuk mengautentikasi permintaan aplikasi Python dan menggunakan REST API:

Dasbor plugin Kata Sandi Aplikasi.
halaman Kata Sandi Aplikasi.

Klik Tambahkan Kata Sandi Aplikasi Baru sehingga WordPress dapat membuat kata sandi 24 karakter acak untuk Anda:

Kata sandi baru yang dihasilkan oleh plugin Kata Sandi Aplikasi.
Halaman Kata Sandi Aplikasi Baru.

Selanjutnya, salin kata sandi ini dan simpan di lokasi yang aman untuk digunakan nanti. Ingat, Anda tidak akan dapat mengambil kata sandi ini setelah Anda menutup halaman ini.

Terakhir, Anda harus mengonfigurasi tautan permanen. WordPress memungkinkan Anda membuat struktur URL khusus untuk permalink dan arsip Anda. Mari kita ubah sehingga posting WordPress berjudul, misalnya, "Situs Web WordPress Pertama Anda" dapat diakses melalui URL intuitif https://your-website.local:port/your-first-wordpress-website/. Pendekatan ini membawa beberapa manfaat, termasuk peningkatan kegunaan dan estetika.

Untuk mengonfigurasi permalink, perluas bagian Pengaturan dan klik menu Permalinks . Di sini, ubah Pengaturan Umum menjadi Nama posting :

Mengubah pengaturan tautan permanen WordPress.

Pengaturan struktur permalink menggunakan struktur nama Posting juga diperlukan karena akan memungkinkan kita untuk mengambil posting nanti dalam kode Python kita menggunakan format JSON. Jika tidak, kesalahan penguraian kode JSON akan terjadi.

Cara Mengontrol WordPress Dari Python

WordPress ditulis dalam PHP, tetapi memiliki REST API yang memungkinkan bahasa pemrograman, situs, dan aplikasi lain untuk menggunakan kontennya. Mengekspos konten WordPress dalam arsitektur REST membuatnya tersedia dalam format JSON. Oleh karena itu, layanan lain dapat berintegrasi dengan WordPress dan melakukan operasi buat, baca, perbarui, dan hapus (CRUD) tanpa memerlukan instalasi WordPress lokal.

Selanjutnya, Anda akan membuat aplikasi Python sederhana untuk melihat bagaimana Anda dapat menggunakan REST API WordPress untuk membuat, mengambil, memperbarui, dan menghapus postingan.

Buat direktori baru untuk proyek Python sederhana baru Anda dan beri nama seperti PythonWordPress :

 ../PythonWordPress

Sekarang, Anda akan membuat lingkungan virtual untuk proyek Anda, memungkinkannya untuk memelihara satu set independen paket Python yang diinstal, mengisolasinya dari direktori sistem Anda dan menghindari konflik versi. Buat lingkungan virtual dengan menjalankan perintah venv :

 python3 -m venv .venv

Sekarang, jalankan perintah untuk mengaktifkan lingkungan virtual .venv . Perintah ini bervariasi menurut OS:

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

Selanjutnya, simpan konfigurasi yang terkait dengan akun WordPress Anda. Untuk memisahkan konfigurasi aplikasi dari kode Python Anda, buat file .env di direktori proyek Anda, dan tambahkan variabel lingkungan ini ke file:

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

Untungnya, membaca data di atas dari aplikasi Python itu mudah. Anda dapat menginstal paket Python-dotenv sehingga aplikasi Anda dapat membaca konfigurasi dari file .env :

 pip install python-dotenv

Kemudian, instal aiohttp , klien/server HTTP asinkron untuk Python:

 pip install aiohttp

Sekarang tambahkan file bernama app.py dengan kode berikut:

 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())

Kode di atas menampilkan menu konsol dan meminta Anda memasukkan nomor untuk memilih opsi. Selanjutnya, Anda akan memperluas proyek ini dan menerapkan kode yang memungkinkan Anda membuat daftar semua posting dan mengambil posting tertentu menggunakan id postingnya.

Mengambil Postingan dalam Kode

Untuk berinteraksi dengan WordPress REST API, Anda harus membuat file Python baru. Buat file bernama wordpress_api_helper.py dengan konten berikut:

 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("=====================================")

Perhatikan penggunaan perpustakaan aiohttp di atas. Bahasa modern menyediakan sintaks dan alat yang memungkinkan pemrograman asinkron. Ini meningkatkan respons aplikasi dengan memungkinkan program melakukan tugas di samping operasi seperti permintaan web, operasi basis data, dan I/O disk. Python menawarkan asyncio sebagai dasar untuk kerangka pemrograman asinkronnya, dan pustaka aiohttp dibangun di atas asyncio untuk membawa akses asinkron ke operasi Klien/Server HTTP yang dibuat dengan Python.

Fungsi ClientSession di atas berjalan secara asinkron dan mengembalikan objek session , yang digunakan program kami untuk melakukan operasi GET HTTP terhadap titik akhir /wp-json/wp/v2/posts . Satu-satunya perbedaan antara permintaan untuk mengambil semua posting dan permintaan untuk yang spesifik adalah bahwa permintaan terakhir ini melewati parameter post id di rute URL: /wp-json/wp/v2/posts/{id} .

Sekarang, buka file app.py dan tambahkan pernyataan import :

 from wordpress_api_helper import get_all_posts, get_post

Selanjutnya, ubah fungsi main untuk memanggil fungsi get_all_posts dan 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)

Kemudian jalankan aplikasi:

 python app.py

Anda kemudian akan melihat menu aplikasi:

Memulai aplikasi Python yang terhubung ke WordPress.
Menu aplikasi Python.

Sekarang coba opsi 1 untuk melihat daftar kiriman yang diambil oleh aplikasi Python Anda, dan opsi 2 untuk memilih kiriman:

Coba opsi 1 untuk melihat daftar kiriman yang diambil oleh aplikasi Python Anda, dan opsi 2 untuk memilih kiriman.
Aplikasi Python menampilkan daftar posting dan satu posting yang dipilih pengguna.

Membuat Postingan dalam Kode

Untuk membuat posting WordPress dengan Python, mulailah dengan membuka file wordpress_api_helper.py dan tambahkan fungsi create_post :

Berjuang dengan downtime dan masalah WordPress? Kinsta adalah solusi hosting yang dirancang untuk menghemat waktu Anda! Lihat fitur kami
 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}')

Kode ini memanggil fungsi post di objek session , meneruskan parameter auth di samping URL titik akhir REST API. Objek auth sekarang berisi pengguna WordPress dan kata sandi yang Anda buat menggunakan Kata Sandi Aplikasi. Sekarang, buka file app.py dan tambahkan kode untuk mengimpor create_post dan menu:

 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' }

Kemudian tambahkan opsi menu ketiga:

 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}")

Kemudian, jalankan aplikasi dan coba opsi 3, berikan judul dan konten untuk membuat posting baru di WordPress:

Membuat posting WordPress dengan Python.
Aplikasi Python menampilkan posting WordPress yang baru dibuat.

Memilih opsi 1 lagi akan mengembalikan id dan judul posting yang baru ditambahkan:

Mengembalikan id dan judul posting yang baru ditambahkan.
Aplikasi Python mengembalikan judul dan id posting baru.

Anda juga dapat membuka situs WordPress Anda untuk melihat posting baru:

Postingan yang baru dibuat di browser.
Gambar browser dari posting WordPress baru.

Memperbarui Posting dalam Kode

Buka file wordpress_api_helper.py dan tambahkan fungsi 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}')

Kemudian buka file app.py dan tambahkan kode untuk mengimpor update_post dan menu:

 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' }

Kemudian, tambahkan opsi menu keempat:

 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}")

Kemudian jalankan aplikasi dan coba opsi 4, berikan id posting, judul, dan konten untuk memperbarui posting yang ada.

Memperbarui posting WordPress.
Aplikasi Python menampilkan menu yang diperbarui.

Memilih opsi 2 dan meneruskan id posting yang diperbarui akan mengembalikan detail posting yang baru ditambahkan:

Mengembalikan detail postingan yang baru diperbarui.
Aplikasi Python menampilkan posting yang diperbarui.

Menghapus Posting dalam Kode

Anda dapat meneruskan id kiriman ke REST API untuk menghapus kiriman.

Buka file wordpress_api_helper.py dan tambahkan fungsi 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.')

Sekarang buka file app.py dan tambahkan kode untuk mengimpor delete_post dan menu:

 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', }

Kemudian, tambahkan opsi menu kelima:

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

Sekarang jalankan aplikasi dan coba opsi 5, berikan id untuk menghapus posting yang ada di WordPress:

Menghapus posting WordPress dengan aplikasi Python.
Aplikasi Python menunjukkan penghapusan posting yang dipilih.

Catatan: Postingan yang dihapus mungkin masih muncul jika Anda menjalankan opsi Daftar Postingan :

Postingan daftar aplikasi Python.
Aplikasi Python menampilkan daftar posting asli.

Untuk mengonfirmasi bahwa Anda telah menghapus postingan, tunggu beberapa detik dan coba lagi opsi Daftar Postingan . Dan itu saja!

Ringkasan

Berkat REST API WordPress dan pustaka klien HTTP Python, aplikasi Python dan WordPress dapat bekerja sama dan berbicara satu sama lain. Manfaat REST API adalah memungkinkan Anda untuk mengoperasikan WordPress dari jarak jauh dari aplikasi Python, di mana bahasa Python yang kuat memungkinkan pembuatan konten otomatis yang mengikuti struktur dan frekuensi yang Anda inginkan.

DevKinsta membuat pembuatan dan pengembangan situs WordPress lokal menjadi cepat dan mudah. Ini menyediakan lingkungan lokal untuk mengembangkan tema dan plugin WordPress dan menawarkan model penerapan yang disederhanakan berkat model instalasi mandiri berbasis Docker.

Apa pengalaman Anda bekerja dengan Python dan WordPress?

Saat siap untuk memperluas pengalaman itu, Anda dapat membaca Panduan Lengkap untuk Dasar-dasar API REST WordPress untuk menjelajahi kemungkinan lain.