第1回では、ChatGPTやCodexで作成したMarkdown記事を、WordPressへ下書き投稿するツールの全体像を紹介しました。
今回は、PythonからWordPressへ接続する準備をします。
最初に作るのは、WordPressへ記事を投稿するコードではありません。
まずは、PythonからWordPressRESTAPIへ接続できるかを確認します。

接続確認ができれば、次回以降でMarkdownファイルの読み込みや、WordPressへの下書き投稿処理に進めます。

今回作るもの

今回は、WordPressRESTAPIへ接続確認するための小さなPythonコードを作ります。
作るファイルは次の3つです。

ファイル役割
.env.example接続情報のサンプルを書く
.env実際のWordPress接続情報を書く
check_connection.pyWordPressRESTAPIへ接続確認する

今回は、投稿処理までは作らないでWordPressRESTAPIへ接続できることを確認します。
.envには実際の接続情報を書くため、自分以外が見られる場所には置かないようにします。
公開用のサンプルには.env.exampleを使います。

ディレクトリ構成

今回のサンプルコードは、以下のGitHubで公開しています。
https://github.com/ojichiku/public-python-samples/tree/main/samples/wp-rest-api-connection-check

public-python-samples/
└─ samples/
   └─ wp-rest-api-connection-check/
      ├─ .env.example
      └─ check_connection.py

実際に動かすときは、.env.exampleをコピーして.envを作成します。
.envには本物の接続情報を書くため、公開用のサンプルには含めていません。

作業の流れ

今回の作業は、次の順番で進めます。

手順内容
1WordPressでアプリケーションパスワードを作成する
2Pythonで使うライブラリをインストールする
3.env.exampleを作成する
4.envを作成して接続情報を書く
5check_connection.pyを作成する
6Pythonで接続確認を実行する

WordPress側で接続用パスワードを作り、Python側でその情報を使って接続確認します。

WordPressRESTAPIとは

WordPressRESTAPIは、外部のプログラムからWordPressを操作するための仕組みです。
普段はWordPressの管理画面から記事を書いたり、カテゴリを設定したりします。
WordPressRESTAPIを使うと、Pythonなどの外部プログラムからWordPressの記事やユーザー情報を扱えます。

今回作る投稿ツールでは、PythonからWordPressへ記事データを送るためにWordPressRESTAPIを使います。
この記事では、まず接続確認だけを行います。

接続確認に使うURLは次の形です。

https://自分のWordPressサイト/wp-json/wp/v2/users/me

このURLへPythonからアクセスし、ユーザー情報が取得できれば接続確認は成功です。

投稿ツールに必要な情報

PythonからWordPressへ接続するには、次の3つが必要です。

項目内容
WordPressサイトURL自分のWordPressサイトのURL
WordPressユーザー名WordPress管理画面のユーザー名
アプリケーションパスワード外部接続用に作成するパスワード

これらをPythonファイルに直接書くと、コード公開時に漏れる可能性があります。
今回は.envに書いて、Pythonから読み込む形にします。

アプリケーションパスワードを作成する

まずは、WordPress管理画面でアプリケーションパスワードを作成します。
WordPress管理画面にログインし、ユーザーのプロフィール画面を開きます。
プロフィール画面の中に、アプリケーションパスワードを作成する項目があります。

アプリケーションパスワードを作成すると、英数字が並んだパスワードが表示されます。
このパスワードは、あとで.envファイルに設定します。
表示されたタイミングでコピーして保存します。

分からなくなった場合は、古いアプリケーションパスワードを削除し、新しく作成します。

Pythonで使うライブラリ

今回使うPythonライブラリは、次の2つです。

ライブラリ用途
requestsWordPressRESTAPIへHTTPリクエストを送る
python-dotenv.envファイルから接続情報を読み込む

requestsはWordPressRESTAPIへ接続するために使います。
python-dotenvは.envファイルの内容をPythonから読み込むために使います。

.env.exampleを作成する

次に、.env.exampleを作成します。
.env.exampleは、接続情報のサンプルファイルです。
実際の接続情報は書きません。

