Pythonを使用して、WordPressにメディアファイル(画像や動画など)をアップロードする方法について解説します。WordPressでは、REST APIを利用することで、手軽にメディアを管理できます。この記事では、Pythonを使ったメディアアップロードの設定方法からコード例まで詳しく説明します。
WordPress REST APIの準備
まず、WordPressにメディアをアップロードするためには、REST APIを使う準備が必要です。これには、認証情報をセットアップする必要があります。
アプリケーションパスワードの設定
- WordPressにログインします。
- 左側のメニューから「ユーザー」→「プロフィール」を選択します。
- プロフィールページの下部に「アプリケーションパスワード」が表示されているので、新しいパスワードを生成します。
- 生成されたパスワードは、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
を追加したものがエンドポイントです。username
とapplication_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サイトをより便利に管理していきましょう。
コメント