Uygulamanızı WordPress ile Bağlayarak Python Pirzolalarınızı Parlatın

Yayınlanan: 2022-10-18

WordPress, uygulama programlama arayüzü (API) sayesinde en çok kullanılan içerik yönetim sistemi (CMS) haline geldi. WordPress REST API, WordPress'in Python dahil olmak üzere çeşitli dillerde yazılmış diğer uygulamalarla "konuşmasını" sağlar.

Python, çeşitli kullanımları ve insan tarafından okunabilir bir sözdizimi ile genişletilebilir bir programlama dilidir ve bu da onu WordPress içeriğini uzaktan yönetmek için güçlü bir araç haline getirir.

Uygulamalarınız için bazı WordPress REST API kullanım durumları ve bunları desteklemek için Python'u nasıl kullanabileceğinizi aşağıda bulabilirsiniz:

  • Uygulamanızın ham verileri hızlı bir şekilde açıklamalarla biçimlendirilmiş gönderilere dönüştürmesini sağlamak için önceden tanımlanmış şablonları kullanın.
  • Django ve Python üzerinde, nesneye özel bir indirim veya satış olayı gerçekleştiğinde müşterilerinize sınırlı süreli teklifler görüntüleyen bir arka ofis uygulaması oluşturun.
  • WordPress sitenizin içinde çalıştırmak için Python komut dosyalarını entegre edin

Bu eğitim, WordPress REST API'si ile iletişim kuran ve bu API üzerinde işlemler yürüten basit bir Python konsol uygulaması oluşturmanıza yardımcı olacaktır. Tam proje kodu da mevcuttur.


WordPress'i Yükleme ve Yapılandırma

İlk olarak, geliştirme makinenize yerel olarak bir WordPress web sitesi kurup çalıştıralım. Bu, web barındırma için bir hesap oluşturmanız veya bir alan adı satın almanız gerekmediğinden, WordPress'e başlamak için harika bir yoldur.

WordPress'i yerel olarak kurmadan önce, Apache web sunucusu, yerel bir veritabanı ve WordPress'in yazıldığı PHP dili dahil olmak üzere bazı bileşenlerin bilgisayarınızda çalışması gerekir.

Neyse ki, tüm büyük işletim sistemlerinde kullanılabilen ücretsiz bir yerel WordPress geliştirme paketi olan DevKinsta'yı kullanabiliriz (bunu kullanmak için Kinsta müşterisi olmanız gerekmez).

DevKinsta, Windows, Mac ve Linux için kullanılabilir ve WordPress'i ve tüm bağımlılıklarını yerel makinenize yükler.

DevKinsta'yı kurmadan önce, Docker'ın yerel olarak çalışıyor olması gerekir, bu nedenle henüz yapmadıysanız Docker Engine'i indirin ve kurun.

Docker Desktop'ı kurduktan sonra, işletim sisteminize uyan paketi otomatik olarak indirebilirsiniz.

DevKinsta'nın indirme sayfası ekran görüntüsü.
DevKinsta kurulum sayfası.

DevKinsta yükleyicisini çalıştırdığınızda, Docker hemen başlatılmaya başlar:

DevKinsta'nın Docker başlangıç ​​ekranı.
DevKinsta, Docker'ı yerel olarak başlatır.

Ardından, Yeni Site Oluştur menüsünden Yeni WordPress sitesi'ni seçin:

DevKinsta'nın yeni WordPress sitesi oluşturma ekranı.
DevKinsta'nın Yeni Site Oluştur menüsü.

Artık DevKinsta yükleyicisi, WordPress yönetici hesabı için kimlik bilgilerini oluşturmanızı gerektiriyor:

DevKinsta'nın yeni WordPress site oluşturma ekranı.
Yeni WordPress site formunu görüntüleyen DevKinsta.

Yüklendikten sonra DevKinsta bağımsız bir uygulamadır. Artık hem WordPress sitesine ( Site Aç düğmesi aracılığıyla) hem de WordPress yönetici panosuna ( WP Yönetici düğmesi) erişebilirsiniz.

DevKinsta'nın WordPress site bilgi ekranı.
DevKinsta'nın Site bilgi paneli.

Ardından, web siteniz için SSL ve HTTPS'yi etkinleştirmeniz gerekir. Bu, bir SSL sertifikası aracılığıyla web sitenizin güvenliğini artırır.

DevKinsta'nın SSL ve HTTPS seçeneğini etkinleştirme.
DevKinsta'nın “SSL ve HTTPS” seçeneği.

Şimdi DevKinsta uygulamasına gidin ve Siteyi düğmesini tıklayın. Yeni bir tarayıcı sekmesi, WordPress sitenizin ana sayfasını gösterecektir:

