はじめに
最近では、ChatGPTなどのAIを活用して自動でブログ記事を生成し、WordPressにAPI経由で投稿したいというニーズが増えています。この記事では、ロリポップのレンタルサーバー上で運用しているWordPressに対して、GCPで構築したAPIを経由して安全に記事投稿する方法を詳しく解説します。
GASとかZapierじゃなくて、GPTから直接投稿したいんだよね!
うん、そのためにCloud FunctionsでラッパーAPIを作るのがベストだよ!
前提条件と準備
1. WordPress 側の準備
- REST API有効化: セキュリティ系プラグインで制限されていないか確認。
- 投稿用ユーザーの作成: 「投稿者」以上の権限。
- WAFと海外アタックガードの設定: 一時的に無効化が必要。
なぜ直接APIを呼び出せないのか?
ロリポップのサーバーにはセキュリティ制限が多く、外部サーバーから直接REST APIにアクセスするとエラーになることがあります。
PHPが古い場合、Basic認証が効かないこともあるよね…
そのため、GCP(Google Cloud Platform)に中継用のラッピングAPIを用意し、GPTや外部サービスはそのAPIを叩くだけという形にするのが現実的です。
GCP上に投稿ラッパーAPIを構築する
1. Cloud FunctionsでAPIエンドポイントを作成
@https_fn.on_request()
def post_to_wordpress(req: https_fn.Request) -> https_fn.Response:
return post_to_wordpress_handler(req)
認証付きで、WordPressへ記事投稿を行う本体処理はこちらです:
def handle_request(req: https_fn.Request) -> https_fn.Response:
provided_api_key = req.headers.get('X-API-KEY')
if not provided_api_key or provided_api_key != EXPECTED_API_KEY:
return https_fn.Response("Unauthorized", status=401)
# 省略...
wp_client = WordPressClient(wp_url_base, wp_user, wp_password)
post_response = wp_client.create_post(title, content, image_base64, category_names)
return https_fn.Response(json.dumps({
"id": post_response.get("id"),
"link": post_response.get("link")
}), status=200, mimetype='application/json')
2. セキュリティはAPIキーで管理
- クライアントは
X-API-KEYヘッダーにAPIキーを指定。 - 認証失敗時は401を返して保護。
OpenAPI定義でGPTや他のサービスからの接続を自動化
openapi: 3.1.0
info:
title: ブログ投稿API
version: "3.0"
paths:
/:
post:
summary: ブログ記事を投稿する
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PostRequest"
詳細はOpenAPIのスキーマ定義で管理できます。
注意点とトラブル対策
| トラブル例 | 対処法 |
|---|---|
| 投稿できない | ロリポップのWAF・海外アタックガードを一時無効化 |
| Basic認証でエラー | PHPバージョンが古い可能性あり。7.4以上を推奨 |
| アイキャッチ画像が反映されない | WordPress側のメディアライブラリ制限を確認 |
まとめ
- GPTなどからWordPressへ投稿するには直接投稿は厳しいことが多い。
- GCPのCloud Functionsで認証付きラッパーAPIを構築するのがベストプラクティス。
- セキュリティはAPIキーで担保し、WordPress側の設定にも注意。
これで自動投稿の夢が叶うね!
あとは記事を量産するだけだ!
WordPressとGCPを連携した投稿自動化は、工夫次第でさらに拡張可能です。GPTで生成→APIで投稿の流れをぜひ取り入れてみてください!


コメント