自動投稿してみる
WordPress をいじっていると、やはり自動投稿って試してみたくなりますよね。ということで、Python を使って自動投稿をしてみます。
自動投稿の準備
自動投稿について書かれているサイトを見ると、「WP REST API プラグインを入れる」とか「Application Passwords プラグインを入れる」とか、書かれていますが、全部、不要でした。この記事を書いている時点の私の WordPress のバージョンは 5.7.2 です。ということで、準備は何もいりませんでした。
自動投稿時のパスワード
Python から自動投稿するときに、ユーザー名とパスワードは必要です。そこで、パスワードを発行してみたいと思います。
WordPress 左側にある [ユーザー]-[ユーザー一覧] から、自動投稿に使うユーザーを選択し、[編集]を押します。

そして、下の方に「アプリケーションパスワード」という欄があります。ここでパスワードを発行します。
「新しいアプリケーションパスワード名」の欄に「Pythonから自動投稿用」とか適当に入れます。何用のパスワードを発行するか?ってことです。その後、「新しいアプリケーションパスワードを追加」ボタンを押すと、下にパスワードが表示されます。このパスワードは二度と表示されることがなさそうなので、スクショしておくといいと思います。

自動投稿する
では、自動投稿のコードを書いていきます。
自動投稿の全体の参考として、下記サイトを見ました。
WordPress REST API With Python
サーバーに記事を送るのは、Pythonのrequestsを使います。下記サイトのpost部分を参考にしました。
Requests クイックスタート
ユーザー認証は、下記サイトを参考にしました。
Basic Authentication
Create Postのときのパラメータの意味は、下記サイトを参考にしました。
REST API Handbook
実装したコードがこちらです。
import requests
from urllib.parse import urljoin
from datetime import datetime
def wp_post():
url_base = 'https://kamiki.blog/'
url = urljoin(url_base, 'wp-json/wp/v2/posts/')
user = '****' # ユーザー名
password = 'AIGV W6AI 9PSX F8pI POXc M3qA'
content = 'これは自動投稿テストです。下記記事参照。<br>[kanren id="394"]'
post = {
'title': 'WordPress自動投稿テスト',
'status': 'publish', # draft(下書き), publish(公開)
'slug': 'wordpress-auto-post-test', # パーマリンク
'categories': 5, # カテゴリID
'date': datetime.now().isoformat(),
'content': content,
}
res = requests.post(
url,
json=post,
auth=(user, password),
)
return
if __name__ == '__main__':
wp_post()
自動投稿された記事は、こちらです。

気になること
このコードを、そのままもう一度実行すると、どうなるのでしょう?やってみると、post_idが異なる記事がもう一つ投稿されていました。
しかし、自動投稿した2つの記事の両方のパーマリンクに"-2"という文字列が最後に追加されていました。
さらに、後から自動投稿した記事をゴミ箱へ捨てると、先に自動投稿した記事のパーマリンクは元に戻っていました。
これはバグなのか、パラメータが足りていないのかは、まだわかっておりません。なので、同じslug名で自動投稿を繰り返さない方が良さそうです。
カテゴリIDを複数指定する
カテゴリID、タグID は複数指定することができます。'categories': '5, 8' のように指定します。
import requests
from urllib.parse import urljoin
from datetime import datetime
def wp_post():
url_base = 'https://kamiki.blog/'
url = urljoin(url_base, 'wp-json/wp/v2/posts/')
user = 'xxx'
password = 'xxx'
post = {
'title': 'WordPress自動投稿テスト2',
'status': 'draft', # draft(下書き), publish(公開)
'slug': 'wordpress-auto-post-test2', # パーマリンク
'categories': '5, 8', # カテゴリID
'date': datetime.now().isoformat(),
'content': 'test2',
}
res = requests.post(
url,
json=post,
auth=(user, password),
)
print(res)
return
if __name__ == '__main__':
wp_post()
"投稿一覧" を見ると、カテゴリID を複数指定できていることが確認できます。