samples/wp-rest-api-connection-check/に、.env.exampleを作成します。
内容は次の通りです。

WP_SITE_URL=https://example.com
WP_USERNAME=your_username
WP_APP_PASSWORD=your_application_password

.env.exampleは公開用のサンプルとして使います。
本物のWordPressサイトURL、ユーザー名、アプリケーションパスワードは書かないようにします。

.envを作成する

次に、実際に接続確認で使う.envを作成します。
.env.exampleをコピーして、.envという名前にします。

public-python-samples/
└─ samples/
   └─ wp-rest-api-connection-check/
      ├─ .env.example
      ├─ .env
      └─ check_connection.py

.envには、自分のWordPress接続情報を書きます。

WP_SITE_URL=https://example.com
WP_USERNAME=your_username
WP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
項目書く内容
WP_SITE_URL自分のWordPressサイトURL
WP_USERNAMEWordPressのユーザー名
WP_APP_PASSWORD作成したアプリケーションパスワード

アプリケーションパスワードに半角スペースが含まれている場合は、そのまま貼り付けます。
前後に余計な空白が入らないように注意します。
.envは自分以外が見られる場所には置かないようにします。

check_connection.pyを作成する

次に、WordPressRESTAPIへ接続確認するPythonファイルを作成します。
ファイル名はcheck_connection.pyにします。

import os

import requests
from dotenv import load_dotenv


def main() -> None:
    load_dotenv()

    site_url = os.getenv("WP_SITE_URL")
    username = os.getenv("WP_USERNAME")
    app_password = os.getenv("WP_APP_PASSWORD")

    if not site_url or not username or not app_password:
        raise ValueError(".envに必要な接続情報が設定されていません。")

    url = f"{site_url.rstrip('/')}/wp-json/wp/v2/users/me"

    response = requests.get(
        url,
        auth=(username, app_password),
        timeout=10,
    )

    print(f"status_code: {response.status_code}")

    if response.ok:
        user = response.json()
        print("WordPressRESTAPIへの接続に成功しました。")
        print(f"user_id: {user.get('id')}")
        print(f"name: {user.get('name')}")
        return

    print("WordPressRESTAPIへの接続に失敗しました。")
    print(response.text)


if __name__ == "__main__":
    main()

このコードでは、.envからWordPressサイトURL、ユーザー名、アプリケーションパスワードを読み込みます。
接続情報が足りない場合は、エラーにしています。
そのあと、/wp-json/wp/v2/users/meへGETリクエストを送ります。

接続確認を実行する

作成したフォルダへ移動します。

cd samples/wp-rest-api-connection-check

次に、Pythonファイルを実行します。

python check_connection.py

接続に成功すると、次のような結果が表示されます。

status_code: 200
WordPressRESTAPIへの接続に成功しました。
user_id: 99
name: username

status_code: 200が表示されれば、WordPressRESTAPIへの接続は成功です。
これで、PythonからWordPressへ接続できることを確認できました。

うまく接続できないとき

接続できない場合は、まず次の3つを確認します。

  • .envの値が正しいか
  • アプリケーションパスワードをコピーし間違えていないか
  • requestsとpython-dotenvをインストールしているか

最初は、コードより設定ミスを疑った方が早いです。

今回のまとめ

今回は、PythonからWordPressRESTAPIへ接続する準備をしました。
作成したファイルは、.env.example、.env、check_connection.pyです。
.env.exampleには接続情報のサンプルを書き、.envには実際のWordPressサイトURL、ユーザー名、アプリケーションパスワードを書きました。

check_connection.pyでは、.envから接続情報を読み込み、/wp-json/wp/v2/users/meへアクセスしました。
status_code: 200が表示されれば、PythonからWordPressRESTAPIへ接続できています。

次回は、Markdownファイルを読み込んで、タイトルや本文を取り出す処理を作ります。
WordPressへ投稿する前に、まずはMarkdownの中身をPythonで扱える形にしていきます。