【Mac/ロリポップ対応】Antigravity×PythonでWordPress REST APIからブログ記事を自動下書き投稿する方法(ハマりどころと解決策まとめ)

Mac × WordPress REST API 自動投稿ガイドの文字入りアイキャッチ画像

AIエージェント「Antigravity」やPythonを使って、ブログ記事の作成から下書き保存までを「完全自動化」したいと思ったことはありませんか?

WordPressには標準で WordPress REST API (/wp-json/wp/v2/) が備わっており、これを利用すれば外部スクリプトから記事の作成・更新・画像アップロードまで自由自在に操作できます!

ですが…レンタルサーバーのロリポップ(Lolipop)や特定のセキュリティ設定環境だと、「HTTP 401エラーで認証が弾かれる」「投稿したはずなのに既存記事一覧が返ってくる」といった地味に深い罠にハマりがちです。

そこで今回は、私が実際に遭遇した初期接続のハマりどころとその解決策から、Pythonスクリプトを使った自動下書き投稿の具体的な手順まで、余すところなく徹底解説します!

難解なエラーの悩みとは今日でおさらばして、快適な自動投稿環境を手に入れましょう!


目次

スポンサーリンク

1. WordPress REST API の導入・確認方法

「REST API を使うには専用のプラグインをインストールする必要があるの?」と思う方もいるかもしれませんが、結論から言うと 特別なインストールの作業は不要 です!

💡 WordPress 4.7以降なら標準搭載!

WordPress 4.7(2016年リリース)以降のバージョンをお使いの場合、WordPress 本体(コア)に REST API 機能が標準で組み込まれています。そのため、新規にプラグインを追加することなく、初期状態のまますぐに利用可能です。

※万が一、非常に古い WordPress(4.7未満)をご利用の場合は、プラグイン新規追加から「WP REST API」を検索してインストールする必要がありますが、現在の最新WordPressであれば標準で動作します。

🔍 REST API が有効になっているか確認する方法

ご自身のブログで REST API が正常に動作しているかは、ブラウザから簡単に確認できます。

  1. ブラウザのアドレスバーに https://あなたのドメイン/wp-json/(例: https://scombu.com/wp-json/)と入力してアクセスします。
  2. 画面にズラリと英数字のコード(JSONデータ)が表示されれば、REST API が正常に稼働しています!

⚠️ 【重要】パーマリンク設定の注意点

WordPressの 「設定 > パーマリンク」 が「基本」(https://example.com/?p=123)になっていると、/wp-json/ のURL構造が正しく認識されずエラーになる場合があります。
REST API を利用する際は、パーマリンク設定を 「投稿名」「数字ベース」 など、「基本」以外の構造に変更しておきましょう!


2. 事前準備:アプリケーションパスワードを発行しよう

WordPress 5.6以降には、安全にREST API認証を行うための「アプリケーションパスワード」機能が標準搭載されています。

まずは管理画面からサクッと発行してみましょう!

発行手順

  1. WordPress管理画面 (/wp-admin) にログインします。
  2. 左メニューの 「ユーザー」 > 「プロフィール」 を開きます。
  3. ページ下部にある 「アプリケーションパスワード」 欄で、わかりやすい名前(例: mac-cli)を入力し、「新しいアプリケーションパスワードを追加」をクリック!
  4. 画面に表示された16桁の英数字(例: xxxx xxxx xxxx xxxx)をコピーして保存します。

3. ローカルPC(Mac)でのPython環境構築と設定

WordPressサーバー側の準備が整ったら、次はお手元のMac(ローカルパソコン)側でPythonの自動投稿環境を構築します!

手順はとてもシンプルです。

Step 1. プロジェクトフォルダの作成と仮想環境 (.venv) の作成

システム環境を汚さないよう、Pythonの仮想環境を作って有効化します。

# 作業用フォルダを作成して移動
mkdir antigravity_scombu_rest
cd antigravity_scombu_rest

# 仮想環境 (.venv) を作成
python3 -m venv .venv

# 仮想環境を有効化
source .venv/bin/activate

Step 2. 必要なライブラリのインストール

HTTP通信を行う requests と、環境変数を安全に読み込む python-dotenv をインストールします。

pip install requests python-dotenv

Step 3. 認証設定ファイル (.env) の作成

パスワードなどの重要情報をプログラム内に直接書かないよう、.env ファイルを作成して安全に保持します。

# .env ファイルを作成
nano .env

.env の中にご自身のサイト情報を記述して保存します:

WP_URL=https://scombu.com
WP_USER=あなたのユーザー名
WP_APP_PASS=xxxx xxxx xxxx xxxx

⚠️ 【超重要】WP_URL は必ず https:// で指定!

http:// にしてしまうと、サーバーのリダイレクト(301)によって POST リクエストが GET リクエストに自動ダウングレードされ、投稿エラーの原因になります!必ず https:// で統一してください。


4. ロリポップ+CGI環境でハマった3つの大きな罠と解決策

ここが一番の山場です!ロリポップ環境で外部からREST APIを叩く場合、以下の3つのトラップに注意する必要があります。

ロリポップ REST API トラブルシューティング概念図

罠①:ロリポップ(CGIモード)で Authorization 認証ヘッダーが消去される

ロリポップなどのCGI/FastCGI環境では、セキュリティ仕様によって外部からの Authorization(認証)ヘッダーがPHPまで届かずに消去されてしまいます。

【解決策1】 .htaccess の先頭に1行追記する

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*)$ - [E=HTTP_AUTHORIZATION:%1]
</IfModule>

