WordPressでREST APIを利用して自動投稿を行う

IT

XSERVER上のブログ(WordPress)に自動で投稿を行うアプリケーションを作りたくてREST APIの使い方を調べた。

ApacheでAuthorizationヘッダを通過させる

API呼び出しの際にはHTTPヘッダで認証情報を渡す必要があるが、標準の設定ではWordPressに届く前にApacheで揉み消されてしまうので、Apacheの設定を変更する。

~/{DOMAIN}/public_html/.htaccess

RewriteEngine On

よりも後に、以下のような行を追加する。

RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]

アプリケーション用パスワードを生成する

APIを利用するアプリケーション専用のパスワードを生成する。WordPressの管理画面で自分のアカウントのプロフィール(https://{ドメイン}/wp-admin/profile.php)を開き、「Application Passwords」のテキストボックスに適当な文字列(例としてMyApp)を入れて「Add New」ボタンを押す。以下のようなメッセージが表示される。

Your new password for MyApp is: XXXX XXXX XXXX XXXX XXXX XXXX

「XXXX…」の部分がパスワードなのでコピーして手元に待避する。スペースが含まれたままで問題ない。

※ここで生成されたパスワードは使い捨てタイプで、二度と確認することはできない。パスワードが不要になった時や、忘れてしまった時や、漏洩してしまったかもしれない時は「Revoke」ボタンを押して無効化し、また新しいものを生成する。

リクエストを送信してみる

私の場合はPostmanで試した。
■リクエスト先
POSTで
https://{DOMAIN}/wp-json/wp/v2/posts
または
https://{DOMAIN}/wp-json/wp/v2/posts/{POST ID}
■Authorization
・TYPE: Basic Auth
・Username: WordPress上でのユーザ名
・Password: さっき生成したパスワード
■Body
・「raw」で「JSON」を選択し、データとして以下をセット

{
  "title":"APIからの投稿",
  "content":"<h2>サンプル</h2>サンプルだよーん。",
  "status":"draft"
}

※statusの「draft」は下書きで、「publish」にすると公開。その他は以下。

Posts | REST API Handbook | WordPress Developer Resources
Schema The schema defines all the fields that exist within a post record. Any response from these endpoints can be expected to contain the…

うまくいけば、200 OKが返ってくるはず。

トラブル例

生成したパスワードを使わないと、以下のようなエラーが返った。

{
    "code": "rest_cannot_edit",
    "message": "この投稿を編集する権限がありません。",
    "data": {
        "status": 401
    }
}

リクエストがJSONであること(Content-Type: application/json)を指定しないと、以下のようなエラーが返った。

{
    "code": "empty_content",
    "message": "本文、タイトル、抜粋が空欄です。",
    "data": {
        "status": 400
    }
}

以上

コメント