Yerel WordPress sitenizin ana sayfası.
WordPress ana sayfası.

Bu, yazmaya başlayabileceğiniz WordPress blogunuz. Ancak Python'un WordPress REST API'sine erişmesini ve kullanmasını sağlamak için önce WordPress Admin'i yapılandırmamız gerekir.

Şimdi DevKinsta uygulamasındaki WP Yönetici düğmesini tıklayın, ardından WordPress Dashboard'a erişmek için kullanıcı ve şifrenizi girin:

WordPress yönetici kontrol paneli giriş ekranı.
Wordpress giriş formu.

Giriş yaptıktan sonra, WordPress Dashboard'u göreceksiniz:

WordPress yönetici ekranına hoş geldiniz.
WordPress Pano sayfası.

WordPress, standart yöntemi olarak çerez kimlik doğrulamasını kullanır. Ancak bunu REST API kullanarak kontrol etmek istiyorsanız, WordPress REST API'sine erişim sağlayan bir teknikle kimlik doğrulaması yapmalısınız.

Bunun için Uygulama Şifrelerini kullanacaksınız. Bunlar, WordPress'in oluşturduğu ve web sitenizi yönetme iznine sahip bir kullanıcı profiliyle ilişkilendirdiği 24 karakter uzunluğundaki dizelerdir.

Uygulama Parolalarını kullanmak için Gösterge Tablosunda Eklenti menüsünü tıklayın, ardından aynı ada sahip eklentiyi arayın. Ardından Uygulama Parolaları Eklentisini kurun ve etkinleştirin:

WordPress Uygulama Şifreleri eklentisini yükleme ve etkinleştirme.
WordPress için Uygulama Şifreleri eklentisi.

Uygulama şifrenizi oluşturmaya başlamak için Kullanıcılar menüsünü genişleterek ve Tüm Kullanıcılar 'ı tıklayarak başlayın:

Genişletilmiş Kullanıcılar WordPress menüsü.
Genişletilmiş Kullanıcılar menüsü.

Şimdi, yönetici kullanıcı adınızın altındaki Düzenle'yi tıklayın:

Kullanıcılar menüsü altındaki WordPress kullanıcınızın altındaki "Düzenle" düğmesini tıklayın.
WP-Admin WordPress arayüzü.

Kullanıcı Düzenle sayfasını aşağı kaydırın ve Uygulama Şifreleri bölümünü bulun. Burada, daha sonra Python uygulama isteklerinizin kimliğini doğrulamak ve REST API'sini kullanmak için kullanacağınız Uygulama Parolası için bir ad girin:

Uygulama Şifreleri eklenti panosu.
Uygulama Şifresi sayfası.

WordPress'in sizin için rastgele 24 karakterli bir şifre oluşturabilmesi için Yeni Uygulama Şifresi Ekle'yi tıklayın:

Uygulama Şifreleri eklentisi tarafından oluşturulan yeni şifre.
Yeni Uygulama Şifresi sayfası.

Ardından, bu şifreyi kopyalayın ve daha sonra kullanmak üzere güvenli bir yere kaydedin. Unutmayın, bu sayfayı kapattığınızda bu şifreyi geri alamayacaksınız.

Son olarak, kalıcı bağlantıları yapılandırmanız gerekir. WordPress, kalıcı bağlantılarınız ve arşivleriniz için özel bir URL yapısı oluşturmanıza olanak tanır. Bunu, örneğin “İlk WordPress Web Siteniz” başlıklı bir WordPress gönderisine https://web siteniz.local:port/ilk-wordpress-website/ sezgisel URL'sinden erişilebilecek şekilde değiştirelim. Bu yaklaşım, gelişmiş kullanılabilirlik ve estetik dahil olmak üzere çeşitli faydalar sağlar.

Kalıcı bağlantıları yapılandırmak için Ayarlar bölümünü genişletin ve Kalıcı Bağlantılar menüsünü tıklayın. Burada, Ortak Ayarları Gönderi adı olarak değiştirin:

WordPress kalıcı bağlantı ayarlarını değiştirme.

Kalıcı bağlantı yapısını Post name yapısını kullanarak ayarlamak da gereklidir çünkü bu, daha sonra Python kodumuzda JSON formatını kullanarak gönderileri almamıza izin verecektir. Aksi takdirde, bir JSON kod çözme hatası atılacaktır.

Python'dan WordPress Nasıl Kontrol Edilir

