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

投稿済み記事のタイトルを変更する

Python と WP REST API を使って、すでに投稿済みの記事を取得し、タイトルを変更し、再投稿してみたいと思います。

変更する記事はこれで、タイトルに "Before" という文字列が入っているので、これを "After" にして、再投稿してみます。

変更対象の記事の自動取得

まずは、GET API を使い、変更する記事を取得します。これは以前お伝えした方法を応用して、実装します。

すでにWordPressへアップロードした画像を調べる

Handbook の "List Posts" のところも参考にしながら、実装します。
REST API Handbook List Posts

実装コードの前半部分です。これで、 検索文字列 を使って、変更対象の記事を取得します。

Python code

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" の欄を参考にして、実装します。
REST API Handbook Update a Post

すでに投稿済み記事を更新する場合は、POST するときの URL に記事 ID を加えると書かれています。 https://example.com/wp-json/wp/v2/posts/<id> という感じです。

実装コードの後半部分です。タイトルの BeforeAfter に変更して、更新します。

Python code

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)

結果

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