Pythonを使ってWordPressに画像をアップロードする方法について解説します。ここでは、Pythonのライブラリ「python-wordpress-xmlrpc」を使って画像のアップロードとメディア情報の取得を行う方法を紹介します。
必要なライブラリのインストール
まず、必要なライブラリをインストールします。python-wordpress-xmlrpc
ライブラリを使用します。以下のコマンドを実行してインストールしてください。
pip install python-wordpress-xmlrpc
画像アップロード関数の実装
次に、画像をアップロードする関数を実装します。この関数では、指定した画像をWordPressにアップロードし、そのメディアIDを返します。
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.media import UploadFile
from wordpress_xmlrpc.methods.posts import GetMediaItem
import os
def wp_upload_image(wp, img_path, out_img_name=None, overwrite=True):
if out_img_name is None:
out_img_name = os.path.basename(img_path)
if os.path.exists(img_path):
with open(img_path, 'rb') as f:
binary = f.read()
data = {
"name": out_img_name,
"type": 'image/png', # 画像のMIMEタイプ,
"overwrite": overwrite,
"bits": binary
}
response = wp.call(UploadFile(data))
media_id = response['id']
print(f"{out_img_name} のアップロードに成功しました。ID: {media_id}")
return media_id
else:
print(f"{out_img_name} が見つかりません")
return None
この関数では、以下の手順で画像をアップロードします。
1. 画像のパスを受け取り、ファイル名を設定します。
2. 画像ファイルが存在する場合、その内容をバイナリ形式で読み込みます。
3. 画像の名前、タイプ、バイナリデータを含む辞書を作成し、WordPressにアップロードします。
4. アップロードのレスポンスからメディアIDを取得し、成功メッセージとともに返します。
アップロードしたメディア情報の取得
次に、アップロードした画像のメディア情報を取得する関数を実装します。
def get_media_data(wp, media_id):
response = wp.call(GetMediaItem(media_id))
metadata = response.metadata
return metadata
この関数では、メディアIDを使用してWordPressからメディア情報を取得し、そのメタデータを返します。
実際の使用例
以下は、上記の関数を使った実際の使用例です。
# WordPressサイトの情報
wp_url = 'http://your-wordpress-site.com/xmlrpc.php'
wp_username = 'your-username'
wp_password = 'your-password'
# クライアントの作成
wp = Client(wp_url, wp_username, wp_password)
# 画像のパス
image_path = 'path/to/your/image.png'
# 画像をアップロードし、メディアIDを取得
media_id = wp_upload_image(wp, image_path)
# メディア情報を取得
if media_id:
media_data = get_media_data(wp, media_id)
print(media_data)
指定した画像をWordPressにアップロードし、そのメディア情報を取得することができます。
media_dataは例えば以下のようになります。
{'width': 791,
'height': 516,
'file': 'img.png',
'filesize': 56128,
'sizes': {'medium': {'file': 'img-500x326.png',
'width': 500,
'height': 326,
'mime-type': 'image/png',
'filesize': 48782},
'thumbnail': {'file': 'img-300x196.png',
'width': 300,
'height': 196,
'mime-type': 'image/png',
'filesize': 24047},
'medium_large': {'file': 'img-768x501.png',
'width': 768,
'height': 501,
'mime-type': 'image/png',
'filesize': 84065},
'thumb150': {'file': 'img-150x150.png',
'width': 150,
'height': 150,
'mime-type': 'image/png',
'filesize': 10385},
'thumb120': {'file': 'img-120x68.png',
'width': 120,
'height': 68,
'mime-type': 'image/png',
'filesize': 5732},
'thumb160': {'file': 'img-160x90.png',
'width': 160,
'height': 90,
'mime-type': 'image/png',
'filesize': 8796},
'thumb320': {'file': 'img-320x180.png',
'width': 320,
'height': 180,
'mime-type': 'image/png',
'filesize': 26183}},
'image_meta': {'aperture': '0',
'credit': '',
'camera': '',
'caption': '',
'created_timestamp': '0',
'copyright': '',
'focal_length': '0',
'iso': '0',
'shutter_speed': '0',
'title': '',
'orientation': '0',
'keywords': []}}
'sizes'
の中に、リサイズされた画像の一覧が含まれます。
まとめ
この方法を使用することで、PythonからWordPressに画像を簡単にアップロードし、必要なメディア情報を取得することができます。WordPressに自動投稿する上では画像のアップロードも自動化する必要がありますが、その部分はここで紹介したコードで可能です。