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」にすると公開。その他は以下。
うまくいけば、200 OKが返ってくるはず。
トラブル例
生成したパスワードを使わないと、以下のようなエラーが返った。
{
"code": "rest_cannot_edit",
"message": "この投稿を編集する権限がありません。",
"data": {
"status": 401
}
}
リクエストがJSONであること(Content-Type: application/json)を指定しないと、以下のようなエラーが返った。
{
"code": "empty_content",
"message": "本文、タイトル、抜粋が空欄です。",
"data": {
"status": 400
}
}
以上