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

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

背景

SEO記事を毎日4本投稿するには、手動では追いつかない。そこで、Markdownファイルから自動でWordPress投稿するシステムを構築しました。

システム構成

Markdown記事
   ↓
Python スクリプト
   ↓
WordPress REST API
   ↓
投稿完了

技術スタック

  • Python 3.11
  • WordPress REST API
  • python-wordpress-xmlrpc – WordPress連携
  • Markdown – 記事フォーマット

実装のポイント

1. WordPress REST API認証

Application Passwordを使用:

import requests
from requests.auth import HTTPBasicAuth

def wordpress_auth():
    return HTTPBasicAuth(
        'obaba',  # ユーザー名
        os.getenv('WP_APP_PASSWORD')  # Application Password
    )

def create_post(title: str, content: str, status: str = 'draft'):
    url = 'https://obaba-win.com/wp-json/wp/v2/posts'

    data = {
        'title': title,
        'content': content,
        'status': status,  # 'draft' or 'publish'
        'categories': [1],  # カテゴリID
    }

    response = requests.post(
        url,
        json=data,
        auth=wordpress_auth()
    )

    return response.json()

2. Markdownの変換

import markdown

def convert_markdown_to_html(md_content: str) -> str:
    html = markdown.markdown(
        md_content,
        extensions=[
            'fenced_code',  # コードブロック
            'tables',       # テーブル
            'toc'           # 目次
        ]
    )
    return html

3. 画像のアップロード

def upload_image(image_path: str) -> int:
    """
    画像をWordPressにアップロード

    Returns:
        attachment_id
    """
    url = 'https://obaba-win.com/wp-json/wp/v2/media'

    with open(image_path, 'rb') as f:
        files = {'file': f}

        response = requests.post(
            url,
            files=files,
            auth=wordpress_auth()
        )

    return response.json()['id']

4. カテゴリの自動判定

def determine_category(title: str, content: str) -> int:
    categories = {
        '開発実績': 1,
        'AI活用': 2,
        '自動化': 3,
        'エラー解決': 4,
    }

    for category, category_id in categories.items():
        if category in title or category in content:
            return category_id

    return 1  # デフォルト

使用例

# Markdownファイルから投稿
post_from_markdown('06_openclaw複数アカウント自然言語管理.md')

今後の改善

  • アイキャッチ画像の自動生成
  • SEOメタデータの自動設定
  • 投稿予約機能

開発時間: 3日
投稿数: 10本以上