WordPress REST APIを使用して記事を投稿する

今回はWordpressのREST APIを用いて記事を投稿する方法についてご説明します。
BitnamiのWordpressでは情報が少なくてハマりました。

ユーザー名とパスワードを使用する認証を使用しますのでセキュリティは脆弱です。
とはいえ、簡単にREST APIを試してみたい時などは楽な方法で試したいものです。
ということで、今回はJSON BASIC認証を使ってRESTで記事を投稿します。

手順概要

  • プラグインのインストール
  • WordPressのRESTClientでPOSTしてみる(←失敗します)
  • .htaccessの修正
  • WordPressのRESTClientで再度POSTしてみる
  • 投稿内容を確認してみる

詳細手順

プラグインのインストール

色々試した結果こちらに落ち着きました。

  • JSON Basic Authentication

たぶん僕のやり方が悪かったのでしょうが、以下のものではうまくいきませんでした。
何故だっ!!

  • Application Passwords plugin
  • WordPress REST API Authentication

JSON Basic Authenticationのインストール方法
GitHub - WP-API/Basic-Auth
からzipをダウンロードします。

wordpress-restapi-post1-01

プラグイン
→ 新規追加
→ プラグインのアップロード
→ ファイルの選択
→ Basic-Auth-master.zip

wordpress-restapi-post1-02

いますぐインストール

wordpress-restapi-post1-03

プラグインの有効化

wordpress-restapi-post1-04

名前が微妙に違うというね・・・

wordpress-restapi-post1-05

WordPressのRESTClientでPOSTしてみる

VSCodeの拡張機能:REST Clientをインストールしておきます。
参考 → GitHub API入門 – VSCode + REST Client

ファイル名:test.http
で、以下のコマンドを投げます。

username,password,yourdomainは
それぞれユーザー名、パスワード、ドメイン名を使用します。
ユーザー名、パスワードはWordpressにログインする際のものを使用します。

 curl  -X POST --user username:password -H "Content-Type: Application/json" \
 -d '{"title":"APIからの投稿","content":"内容のサンプル<br />サンプル","status":"publish"}' \
  http://yourdomain/wp-json/wp/v2/posts

僕のテスト環境での例:

 curl  -X POST --user user:EHfmvswUMZF5 -H "Content-Type: Application/json" \
 -d '{"title":"APIからの投稿","content":"内容のサンプル<br />サンプル","status":"publish"}' \
  http://52.71.251.115/wp-json/wp/v2/posts

失敗します。
どうも、.htaccessで弾かれるみたいです。
message:Sorry, you are not allowed to create posts as this user

wordpress-restapi-post1-08

httpd-app.conf (デフォルトでは.htaccessの修正)

デフォルトでは.htaccessは存在しません。
.htaccessが存在する人はたぶん僕と同じ末路です。
余計なことをしたクチですね。僕はドハマりしました。
ハマりの内容については別の記事に記載します。

sudo vi /opt/bitnami/apps/wordpress/conf/httpd-app.conf

以下を追記します。

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

Apacheをリスタートします。

sudo /opt/bitnami/ctlscript.sh restart apache

httpd-app.confの全体像

RewriteEngine On
RewriteRule /<none> / [L,R]

<IfDefine USE_PHP_FPM>
    <Proxy "unix:/opt/bitnami/php/var/run/wordpress.sock|fcgi://wordpress-fpm" timeout=300>
    </Proxy>
</IfDefine>

<Directory "/opt/bitnami/apps/wordpress/htdocs">
    Options +MultiViews +FollowSymLinks
    AllowOverride None
    <IfVersion < 2.3 >
        Order allow,deny
        Allow from all
    </IfVersion>
    <IfVersion >= 2.3>
        Require all granted
    </IfVersion>

    <IfModule php7_module>
            php_value memory_limit 512M
    </IfModule>

    <IfDefine USE_PHP_FPM>
       <FilesMatch \.php$>
         SetHandler "proxy:fcgi://wordpress-fpm"
       </FilesMatch>
    </IfDefine>

# ここを追記
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
# ↑ここを追記

    RewriteEngine On
    #RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [S=1]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]

    Include "/opt/bitnami/apps/wordpress/conf/banner.conf"
</Directory>

Include "/opt/bitnami/apps/wordpress/conf/htaccess.conf"

WordPressのRESTClientで再度POSTしてみる

 curl  -X POST --user user:EHfmvswUMZF5 -H "Content-Type: Application/json" \
 -d '{"title":"APIからの投稿","content":"内容のサンプル<br />サンプル","status":"publish"}' \
  http://52.71.251.115/wp-json/wp/v2/posts

失敗したときとは違う反応。

wordpress-restapi-post1-06

投稿内容を確認してみる

投稿されました。

wordpress-restapi-post1-07

まとめ

これで自分のPCからREST経由で記事を投稿することができます。
色々楽しみになってきました。
ブログ自動化への第一歩

おわり

参考
Wordpres.org - REST API Handbook

コメントを残す

メールアドレスが公開されることはありません。