この記事でわかること
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 申請に進む予定。その結果もここに書く。✨
(コード例は元記事を参照)