PythonでWordPressに投稿された記事の更新をする

今回の記事は、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)

上記コードを実行すると、以下のように変更できています。