WordPressへ、予約投稿記事を自動投稿する

予約投稿記事を自動投稿したい

自動投稿ができるようになってくると、予約投稿も自動投稿したくなりますよね。やってみました。

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'])