正直に言うと、最初は「自動化なんて自分には無理」と思っていた。毎晩23時にAIで生成した記事をWordPressに手動でコピペして、カテゴリ設定してタグ付けして——それを1記事30分かけてやっていた。月50記事を目標にしていた2023年11月、計算したら月25時間以上を「貼り付け作業」に使っていたことに気づいて、さすがに嫌になった。
そこからWordPress REST APIを使った自動投稿の仕組みを作ったら、同じ作業が月2時間ちょっとに縮んだ。今回はその具体的な手順を、失敗談も含めて全部書く。

最初はプラグインで解決しようとした。「WP All Import」や「Zapier連携」を試したけど、細かいカスタマイズができなくて2週間で諦めた。調べていくうちに、WordPress 4.7以降はREST APIが標準搭載されていて、外部プログラムから記事の作成・編集・削除が全部できると知った。
要するに、WordPressに「外から命令を出せる窓口」がもともと用意されていた。追加プラグインも不要。これを使わない手はなかった。
REST APIで操作できる主な内容はこのあたりだ。
仕組みを理解するのに1日かかったけど、本質はシンプルだった。たった3ステップで完結する。
この3ステップを自動化するだけで、1記事あたり平均30〜45分かかっていた投稿作業がほぼゼロになる。私の場合、最初のスクリプトを書くのに半日かかったが、そこから先は完全に放置で回っている。
導入前は「本当に効果あるの?」と半信半疑だった。でも3ヶ月運用してみて、具体的にこれだけ変わった。
最初、管理者アカウントでアプリケーションパスワードを発行してしまった。セキュリティ的にまずいと後から気づいて、慌てて専用アカウントを作り直した。これは最初から正しくやっておくべき設定だ。
正しい手順はこうだ。
管理者権限のアカウントでパスワードを発行すると、万が一スクリプトが漏れたときにサイト全体が危険にさらされる。専用の投稿者アカウントを使えば、被害範囲を「記事の投稿・編集」だけに限定できる。
n8nやGASでも自動投稿はできる。でも私は最終的にPythonを選んだ。その理由を比較表にまとめた。
| ツール | 難易度 | 柔軟性 | コスト | おすすめ度 |
|---|---|---|---|---|
| Python | 中 | ◎ 最高 | 無料 | ★★★★★ |
| n8n | 低 | ○ 高め | 無料〜有料 | ★★★★☆ |
| GAS(Google Apps Script) | 中 | △ 制限あり | 無料 | ★★★☆☆ |
| Zapier | 低 | △ 制限多め | 高め | ★★☆☆☆ |
ノーコードで試したいならn8nが一番バランスが良い。でも長期的に使うなら、Pythonの柔軟性に勝るものはない。
n8nは無料プランでも十分な機能が使える。
→ 無料で試す【公式】
事前に用意するものはこれだけだ。
実装前に、まずAPIが有効かどうかを確認する。ブラウザのアドレスバーに以下を入力するだけでいい。
https://あなたのサイトURL/wp-json/wp/v2/posts
JSONデータがずらっと表示されればOK。エラーが出たら、セキュリティプラグインがAPIをブロックしている可能性が高い。私は最初これで1時間詰まった。
主なエンドポイントは3つ覚えておけばいい。
最初に書いたコードは認証エラーで動かなかった。原因はアプリケーションパスワードのスペースを消し忘れていたこと。WordPressが発行するパスワードは「xxxx xxxx xxxx xxxx」のようにスペース区切りで表示されるが、そのまま使っていいし、消してもいい。ただし、コピー時に余計なスペースが混入するとエラーになる。
動作確認済みの基本コードはこれだ。
WP_URL = “https://あなたのサイトURL/wp-json/wp/v2/posts”
USERNAME = “投稿者のユーザー名”
APP_PASSWORD = “発行したアプリケーションパスワード”
# Basic認証のヘッダーを作成
credentials = f“{USERNAME}:{APP_PASSWORD}”
token = base64.b64encode(credentials.encode()).decode(“utf-8”)
headers = {
“Authorization”: f“Basic {token}”,
“Content-Type”: “application/json”
}
# 投稿データの設定
post_data = {
“title”: “自動投稿テスト記事”,
“content”: “<p>これはAPIから自動投稿した記事です。</p>”,
“status”: “publish”, # “draft”にすると下書き保存
“categories”: [5], # カテゴリーIDを指定
“tags”: [12, 15] # タグIDを指定
}
# POSTリクエストを送信
response = requests.post(WP_URL, json=post_data, headers=headers)
if response.status_code == 201:
print(f“投稿成功!記事ID: {response.json()[‘id’]}”)
else:
print(f“エラー: {response.status_code} – {response.text}”)
statusを“draft”に変えると下書き保存になる。最初の数回は必ずdraftで動作確認してから、publishに切り替えることを強く勧める。私は最初からpublishで走らせて、テスト記事が10本公開されるという事故を起こした。
AIで生成した記事を収益化するには、自分のブログを持つのが一番の近道です。
当サイトでも利用している「ConoHa WING」なら、初心者でも10分でブログが開設できます。
\ 今なら最大50%OFFキャンペーン中! /