WordPress PHP ile yazılmıştır, ancak diğer programlama dillerinin, sitelerin ve uygulamaların içeriğini tüketmesini sağlayan bir REST API'sine sahiptir. WordPress içeriğinin REST mimarisinde gösterilmesi, onu JSON biçiminde kullanılabilir hale getirir. Bu nedenle, diğer hizmetler WordPress ile entegre olabilir ve yerel bir WordPress kurulumu gerektirmeden oluşturma, okuma, güncelleme ve silme (CRUD) işlemlerini gerçekleştirebilir.

Ardından, gönderi oluşturmak, almak, güncellemek ve silmek için WordPress REST API'sini nasıl kullanabileceğinizi görmek için basit bir Python uygulaması oluşturacaksınız.

Yeni basit Python projeniz için yeni bir dizin oluşturun ve buna PythonWordPress gibi bir ad verin:

 ../PythonWordPress

Şimdi, projeniz için bağımsız bir dizi Python paketini sürdürmesine, bunları sistem dizinlerinizden ayırmasına ve sürüm çakışmalarından kaçınmasına olanak tanıyan bir sanal ortam oluşturacaksınız. venv komutunu yürüterek sanal bir ortam oluşturun:

 python3 -m venv .venv

Şimdi, .venv sanal ortamını etkinleştirmek için bir komut çalıştırın. Bu komut işletim sistemine göre değişir:

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

Ardından, WordPress hesabınızla ilgili yapılandırmayı kaydedin. Uygulama yapılandırmasını Python kodunuzdan ayırmak için proje dizininizde bir .env dosyası oluşturun ve bu ortam değişkenlerini dosyaya ekleyin:

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

Neyse ki, yukarıdaki verileri bir Python uygulamasından okumak kolaydır. Uygulamanızın yapılandırmayı .env dosyasından okuyabilmesi için Python-dotenv paketini yükleyebilirsiniz:

 pip install python-dotenv

Ardından, Python için eşzamansız bir HTTP istemcisi/sunucusu olan aiohttp yükleyin:

 pip install aiohttp

Şimdi aşağıdaki kodla app.py adlı bir dosya ekleyin:

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

Yukarıdaki kod bir konsol menüsü görüntüler ve bir seçenek belirlemek için bir sayı girmenizi ister. Ardından, bu projeyi genişletecek ve tüm gönderileri listelemenizi ve gönderi kimliğini kullanarak belirli bir gönderiyi almanızı sağlayan kodu uygulayacaksınız.

Koddaki Gönderileri Alma

WordPress REST API ile etkileşim kurmak için yeni bir Python dosyası oluşturmalısınız. Aşağıdaki içeriğe sahip wordpress_api_helper.py adlı bir dosya oluşturun:

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

Yukarıdaki aiohttp kitaplığının kullanımına dikkat edin. Modern diller, eşzamansız programlamayı mümkün kılan sözdizimi ve araçlar sağlar. Bu, programın web istekleri, veritabanı işlemleri ve disk G/Ç gibi işlemlerin yanı sıra görevleri gerçekleştirmesine izin vererek uygulama yanıt hızını artırır. Python, asenkron programlama çerçevesi için bir temel olarak asyncio'yu sunar ve aiohttp kitaplığı, Python'da yapılan HTTP İstemci/Sunucu işlemlerine eşzamansız erişim sağlamak için asyncio'nun üzerine inşa edilmiştir.

Yukarıdaki ClientSession işlevi eşzamansız olarak çalışır ve programımızın /wp-json/wp/v2/posts uç noktasına karşı bir HTTP GET işlemi gerçekleştirmek için kullandığı bir session nesnesi döndürür. Tüm gönderileri alma isteği ile belirli bir istek arasındaki tek fark, bu son isteğin URL yolunda bir post id parametresi geçirmesidir: /wp-json/wp/v2/posts/{id} .

Şimdi app.py dosyasını açın ve import ifadesini ekleyin:

 from wordpress_api_helper import get_all_posts, get_post

Ardından, get_all_posts ve get_post işlevlerini çağırmak için main işlevi değiştirin:

 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)

Ardından uygulamayı çalıştırın:

 python app.py

Ardından uygulama menüsünü göreceksiniz:

WordPress'e bağlı Python uygulamasını başlatma.
Python uygulama menüsü.

Şimdi Python uygulamanızın aldığı gönderilerin listesini görüntülemek için 1. seçeneği ve bir gönderi seçmek için 2. seçeneği deneyin:

Python uygulamanızın aldığı gönderilerin listesini görüntülemek için 1. seçeneği ve bir gönderi seçmek için 2. seçeneği deneyin.
Gönderiler listesini ve kullanıcı tarafından seçilen tek bir gönderiyi gösteren Python uygulaması.

Kodda Gönderiler Oluşturma

