予約投稿記事を自動投稿したい
自動投稿ができるようになってくると、予約投稿も自動投稿したくなりますよね。やってみました。
Handbook の Posts の章を参考に実装します。
REST API Handbook Posts
実装
"status" を "future" にして、"date" に予約投稿日時を入れます。
wp_auto_post.py
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'] ではありません。
wp_get_posts.py
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'])