今回の記事は、PythonでWordPressに投稿済みの記事に手を加えるコードを説明します。
やることは「Pythonで投稿済みの記事を取得し、タイトルを変更し再投稿する」です。
変更する記事は以下で、タイトルに “Before” という文字列が入っているので、これを “After” にして再投稿します。

処理フローは以下です。
- 検索文字列を使って、変更対象記事を自動取得する。
- タイトルを変更する。(文字列BeforeをAfterに変更する。)
- 変更した記事を再投稿し、記事を更新する。
変更する記事を自動取得する
ますは、API を使って変更する記事を取得します。
これは以前お伝えした方法を応用して実装します。
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)
上記コードを実行すると、以下のように変更できています。