Python'da bir WordPress gönderisi oluşturmak için wordpress_api_helper.py dosyasını açarak başlayın ve create_post işlevini ekleyin:

Kesinti süresi ve WordPress sorunlarıyla mı mücadele ediyorsunuz? Kinsta size zaman kazandırmak için tasarlanmış barındırma çözümüdür! Özelliklerimize göz atın
 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}')

Bu kod, session nesnesindeki post işlevini çağırır ve auth parametresini REST API bitiş noktası URL'sinin yanına iletir. auth nesnesi artık WordPress kullanıcısını ve Uygulama Parolalarını kullanarak oluşturduğunuz parolayı içerir. Şimdi app.py dosyasını açın ve create_post ve menüyü içe aktarmak için kod ekleyin:

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

Ardından üçüncü bir menü seçeneği ekleyin:

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

Ardından, uygulamayı çalıştırın ve WordPress'te yeni bir gönderi oluşturmak için bir başlık ve içerik ileterek 3. seçeneği deneyin:

Python ile bir WordPress gönderisi oluşturma.
Yeni oluşturulan WordPress gönderisini görüntüleyen Python uygulaması.

Seçenek 1'in tekrar seçilmesi, yeni eklenen gönderinin kimliğini ve başlığını döndürür:

Yeni eklenen gönderinin kimliğini ve başlığını döndürme.
Python uygulaması, yeni gönderinin başlığını ve kimliğini döndürüyor.

Yeni gönderiyi görüntülemek için WordPress web sitenizi de açabilirsiniz:

Tarayıcıda yeni oluşturulan gönderi.
Yeni WordPress gönderisinin tarayıcı görüntüsü.

Koddaki Gönderileri Güncelleme

wordpress_api_helper.py dosyasını açın ve update_post işlevini ekleyin:

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

Ardından app.py dosyasını açın ve update_post ve menüyü içe aktarmak için kod ekleyin:

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

Ardından dördüncü bir menü seçeneği ekleyin:

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

Ardından uygulamayı çalıştırın ve mevcut bir gönderiyi güncellemek için bir gönderi kimliği, başlık ve içerik ileterek 4. seçeneği deneyin.

Bir WordPress gönderisini güncelleme.
Güncellenmiş menüyü gösteren Python uygulaması.

2. seçeneği seçmek ve güncellenmiş gönderi kimliğini geçmek, yeni eklenen gönderinin ayrıntılarını döndürür:

Yeni güncellenen gönderinin ayrıntılarını döndürme.
Güncellenmiş gönderiyi gösteren Python uygulaması.

Koddaki Mesajları Silme

Bir gönderiyi silmek için gönderi kimliğini REST API'sine iletebilirsiniz.

wordpress_api_helper.py dosyasını açın ve delete_post işlevini ekleyin:

 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.')

Şimdi app.py dosyasını açın ve delete_post ve menüyü içe aktarmak için kod ekleyin:

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

Ardından beşinci bir menü seçeneği ekleyin:

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

Şimdi uygulamayı çalıştırın ve WordPress'teki mevcut gönderiyi silmek için bir kimlik ileterek 5. seçeneği deneyin:

Python uygulamasıyla bir WordPress gönderisini silme.
Seçilen gönderinin silinmesini gösteren Python uygulaması.

Not: Gönderileri Listele seçeneğini çalıştırırsanız, silinen gönderi yine de görünebilir:

Python uygulaması listeleme gönderileri.
Orijinal gönderi listesini gösteren Python uygulaması.

Gönderiyi sildiğinizi onaylamak için birkaç saniye bekleyin ve Gönderileri Listele seçeneğini tekrar deneyin. Ve bu kadar!

Özet

WordPress REST API ve Python'un HTTP istemci kitaplıkları sayesinde Python uygulamaları ve WordPress ekip oluşturup birbirleriyle konuşabilir. REST API'nin avantajı, WordPress'i bir Python uygulamasından uzaktan çalıştırmanıza izin vermesidir; burada Python'un güçlü dili, istediğiniz yapıyı ve sıklığı takip eden otomatik içerik oluşturmaya olanak tanır.

DevKinsta, yerel bir WordPress sitesi oluşturmayı ve geliştirmeyi hızlı ve kolay hale getirir. WordPress temaları ve eklentileri geliştirmek için yerel bir ortam sağlar ve Docker tabanlı, bağımsız kurulum modeli sayesinde basitleştirilmiş bir dağıtım modeli sunar.

Python ve WordPress ile çalışma deneyiminiz nedir?

Bu deneyimi genişletmeye hazır olduğunuzda, diğer olasılıkları keşfetmek için The Complete Guide to WordPress REST API Basics'i okuyabilirsiniz.