WordPress自動投稿システムの設計と実装

なぜ自動化が必要だったのか

ブログ記事を毎日複数件投稿する運用をしていると、手動での投稿作業がボトルネックになる。記事自体はAIで生成できても、WordPressの管理画面を開いて1件ずつ投稿するのは非効率だ。

そこで、Markdown形式で記事を書いたら自動でWordPressに投稿できる仕組みを作った。

システム構成

全体フロー

  1. Markdown形式で記事作成
  2. wordpress_auto_post.py でドラフト投稿
  3. schedule_posts.py で予約投稿設定
  4. WordPress REST API経由で自動公開

技術選定

WordPress REST API を選んだ理由:
– 公式API(安定性が高い)
– 認証方法が明確(Application Passwords)
– 投稿・更新・削除が可能
– カテゴリ・タグ・アイキャッチも設定できる

Python を選んだ理由:
requests ライブラリでAPIアクセスが簡単
– Markdown → HTML変換が容易(markdown パッケージ)
– OpenClawのワークフローと統合しやすい

実装の工夫

1. Markdown → HTML 変換

import markdown

def convert_markdown_to_html(md_content):
    return markdown.markdown(
        md_content,
        extensions=['extra', 'codehilite', 'tables']
    )

extra拡張で脚注・定義リスト・省略記法に対応。codehiliteでコードブロックをシンタックスハイライト。

2. 認証の実装

WordPress REST APIはApplication Passwordsを推奨している。

import requests
from requests.auth import HTTPBasicAuth

auth = HTTPBasicAuth('username', 'application_password')
response = requests.post(api_url, json=post_data, auth=auth)

管理画面で生成したパスワードを.envで管理することでセキュアに運用。

3. エラーハンドリング

APIリクエストは失敗することがある。リトライ+詳細ログで運用を安定化。

for attempt in range(3):
    try:
        response = requests.post(...)
        if response.status_code == 201:
            print(f"✅ 投稿成功: {response.json()['link']}")
            break
    except Exception as e:
        print(f"⚠️ リトライ {attempt+1}/3: {e}")
        time.sleep(2)

4. カテゴリ・タグの自動設定

記事のFront Matterからカテゴリ・タグを抽出して自動設定。

---
title: "WordPress自動投稿システムの設計と実装"
category: "自動化"
tags: ["WordPress", "Python", "API"]
---

5. アイキャッチ画像の対応

今後の拡張として、DALL-E 3でアイキャッチ画像を自動生成→WordPress Media Libraryにアップロード→投稿に紐付けも可能。

予約投稿の実装

schedule_posts.pyでドラフト記事を自動で公開日時設定。

def schedule_post(post_id, publish_date):
    data = {
        'status': 'future',
        'date': publish_date  # ISO 8601形式
    }
    response = requests.post(f'{api_url}/{post_id}', json=data, auth=auth)

これで「毎日9:00に1記事ずつ公開」のような運用が可能。

運用上の工夫

バッチ投稿対応

複数記事を一度に投稿するため、ディレクトリ内のMarkdownファイルを順次処理。

python wordpress_auto_post.py /path/to/articles/*.md

投稿前プレビュー

下書き保存→URLを取得→ブラウザで確認→問題なければ公開、というフローも可能。

投稿履歴の記録

posted_articles.jsonに投稿済み記事のIDとURLを記録。重複投稿を防ぐ。

結果

  • 投稿時間: 1記事あたり手動5分 → 自動5秒(60倍高速化)
  • 予約投稿: 1週間分を一括設定可能
  • エラー率: リトライ機能で98%成功

2週間で56記事投稿する計画も、この仕組みがあれば余裕で回せる。

今後の改良予定

  1. DALL-E 3連携: アイキャッチ画像自動生成
  2. SEO最適化: メタディスクリプション自動設定
  3. SNS連携: 投稿後にTwitter/Facebookに自動シェア
  4. 分析機能: Google AnalyticsのデータをOpenClawに通知

関連記事:
– DASHタスク管理システム:雑に投げたタスクを自動振り分け
– SEO記事を自動生成するワークフローを構築した


この記事は「中野のAI開発部屋」で公開中の自動化システム実装シリーズです。