【解決策2】 SWELL子テーマ等の functions.php に認証復元フックを追加する

ヘッダーが完全に消されてしまう場合に備え、functions.php の一番下に以下のコードを追記しておくと安心です!

/**
 * ロリポップ REST API 認証・書き込み権限 復元フック
 */
add_filter('determine_current_user', function($user_id) {
    if ($user_id) return $user_id;

    if (isset($_SERVER['HTTP_X_HTTP_AUTHORIZATION'])) {
        $auth = $_SERVER['HTTP_X_HTTP_AUTHORIZATION'];
        if (strpos($auth, 'Basic ') === 0) {
            $credentials = base64_decode(substr($auth, 6));
            if (strpos($credentials, ':') !== false) {
                list($user, $pass) = explode(':', $credentials, 2);
                $user_obj = wp_authenticate_application_password(null, $user, $pass);
                if ($user_obj && !is_wp_error($user_obj)) {
                    return $user_obj->ID;
                }
            }
        }
    }
    return $user_id;
}, 20);

罠②: http:// アクセスによる 301 リダイレクトで POST が GET に化ける

URL設定で https://scombu.com のように http を指定していると、サーバー側で https への301リダイレクトが発生します。
Pythonの requests ライブラリの仕様上、301リダイレクト時に書き込み(POST)が読み取り(GET)へ自動的にダウングレードされてしまい、新規投稿ではなく既存記事一覧が返ってきてしまいます。

【解決策】

  • .env などの設定URLは必ず https:// で統一する!
  • APIエンドポイントの末尾には必ずスラッシュ / を付与する (/wp-json/wp/v2/posts/)。

罠③: SiteGuard WP Plugin や サーバーWAFによるブロックと「設定を元に戻す」重要性

切り分けの初期段階で、セキュリティプラグイン(SiteGuard WP Plugin の REST API保護)やレンタルサーバーの WAF(Web Application Firewall) を一時的に無効化してテストすることがあります。

ですが、ここで非常に重要なポイントがあります!

💡 【最重要】切り分けが終わったらセキュリティ設定を必ず「有効」に戻そう!

原因を調べた結果、エラーの理由が WAF やプラグイン制限ではなく「CGIヘッダー削除」や「http→https リダイレクト」にあったと判明した場合は、検証後に必ず WAF やセキュリティ設定を「有効(元の状態)」に戻してください!

WAF を無効化したまま放置してしまうと、SQLインジェクションやクロスサイトスクリプティング(XSS)といった外部からの悪意ある攻撃に対してブログが無防備になってしまいます。

🔒 万が一 WAF を有効に戻して弾かれた場合の対処法

WAF を「有効」に戻した後、万が一特定のコード投稿時に WAF にブロックされたとしても、サイト全体で WAF をオフにする必要はありません

  1. ロリポップの管理画面 (セキュリティ > WAF設定) で WAFログ参照 を開きます。
  2. ブロックされたリクエストの 「シグネチャ(検出ID)」 を確認します。
  3. .htaccessSiteGuard_User_ExcludeSig <シグネチャID> などのように該当するシグネチャのみを除外設定します。

この方法をとることで、サイト全体の強固なセキュリティ(WAFガード)は保持したまま、自分が送信する REST API 通信だけを安全に許可することができます!


5. Pythonスクリプト&CLIツールの使い方

通信トラブルさえクリアできれば、あとはコマンド一発で快適に下書き投稿が可能です!

接続テスト

python cli.py check
# 👉 ✅ 認証成功! と表示されれば準備完了!

コマンドから「下書き」記事を作成する

安全のため、まずは status=draft(下書き)で投稿してみましょう。

python cli.py create --title "自動生成記事のテスト" --content "<p>ここが本文です。</p>" --status draft

画像・代替テキスト(alt)・カテゴリーも指定して投稿する

python cli.py upload-image ./eyecatch.jpg \
  --title "アイキャッチ" \
  --alt "WordPress REST APIとMacのイメージ" \
  --caption "自動投稿イメージ" \
  --description "REST APIのアイキャッチ画像です。"

6. まとめ

一見難しそうに見えるロリポップ環境での REST API 連携ですが、ポイントを押さえれば簡単に自動化環境が手に入ります!

  • WordPress 4.7以降なら REST API は標準搭載(追加インストール不要)
  • アプリケーションパスワード で安全に認証
  • ローカルPC(Mac)側で .venv と .env を安全にセットアップ
  • .htaccess と functions.php でロリポップの認証ヘッダー消去をバイパス
  • https:// と末尾スラッシュ / でリダイレクトによるPOST→GET化を防ぐ
  • 切り分けで無効化した WAF などのセキュリティ設定は検証後に必ず「有効」に戻す
  • 自作スクリプトで 「下書き(draft)」保存&画像・カテゴリーの自動セット

MacとPython、Antigravityを組み合わせれば、ブログ運用の手間を大幅に削減できますよ!
ぜひ皆さんも自動化に挑戦してみてくださいね!

スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

スポンサーリンク

コメント

コメントする

目次