AI自動化

Python で WordPress 自動投稿——REST API 実装と実運用のリアル

Python で WordPress 自動投稿——REST API 実装と実運用のリアル

この記事は約 4 分で読めます

📖 目次
  1. 📌 この記事でわかること
  2. 📌 WordPress REST API の基本——まずここだけ押さえる
  3. 📌 タグ・カテゴリの ID を取得する
  4. 📌 キューから読み込んで一括投稿する実装
  5. 📌 実際に動かしたときのデータ
  6. 📌 詰まったポイント3つ
  7. 📌 launchd で定期実行する
  8. 📌 比較: 手動投稿 vs API自動化
  9. 📌 まとめ

この記事でわかること

WordPress REST API を使って Python からブログ記事を自動投稿する具体的な実装方法。認証の落とし穴、キューの組み方、実際に14本を一気に公開したときの話まで書く。「とりあえず動くもの」から「毎日動き続けるもの」にするための差分に重点を置いた。


WordPress REST API の基本——まずここだけ押さえる

WordPress には (略) というエンドポイントがある。ここに POST を投げると記事が作れる。認証は Application Passwords(WP 5.6以降)が一番楽だ。

管理画面の「ユーザー → プロフィール」を下にスクロールすると「アプリケーションパスワード」の欄がある。名前を付けて生成するだけ。これをユーザー名と組み合わせて Basic 認証に使う。

(コード例は元記事を参照)

これだけで記事が公開される。シンプルすぎて拍子抜けするくらい。


タグ・カテゴリの ID を取得する

タグ名をそのまま渡してもダメで、WP 側の数値 ID が必要になる。毎回 API で引く実装にしておくと、タグを後から追加しても壊れない。

(コード例は元記事を参照)

最初に書いたときはタグを毎回手打ちしていた。10本投稿したタイミングで面倒になって関数化した、という流れ。


キューから読み込んで一括投稿する実装

僕の場合、(略) ディレクトリに JSON ファイルを溜めて、そこから読んで投稿するという設計にしている。ファイル名で順序が決まる。

(コード例は元記事を参照)

(略) で処理済みを別ディレクトリに退避している。これをやっておかないと二重投稿が起きる。実際に一度やらかした。同じ記事が3本できた。


実際に動かしたときのデータ

先日、(略) に溜まっていたAI自動化テーマの記事を10本まとめて投稿した。

項目 数値
投稿数 10本
平均文字数 2,430字
所要時間 約4分
エラー 0件
累計公開記事 14本

4分で10本。手動でやっていたら1本あたりコピペだけで5分はかかる。コードを書く時間を含めても初週でペイした計算だ。

AdSense準備スコアが78まで上がったのは、記事数が増えたのとページ構成(About・プライバシーポリシー・お問い合わせ)が整ったから。記事の質とボリュームは切り離せない。


詰まったポイント3つ

1. 認証が通らなかった

Application Password のスペースをそのまま渡すのが正解なのに、最初はスペースを除去して渡していた。401が返ってくるだけでエラーメッセージが親切じゃない。公式ドキュメントを読むと「スペースは無視される」と書いてあるが、「スペース込みで渡せ」とは書いていない。試行錯誤で気づいた。

2. HTML として投稿しないと改行が消える

Markdown で書いた内容をそのまま (略) に渡しても WordPress 側でレンダリングされない。(略) ライブラリで HTML に変換してから渡す必要がある。

(コード例は元記事を参照)

(略) を入れないとコードブロックが崩れる。これも地味にハマった。

3. レート制限は自前で管理する

WordPress.com ホスティングだとレート制限がある。セルフホストでも Xserver の WAF が反応することがある。10本を連続で投げると詰まる場合があるので、投稿ごとに (略) を入れている。3秒は経験値。1秒だと不安定だった。


launchd で定期実行する

Mac 環境なので crontab ではなく launchd を使っている。plist ファイルで定義するだけ。

(コード例は元記事を参照)

(コード例は元記事を参照)

毎朝9時に自動実行。起きたらログを見て「今日は何本公開されたか」を確認するだけになった。これが「完璧より継続」の実体だと思っている。仕組みを作れば、自分が何もしなくても記事が増える。


比較: 手動投稿 vs API自動化

観点 手動投稿 API自動化
1本あたりの時間 5〜10分 数秒
ミス(誤字・タグ漏れ) たまに起きる コードで統一
定期投稿の安定性 忘れる launchd が忘れない
初期コスト ゼロ 実装に3〜5時間
柔軟な修正 すぐできる コード変更が必要

手動の方が融通が利くのは本当のことで、特殊なフォーマットや画像の配置が複雑な記事は今でも手で調整する。ただ、「毎日1本」という継続を担保するには自動化しかなかった。


まとめ

WordPress REST API + Python の自動投稿は、実装自体は数時間で終わる。ハードルになるのは認証の理解と、キュー管理の設計だ。最初からきれいに作ろうとしないで、「とりあえず1本投稿できる」ところから始めて、壊れながら直していくのが現実的なやり方だと思っている。

Search Console の登録が終わったら AdSense 申請に進む予定。その結果もここに書く。✨


(コード例は元記事を参照)

👨‍💻
一ノ瀬泰斗
AI自動化エンジニア / Python個人開発者

Claude Code × Ollama × launchd で SNS・ブログ・KDPを全自動化。実測データと失敗談を軸に、月5万円収益化のリアルな記録を発信中。