WordPressへ自動投稿ができるようになってくると、予約投稿も自動投稿したくなります。
Handbook の Posts の章を参考に実装します。
予約投稿記事を自動投稿する
“status” を “future” にして、“date” に予約投稿日時を入れます。
import requests from urllib.parse import urljoin from datetime import datetime def wp_auto_post_at_fixed_time(): url_base = 'https://kamiki.blog/' url = urljoin(url_base, 'wp-json/wp/v2/posts/') user = 'xxx' # ユーザー名 password = 'xxx' # アプリケーションパスワードで発行したパスワード # 予約投稿日時を決める date_post = datetime(year=2021, month=5, day=23, hour=20, minute=30, second=0, microsecond=0, tzinfo=None) payload = { 'title': '予約投稿記事の自動投稿テスト', 'status': 'future', 'slug': 'wordpress-auto-post-fixed-time-test', # パーマリンク 'categories': 5, # カテゴリID 'date': date_post, 'content': 'テスト', } res = requests.post( url, data=payload, auth=(user, password), ) print(res) return if __name__ == '__main__': wp_auto_post_at_fixed_time()
上記コードを実行してから投稿一覧を見ると、自動投稿した予約投稿記事を確認できます。
予約投稿をGETするにはパスワードが必要
以前、GET API にはアプリケーションパスワードは不要と書きましたが、予約投稿を GET するにはパスワードが必要になります。
“status” に複数のパラメータを含めるときには、‘publish, future’ のように指定します。
[‘publish’, ‘future’] ではありません。
import requests from urllib.parse import urljoin import json def wp_get_posts_list(): url_base = 'https://kamiki.blog/' url = urljoin(url_base, 'wp-json/wp/v2/posts/') user = 'xxx' # ユーザー名 password = 'xxx' # アプリケーションパスワードで発行したパスワード params = { 'status': 'publish, future', } res = requests.get( url, params=params, auth=(user, password), ) print(res) data_list = res.json() return data_list if __name__ == '__main__': data_list = wp_get_posts_list() for data in data_list: print(data['title']['rendered'])