WordPress REST APIで下書き投稿する方法|Pythonの実装例とMCPとの違い

過去のPython REST API投稿方式と現在のChatGPT MCP方式の比較図 AIツール・使い方
実際の運用方式に基づく比較図。操作画面のスクリーンショットではありません。

ミロクAIで最初に記事投稿を自動化したのは、2026年5月のことです。PythonでWordPress REST APIを呼び出し、Markdownの原稿から下書き投稿する仕組みを作りました。その後2026年10月には、ChatGPTとWordPress MCPを使って直接記事を編集・公開する運用に変更しています。

この記事では、最初に採用したREST API方式のしくみを、認証情報を公開しないPythonの再現用サンプルで説明します。記事後半では、現在使っているMCP方式との違いも整理します。

Python REST APIとChatGPT MCP方式を並べた比較図
WordPress運用の比較図。実際の操作画面キャプチャではありません。

WordPress REST APIで投稿できること

WordPressには、記事・固定ページ・メディアなどのデータをHTTPリクエストで操作するREST APIが用意されています。記事を作成する基本的なエンドポイントはPOST /wp-json/wp/v2/postsです。適切な認証情報と権限があれば、タイトル、本文、ステータスなどを送信できます。

ここで大事なのは、最初の投稿をpublishではなくdraftにすることです。誤った内容を一般公開するリスクを減らせます。

事前に必要なもの

  • HTTPSで利用できるWordPressサイトと投稿権限のあるユーザー
  • WordPressのユーザープロフィールから発行したアプリケーションパスワード
  • Python 3、requestsとpython-dotenv
  • 秘密情報を除外する.gitignoreと.envファイル

通常のログインパスワードを原稿やプログラムへ直接貼り付ける方式は避けます。アプリケーションパスワードも機密情報であり、漏えいした場合は失効させる必要があります。

ステップ1:Pythonの仮想環境を作る

Macで作業していた当時、pipのコマンド名やHomebrew管理下のPythonへの直接インストールでつまずきました。そこでプロジェクトごとの仮想環境を作る方式を採用しました。

python3 -m venv .venv
.venv/bin/python -m pip install requests python-dotenv

コマンドはMacやLinuxを想定しています。Windowsでは仮想環境のPythonのパスが異なります。

ステップ2:.envに接続情報を設定する

実際のドメイン名や認証情報は記事に掲載しません。次の記述はダミーです。

WP_SITE_URL=https://example.com
WP_USERNAME=example_user
WP_APP_PASSWORD=replace_with_app_password

同時に.gitignoreへ.envを記述し、Gitへの誤登録を防ぎます。

.env
.venv/

ステップ3:下書き投稿のPythonサンプル

以下はWordPressの標準REST APIの基本的な動作を説明するための再現用コード例です。2026年5月に使った実際のwp_post.pyファイルをそのまま転載したものではありません。また、この説明用コードについて当サイトの本番環境への実行テストは行っていません。

import os
import requests
from dotenv import load_dotenv

load_dotenv()

site = os.getenv("WP_SITE_URL", "").rstrip("/")
user = os.getenv("WP_USERNAME")
password = os.getenv("WP_APP_PASSWORD")

if not site or not user or not password:
    raise RuntimeError("WordPressの接続設定が不足しています")

api_url = f"{site}/wp-json/wp/v2/posts"
payload = {
    "title": "API投稿テスト",
    "content": "<p>これはテスト用の下書きです。</p>",
    "status": "draft",
}

response = requests.post(
    api_url,
    json=payload,
    auth=(user, password),
    timeout=30,
)
response.raise_for_status()
post = response.json()
print("下書きID:", post["id"])

この例では記事本文を直接指定しており、MarkdownからHTMLへの変換処理は含まれていません。実際にMarkdownのファイルから投稿するには、ファイルの読み込みや変換を追加する必要があります。

エラーになったときに切り分けること

401 Unauthorized

認証情報が受け付けられていない可能性があります。ユーザー名、アプリケーションパスワード、HTTPS、セキュリティ設定などを確認します。

403 Forbidden

認証できても操作権限が足りない、セキュリティ対策がリクエストを拒否している、といった可能性があります。権限とサイト側のアクセス制御を確認します。

404 Not Found

サイトURLやREST APIのパスが間違っていないかを確認します。WordPressがサブディレクトリに設置されている場合は特に注意が必要です。

429 Too Many Requests

リクエストが制限されている可能性があります。2026年10月のMCP運用でも、テーマ変更の確認中にHTTP 429を経験しました。原因が確定しない場合、保護機構を無効化して続行するのではなく、時間を置く・アクセスログを確認する・代替手段を検討するといった対応が必要です。

REST APIとMCPは何が違う?

項目 Python+REST API ChatGPT+MCP
操作の入口 自作スクリプト ChatGPTの会話と接続ツール
事前準備 Python環境、認証情報、コード MCPサーバー・接続と権限設定
反復処理 定型バッチに向く 対話しながら個別作業を進めやすい
記事の公開 コードで明示して実行 接続が許可する公開機能を利用
注意点 秘密情報と例外処理 接続先誤認・権限・操作結果の検証

両者は排他的ではありませんが、現在のミロクAIではChatGPT+WordPress MCPへ運用を一本化しています。以前のスクリプトを今後必須のものとして扱う予定はありません。

現在の運用で守っていること

AIが記事の下書きを作っても、実際の作業ログに基づいているかを確認してから公開します。公開後にはWordPressから記事ID・URL・公開状態を再取得し、成功したことを検証します。

関連する実践記録は、ChatGPT+MCPへの移行記録、.envを使った認証情報管理、WordPress記事HTMLの監査をご覧ください。

2026年5月の投稿自動化経験をもとに、2026年10月時点の運用と再現用コード例を追記しました。

広告(楽天アフィリエイト)

コメント

タイトルとURLをコピーしました