Pythonで簡単にWordPressにメディアをアップロードする方法(REST API編)

python

Pythonを使用して、WordPressにメディアファイル(画像や動画など)をアップロードする方法について解説します。WordPressでは、REST APIを利用することで、手軽にメディアを管理できます。この記事では、Pythonを使ったメディアアップロードの設定方法からコード例まで詳しく説明します。

WordPress REST APIの準備

まず、WordPressにメディアをアップロードするためには、REST APIを使う準備が必要です。これには、認証情報をセットアップする必要があります。

アプリケーションパスワードの設定

  1. WordPressにログインします。
  2. 左側のメニューから「ユーザー」→「プロフィール」を選択します。
  3. プロフィールページの下部に「アプリケーションパスワード」が表示されているので、新しいパスワードを生成します。
  4. 生成されたパスワードは、APIを利用する際の認証に使うため、忘れずにメモしておいてください。

これで、APIを使ってWordPressにアクセスする準備が整いました。

必要なPythonライブラリのインストール

次に、PythonからHTTPリクエストを送るためにrequestsライブラリをインストールします。このライブラリを使うことで、WordPressのREST APIと簡単にやり取りができます。

ターミナルで以下のコマンドを実行して、requestsをインストールしてください。

pip install requests

requestsは非常にシンプルで強力なHTTPクライアントライブラリです。これを使うことで、APIとやり取りするコードが簡単に書けます。

Pythonコードによるメディアアップロード

次に、Pythonを使って画像ファイルをWordPressにアップロードするコード例を紹介します。以下のコードを使うことで、指定した画像をWordPressのメディアライブラリにアップロードできます。

Pythonコード例

import requests
from requests.auth import HTTPBasicAuth

# WordPressのURLとAPIエンドポイント
wordpress_url = 'https://your-wordpress-site.com/wp-json/wp/v2/media'
username = 'your_username'  # WordPressのユーザー名
application_password = 'your_application_password'  # アプリケーションパスワード

# アップロードするメディアファイルのパス
media_file_path = 'path_to_your_image.jpg'

# メディアファイルを開いてアップロード
with open(media_file_path, 'rb') as media_file:
    headers = {
        'Content-Disposition': 'attachment; filename="image.jpg"',
        'Content-Type': 'image/jpeg',  # 画像の形式に応じて変更
    }
    response = requests.post(
        wordpress_url,
        headers=headers,
        data=media_file,
        auth=HTTPBasicAuth(username, application_password)
    )

# レスポンスの確認
if response.status_code == 201:
    print("メディアのアップロードに成功しました!")
    media_data = response.json()
    print(f"アップロードしたメディアのURL: {media_data['source_url']}")
else:
    print(f"エラーが発生しました: {response.status_code}")
    print(response.text)

コードの解説

  • wordpress_url:WordPressのREST APIエンドポイントURLです。サイトURLに/wp-json/wp/v2/mediaを追加したものがエンドポイントです。
  • usernameapplication_password:WordPressのユーザー名と、先ほど生成したアプリケーションパスワードです。
  • media_file_path:アップロードしたい画像ファイルのパスです。必要に応じてパスを変更してください。
  • requests.post:指定したURLにPOSTリクエストを送信して、画像ファイルをアップロードします。

このコードを実行すると、指定した画像がWordPressにアップロードされ、そのURLが表示されます。

応用例:複数の画像を一度にアップロード

もし複数の画像を一度にアップロードしたい場合は、以下のようにリストを使って複数の画像を処理できます。

image_files = ['image1.jpg', 'image2.jpg', 'image3.jpg']

for file in image_files:
    with open(file, 'rb') as media_file:
        headers = {
            'Content-Disposition': f'attachment; filename="{file}"',
            'Content-Type': 'image/jpeg',
        }
        response = requests.post(
            wordpress_url,
            headers=headers,
            data=media_file,
            auth=HTTPBasicAuth(username, application_password)
        )
        if response.status_code == 201:
            media_data = response.json()
            print(f"{file} のアップロードに成功しました! URL: {media_data['source_url']}")
        else:
            print(f"{file} のアップロードに失敗しました。")

このコードでは、複数の画像を一度にリストにしてアップロードを繰り返すことができます。画像ファイルをリストで指定することで、必要なファイルを一気に処理できます。

エラーハンドリングとリトライ処理

アップロード時にエラーが発生した場合や、ネットワークの問題でリクエストが失敗することもあります。そのような場合に備えて、エラーハンドリングとリトライ処理を加えることができます。以下のコード例では、リトライ処理を加えて、失敗した場合に再試行を行います。

import time

def upload_file(file_path):
    with open(file_path, 'rb') as media_file:
        headers = {
            'Content-Disposition': f'attachment; filename="{file_path}"',
            'Content-Type': 'image/jpeg',
        }
        retries = 3
        for attempt in range(retries):
            response = requests.post(
                wordpress_url,
                headers=headers,
                data=media_file,
                auth=HTTPBasicAuth(username, application_password)
            )
            if response.status_code == 201:
                media_data = response.json()
                print(f"{file_path} のアップロードに成功しました! URL: {media_data['source_url']}")
                break
            else:
                print(f"アップロード失敗。リトライ中... (試行回数: {attempt + 1})")
                time.sleep(3)  # 3秒後に再試行

upload_file('image1.jpg')

このコードでは、リトライ回数を設定して、失敗した場合に再試行します。これにより、ネットワークの問題などで一時的に失敗した場合でも、安定してアップロードを続けることができます。

アップロード後のメタデータの利用

メディアファイルがアップロードされると、WordPressのメディアライブラリに保存されるとともに、さまざまなメタデータも生成されます。これらのメタデータ(例:画像のサイズ、タイトル、キャプションなど)を活用することで、さらに高度な処理を行うことができます。

以下は、アップロード後にメタデータを取得して表示する例です。

if response.status_code == 201:
    media_data = response.json()
    print(f"アップロードしたメディアのタイトル: {media_data['title']['rendered']}")
    print(f"画像のURL: {media_data['source_url']}")
    print(f"画像サイズ: {media_data['media_details']['width']}x{media_data['media_details']['height']}")
else:
    print("メディアのアップロードに失敗しました。")

このコードを使うことで、アップロードした画像の詳細な情報を取得できます。メディアファイルの管理や表示に役立つ情報が取得できるため、ブログのカスタマイズや管理がしやすくなります。

まとめ

Pythonを使ってWordPressにメディアをアップロードする方法は、非常に簡単で効率的です。REST APIを利用することで、画像や動画のアップロードが自動化でき、作業の効率化が図れます。さらに、応用例として複数の画像を一度にアップロードする方法や、エラーハンドリング、メタデータの活用方法についても解説しました。

これらの方法を活用して、あなたのWordPressサイトをより便利に管理していきましょう。

このサイトを稼働しているVPSはこちら

コメント

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