Pythonを使ってWordPressに画像をアップロードする方法

ブログ

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に自動投稿する上では画像のアップロードも自動化する必要がありますが、その部分はここで紹介したコードで可能です。

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