今回の記事は、PythonでWordPressに投稿済みの記事に手を加えるコードを説明します。
やることは「Pythonで投稿済みの記事を取得し、タイトルを変更し再投稿する」です。
変更する記事は以下で、タイトルに “Before” という文字列が入っているので、これを “After” にして再投稿します。
処理フローは以下です。
- 検索文字列を使って、変更対象記事を自動取得する。
- タイトルを変更する。(文字列BeforeをAfterに変更する。)
- 変更した記事を再投稿し、記事を更新する。
変更する記事を自動取得する
ますは、API を使って変更する記事を取得します。
これは以前お伝えした方法を応用して実装します。
PythonでWordPressのメディアライブラリにある画像を調べるHandbook の “List Posts” のところも参考にしながら実装します。
実装コードの前半部分です。検索文字列(search_word変数)を使って、変更対象の記事を取得します。
import requests from urllib.parse import urljoin def wp_get_posts_search(search_word): url_base = 'https://kamiki.blog/' url = urljoin(url_base, 'wp-json/wp/v2/posts/') user = 'xxx' # ユーザー名 password = 'xxx' # アプリケーションパスワードで発行したパスワード params = { 'status': 'private, publish, draft', 'search': search_word, } res = requests.get( url, params=params, auth=(user, password), ) print(res) data_list = res.json() return data_list
タイトルを変更して、記事を更新する
REST API Handbook の “Update a Post” の章を参考にして、実装します。
すでに投稿済み記事を更新する場合は、POST するときの URL に記事 ID を加えると書かれています。 https://example.com/wp-json/wp/v2/posts/<id> という感じです。
実装コードの後半部分です。タイトルの Before を After に変更して、更新します。
def wp_update_post(unique_id, changed_title): url_base = 'https://kamiki.blog/' url = urljoin(url_base, 'wp-json/wp/v2/posts/' + str(unique_id)) user = 'xxx' # ユーザー名 password = 'xxx' # アプリケーションパスワードで発行したパスワード params = { 'title': changed_title, } res = requests.post( url, params=params, auth=(user, password), ) print(res) return if __name__ == '__main__': search_word = '[Before]' data_list = wp_get_posts_search(search_word) if len(data_list) == 1: unique_id = data_list[0]['id'] original_title = data_list[0]['title']['rendered'] # タイトルを変更する changed_title = original_title.replace('Before', 'After') wp_update_post(unique_id, changed_title)
上記コードを実行すると、以下のように変更できています。