WordPressをいじっていると、自動投稿って試してみたくなりますよね。
この記事では、Pythonを使った記事の自動投稿をお伝えします。
自動投稿の準備
プラグインは不要
プラグインは必要ありません。
自動投稿について書かれているサイトを見ると、「WP REST API プラグインを入れる」とか「Application Passwords プラグインを入れる」とか書かれていますが全部不要でした。
この記事を書いている時点の私のWordPressのバージョンは5.7.2です。
自動投稿用のパスワードの発行
Pythonで自動投稿するときにユーザー名とパスワードは必要です。
そこで、パスワードを発行してみたいと思います。
WordPress左側Menuにある ユーザー => ユーザー一覧 から、自動投稿に使うユーザーを選択し編集を押します。
下の方に「アプリケーションパスワード」という欄があります。
ここでパスワードを発行します。
「新しいアプリケーションパスワード名」の欄に「Pythonから自動投稿用」とか適当な名前を入れます。
何用のパスワードを発行するか?ってことです。
その後、「新しいアプリケーションパスワードを追加」ボタンを押すと、下にパスワードが表示されます。
このパスワードは二度と表示されることがなさそうなので、スクショしておくといいと思います。
記事を自動投稿する
自動投稿のサンプルコード
実装したコードがこちらです。(※サンプルコードが見づらかったので、一部省略しました。)
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 = 'これは自動投稿テストです。下記記事参照。※ここ一部省略しました。' 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()
自動投稿の全体の参考として、下記サイトを見ました。
WordPress REST API With Python
サーバーに記事を送るのは、Pythonのrequestsを使います。下記サイトのpost部分を参考にしました。
Requests クイックスタート
ユーザー認証は、下記サイトを参考にしました。
Basic Authentication
Create Postのときのパラメータの意味は、下記サイトを参考にしました。
REST API Handbook
自動投稿された記事はこちらになります。
WordPress自動投稿テストちょっとした疑問
このコードを、そのままもう一度実行すると、どうなるのでしょう?
パーマリンクとか同じページができてしまうのでしょうか?
やってみると、post_idが異なる記事がもう一つ投稿されていました。
自動投稿した2つの記事の両方のパーマリンクに”-2″という文字列が最後に追加されていました。
さらに、後から自動投稿した記事をゴミ箱へ捨てると、先に自動投稿した記事のパーマリンクは元に戻っていました。
これはバグなのか、パラメータが足りていないのかは、まだわかっておりません。
なので、同じslug名で自動投稿を繰り返さない方が良さそうです。
記事のカテゴリーID・タグIDを複数指定する
カテゴリーID、タグID は複数指定することができます。
カテゴリーIDにを複数指定する場合は ‘categories’: ‘5, 8’のように指定します。
カンマのあとにスペースは要りません。
タグIDの場合は‘tags’: ‘1,2’のように指定します。
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()
上記プログラムを実行後にWordPressの投稿一覧を見ると、カテゴリーID を複数指定できていることが確認できます。