今回、AIを使ってWordPressサイトに記事を自動投稿する作業を実際にやってみました。スムーズにいったわけではなく、2つのエラーにぶつかりながら解決していったので、そのプロセスをそのまま記録として残します。同じようにREST APIでの自動投稿に挑戦する人の参考になれば嬉しいです。

やろうとしたこと
WordPressの「REST API」という仕組みを使い、AIに記事の下書きを作ってもらい、そのままサイトに投稿する、という作業に挑戦しました。使用したサーバーはエックスサーバー(レンタルサーバー)です。
事前準備:アプリケーションパスワードの発行
WordPressの管理画面で「ユーザー」→「プロフィール」を開き、「アプリケーションパスワード」を発行しました。これはログインパスワードとは別に、外部プログラム専用に発行できる認証情報です。ここで発行された文字列を、後ほどAPI経由の認証に使います。
1回目の挑戦:403 Forbidden
発行したアプリケーションパスワードを使い、REST APIに接続を試みたところ、いきなり「403 Forbidden」というエラーが返ってきました。WordPress自体のエラーではなく、サーバー側でブロックされているような挙動でした。
原因
調べてみると、エックスサーバーには「国外IPアクセス制限」という機能があり、初期設定でREST API(/wp-json/)への国外からのアクセスがブロックされていることが分かりました。AIが接続する場所は海外のサーバー経由になるため、この制限に引っかかっていたのです。
対処
サーバーパネルの「WordPress」メニューにある「WordPressセキュリティ設定」を開き、「国外IPアクセス制限設定」タブから「REST API アクセス制限」を「OFF」に変更しました。
2回目の挑戦:401 Unauthorized
403エラーは解消しましたが、今度は「401 Unauthorized(rest_not_logged_in)」という別のエラーに変わりました。「現在ログインしていません」というメッセージで、認証情報自体が正しく渡っていないような状態でした。
原因
これはエックスサーバー特有の既知の現象で、認証情報を含む「Authorizationヘッダー」が、サーバーの設定上PHPまで届かないことが原因でした。パスワード自体は正しくても、そもそもサーバーが認証情報を受け取れていなかったのです。
対処
サーバーパネルの「.htaccess編集」を開き、WordPressの標準ルールより前に、以下の1行を追加しました。
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
この設定により、Authorizationヘッダーがきちんとサーバーに渡されるようになりました。
3回目:ついに成功
再度接続を試みたところ、「200 OK」が返り、認証に成功しました。ここまでで、記事のタイトル・本文・カテゴリー・アイキャッチ画像をまとめて送信し、無事に記事を公開することができました。
今回の作業で分かったこと
- REST APIのエラーは「WordPress自体の問題」と「サーバー側のセキュリティ設定の問題」の2種類があり、まず切り分けて考える必要がある
- エックスサーバーでは「国外IPアクセス制限」と「Authorizationヘッダーの受け渡し」という、2段階の壁が存在する
- 作業が終わったら、セキュリティのために国外IPアクセス制限は元に戻しておくのが望ましい
まとめ
REST APIを使った自動投稿は便利な反面、レンタルサーバーのセキュリティ設定によってはすぐには動かないことがあります。エラーメッセージを1つずつ確認しながら原因を切り分けていけば、着実に解決にたどり着けます。同じ壁にぶつかった人の参考になれば幸いです。

コメント