WordPressのREST APIを使ってPythonから自動投稿

ブログ

認証の設定方法

WordPress REST APIにアクセスするためには、適切な認証が必要です。ここでは、application_passwordjwtoauth1の3つの認証方法に対応した認証設定を行う方法を紹介します。

REST APIの認証方法については以下の記事でトークンなどを取得しておいてください。

import requests

class WordPressClient:
    def __init__(self, wp_url, auth_method, auth_info):
        """
        WordPress APIクライアントの初期化
        :param wp_url: WordPressサイトのURL
        :param auth_method: 認証方法 ("application_password", "jwt", "oauth1")
        :param auth_info: 認証情報の辞書
        """
        self.wp_url = wp_url
        self.auth_method = auth_method
        self.auth_info = auth_info
        self.headers = {}

        # 認証設定
        self.set_auth()

    def set_auth(self):
        """ 認証設定を行う """
        if self.auth_method == "application_password":
            username = self.auth_info.get("username")
            password = self.auth_info.get("password")
            self.headers["Authorization"] = f"Basic {requests.auth._basic_auth_str(username, password)}"

        elif self.auth_method == "jwt":
            token = self.auth_info.get("token")
            self.headers["Authorization"] = f"Bearer {token}"

        elif self.auth_method == "oauth1":
            from requests_oauthlib import OAuth1
            consumer_key = self.auth_info.get("consumer_key")
            consumer_secret = self.auth_info.get("consumer_secret")
            token_key = self.auth_info.get("token_key")
            token_secret = self.auth_info.get("token_secret")
            self.auth = OAuth1(consumer_key, consumer_secret, token_key, token_secret)
        else:
            raise ValueError("Unsupported authentication method")
  • auth_method パラメータには、使用する認証方法を指定します。auth_info には認証情報を辞書形式で渡します。
  • set_auth メソッドは、指定された認証方法に基づいてHTTPリクエストのヘッダーを設定します。

新規記事の作成

次に、新しい記事を作成するメソッドを紹介します。WordPressの投稿タイプであるpostsを使って、create_postメソッドで記事を新規作成します。

from datetime import datetime

class WordPressClient:
    # 認証設定のメソッドは省略

    def request(self, method, endpoint, data=None, files=None):
        """
        WordPress APIへのリクエストを行う
        :param method: HTTPメソッド (GET, POST, etc.)
        :param endpoint: APIエンドポイント
        :param data: リクエストデータ
        :param files: ファイルデータ(画像アップロード用)
        :return: レスポンスオブジェクト
        """
        url = f"{self.wp_url}/wp-json/wp/v2/{endpoint}"

        if self.auth_method == "oauth1":
            response = requests.request(method, url, auth=self.auth, json=data, files=files)
        else:
            response = requests.request(method, url, headers=self.headers, json=data, files=files)

        if not response.ok:
            raise Exception(f"Error: {response.status_code} - {response.text}")

        return response.json()

    def create_post(self, post_id=None, **kwargs):
        """
        WordPressに投稿を作成または更新する
        :param post_id: 更新する投稿のID(新規作成の場合はNone)
        :param kwargs: 投稿のデータ(タイトル、コンテンツ、ステータス、カテゴリーなど)
        :return: 投稿ID
        """
        endpoint = f"posts/{post_id}" if post_id else "posts"
        method = "PUT" if post_id else "POST"
        response = self.request(method, endpoint, data=kwargs)
        return response.get('id')
  • request メソッドはWordPress APIに対してHTTPリクエストを送信するための汎用メソッドです。様々な処理で必要になるので、別途作成しておきます。
  • create_post メソッドは新しい投稿を作成します。既存の投稿IDを指定することで、投稿の更新も可能です。

記事の更新

記事の更新も新規作成とほぼ同様です。create_post メソッドでpost_idを指定すれば、指定したIDの記事が更新されます。

それぞれの認証方法(application_passwordjwtoauth1)について、Pythonコードの実行例を示します。これにより、WordPress APIを使って記事を新規作成または更新する具体的な手順がわかります。

実行例

application_password 認証の例

WordPressのApplication Passwordsプラグインを使用して生成されたパスワードを用いる認証方法です。この方法はシンプルで設定が簡単です。

# 必要な情報を定義
wp_url = "https://your-wordpress-site.com"
auth_method = "application_password"
auth_info = {
    "username": "your_username",  # WordPressのユーザー名
    "password": "your_application_password"  # アプリケーションパスワード
}

# WordPressClientのインスタンスを作成
client = WordPressClient(wp_url, auth_method, auth_info)

# 新規記事を作成する
post_data = {
    "title": "新しいブログ記事",
    "content": "これは新しい記事のコンテンツです。",
    "status": "publish"
}

post_id = client.create_post(**post_data)
print(f"新しい記事が作成されました。記事ID: {post_id}")

jwt 認証の例

JWT(JSON Web Token)を使用した認証方法です。この方法はセキュアで、Tokenベースの認証をサポートします。サーバー側にJWT認証用のプラグイン(例: JWT Authentication for WP REST API)をインストールする必要があります。

# 必要な情報を定義
wp_url = "https://your-wordpress-site.com"
auth_method = "jwt"
auth_info = {
    "token": "your_jwt_token"  # 事前に取得したJWTトークン
}

# WordPressClientのインスタンスを作成
client = WordPressClient(wp_url, auth_method, auth_info)

# 新規記事を作成する
post_data = {
    "title": "JWTで認証したブログ記事",
    "content": "JWTを使って認証しています。",
    "status": "publish"
}

post_id = client.create_post(**post_data)
print(f"新しい記事が作成されました。記事ID: {post_id}")

oauth1 認証の例

OAuth 1.0aを使用した認証方法です。requests_oauthlibライブラリを利用してOAuth1で認証を行います。この方法はよりセキュアな認証を提供しますが、設定が少し複雑です。

from requests_oauthlib import OAuth1

# 必要な情報を定義
wp_url = "https://your-wordpress-site.com"
auth_method = "oauth1"
auth_info = {
    "consumer_key": "your_consumer_key",  # WordPressサイトで生成したOAuth1のConsumer Key
    "consumer_secret": "your_consumer_secret",  # OAuth1のConsumer Secret
    "token_key": "your_token_key",  # 取得したOAuth1のToken Key
    "token_secret": "your_token_secret"  # OAuth1のToken Secret
}

# WordPressClientのインスタンスを作成
client = WordPressClient(wp_url, auth_method, auth_info)

# 新規記事を作成する
post_data = {
    "title": "OAuth1認証で投稿した記事",
    "content": "この投稿はOAuth1を使用して作成されました。",
    "status": "publish"
}

post_id = client.create_post(**post_data)
print(f"新しい記事が作成されました。記事ID: {post_id}")

まとめ

今回は、WordPressの認証設定方法と新規記事の作成および更新に焦点を当てて解説しました。このコードを活用することで、効率的にWordPressサイトを管理できます。

次回は、投稿時にカテゴリーやタグ、日付を設定しやすくする方法を紹介します。

コメント

タイトルとURLをコピーしました