自動化、最高。そう思ってWordPressのREST APIを叩き始めたら、思いがけない仕様の壁にボコボコにされた。
AIエージェント(Antigravity)のおかげで、記事の執筆自体は爆速になった。でも、最終的にブラウザを開いてWordPressの管理画面にログインし、コピペして、太字にして、SEOのディスクリプションを入れて……という「手作業」がどうしても残る。
これが死ぬほど面倒くさかった。
今回は、この「最後の1マイル」をPythonスクリプトで完全自動化した話と、その過程で踏み抜いたGutenberg(ブロックエディタ)の地雷、そしてその回避策をまとめる。
何に困っていたか:AIの出力とWPの実装のズレ
ローカルのメモアプリ(Obsidian)を第2の脳として使い、そこに溜まった文脈をAIエージェントに読み込ませて記事化する。ここまではスムーズだった。
問題は、出力されたMarkdownテキストを、いかに手間なくWordPressに流し込むかだ。
当初は「Pythonの標準的なWP REST APIを使えば一発だろう」と高を括っていた。しかし、現実は甘くない。
一番のネックは以下の2点だった。
- SEOプラグインの壁:標準のREST APIでは、「SEO SIMPLE PACK」等のプラグインが管理するメタディスクリプション(検索結果に出る説明文)を設定できない。
- Gutenbergのブロック崩壊:MarkdownのHTML変換を雑にやると、WordPress側の編集画面でブロック構造が壊れ、クラッシュエラーが起きる。
これを解決するために、結局システムを自作する羽目になった。
解決方法:Python×REST APIでの自動投稿スクリプト
まず、通常の記事投稿自体は、WordPress側で「アプリケーションパスワード」を発行し、Basic認証を通せば驚くほど簡単にできる。
import urllib.request
import json
import base64
# (中略) 認証ヘッダー作成と通常の投稿リクエスト
# これでタイトルと本文を一発で下書き保存できる
カベ:SEOディスクリプションがAPIから入らない
ここで沼った。本サイトではプラグイン「SEO SIMPLE PACK」を使っている(Cocoon標準のSEO機能はオフ化済み)。
標準のWordPress REST APIには、このプラグイン固有のカスタムフィールド(ssp_meta_description)を直接書き込むエンドポイントが用意されていなかったのだ。
どうしたか。
Antigravity(AIエージェント)にゴリゴリやらせて、WordPress側にカスタムエンドポイント(自作の受け入れ口)をPHPで作って増設した。
Pythonスクリプト側では、まず通常の記事投稿を行い、取得した「POST ID」を使って、続けてこの自作エンドポイントを叩きに行く。これで、AIが生成した120文字の要約を、SEO設定として強制的にねじ込むことに成功した。
使った感想:Gutenbergの「闇」と絶対の掟
正直に言うと…
API連携が通った瞬間は脳汁が出たものの、直後に最大の絶望が待っていた。
PythonからAPI経由で投稿し、ブラウザ(実際のWebサイト)で確認すると完璧に見える。
しかし、WordPressの管理画面に入って「編集」ボタンを押した瞬間、エディタ上に「このブロックには想定されていないコンテンツが含まれています」というエラーが大量発生し、本文が真っ白になってしまったのだ。
「殺りに来ている」と思った。
原因は、WordPressのエディタである「Gutenberg」の仕様にあった。
Gutenbergは、文章を<!-- wp:paragraph -->や<!-- wp:heading -->といったHTMLのコメントタグ(ブロックタグ)で厳格に管理している。
私がAPIで流し込んだHTMLは、見出しのブロックタグの中に、他のブロックがネスト(入れ子)されてしまっていた。
【失敗例】
<!-- wp:heading -->
<h2>見出し</h2>
<!-- wp:paragraph --><p>本文</p><!-- /wp:paragraph -->
<!-- /wp:heading -->
これをやってしまうと、管理画面のシステムが構造を解析できず、ブロックが崩壊する。
【解決策(鉄の掟)】
ブロックタグの独立性を絶対に保持すること。新しいブロックを挿入・置換する際は、既存のブロックタグの中に閉じ込めず、必ず外側(開始直前か終了直後)に配置し、各々が完全に独立した開始・終了タグを持つように構成しなければならない。
これに気づくまでに数日を溶かした。
開発環境と愛用機材
この面倒な検証とデバッグ作業を乗り切れたのは、安定したサーバー環境と、長時間の作業でも疲れない入力デバイスのおかげだ。
サーバーは安定のエックスサーバーを使用している。APIの応答速度も申し分なく、カスタムエンドポイントの挙動テストもサクサク進んだ。
また、長時間のスクリプト調整を支えてくれたのが、私の愛機であるトラックボールマウスだ。
手首を動かさず、親指だけでカーソルを精密に操作できる。今回の検証のように、ターミナルとブラウザを行き来して何時間もデバッグする際は、この手首の疲労軽減効果が「生存本能」レベルで直結する。
まとめ:仕組み作りの泥臭さ
AIで記事が書けるようになっても、「公開」までの経路がアナログでは全く意味がない。
WordPressのREST APIとGutenbergの仕様は曲者だったが、この仕組みを構築したことで、今後のブログ更新作業は「コマンドを1つ叩くだけ」で終わるようになった。
探すより、作ってしまったほうが早い。
この「手軽さ」を手に入れたことによる長期的なリターンは計り知れないと考えています。一度、API連携の世界に足を踏み入れてみることをおすすめします。
※当サイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。


コメント