今回は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をダウンロードします。
プラグイン
→ 新規追加
→ プラグインのアップロード
→ ファイルの選択
→ Basic-Auth-master.zip
いますぐインストール
プラグインの有効化
名前が微妙に違うというね・・・
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
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
失敗したときとは違う反応。
投稿内容を確認してみる
投稿されました。
まとめ
これで自分のPCからREST経由で記事を投稿することができます。
色々楽しみになってきました。
ブログ自動化への第一歩
おわり
コメントを残す