MENU

[Python] WordPress REST APIを通じて画像を投稿し記事のアイキャッチ画像に設定する

以下は、Pythonを使用してWordPress REST APIを通じてアイキャッチ画像を投稿に設定する関数のスニペットです。このコードでは、requestsライブラリを使用してAPIにアクセスし、画像をアップロードし、投稿にアイキャッチ画像を設定します。

目次

手順

  1. APIトークンの取得
    WordPress REST APIを使用するためには、Basic認証が必要です。アプリケーションパスワードとユーザー名を使って認証を行います。
  2. 画像のアップロード
    まず、/wp-json/wp/v2/mediaエンドポイントにPOSTリクエストを送信して、画像をアップロードします。
  3. アイキャッチ画像の設定
    アップロードされた画像のIDを取得し、それを使って投稿にアイキャッチ画像を設定します。

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

pip install requests

コードスニペット

import requests
import base64
import json

# WordPressの認証情報
username = 'your-username'
application_password = 'your-application-password'

# WordPressのベースURL
base_url = 'https://example.com/wp-json/wp/v2'

# 認証ヘッダーの作成
auth = f'{username}:{application_password}'
auth_encoded = base64.b64encode(auth.encode()).decode('utf-8')
headers = {
    'Authorization': f'Basic {auth_encoded}',
    'Content-Type': 'application/json',
}

# 画像ファイルをアップロードする関数
def upload_image(image_path):
    upload_url = f'{base_url}/media'

    # 画像データの読み込み
    with open(image_path, 'rb') as img_file:
        image_data = img_file.read()

    # ファイルアップロード用ヘッダーの設定
    headers_image = headers.copy()
    headers_image['Content-Disposition'] = f'attachment; filename="{image_path.split("/")[-1]}"'

    # APIリクエスト (POST) で画像をアップロード
    response = requests.post(upload_url, headers=headers_image, data=image_data)

    if response.status_code == 201:
        media_info = response.json()
        media_id = media_info['id']
        print(f"画像がアップロードされました。Media ID: {media_id}")
        return media_id
    else:
        print(f"画像のアップロードに失敗しました。Status Code: {response.status_code}")
        print(response.text)
        return None

# 投稿にアイキャッチ画像を設定する関数
def set_featured_image(post_id, media_id):
    update_post_url = f'{base_url}/posts/{post_id}'

    post_data = {
        'featured_media': media_id
    }

    # APIリクエスト (POST) で投稿を更新
    response = requests.post(update_post_url, headers=headers, data=json.dumps(post_data))

    if response.status_code == 200:
        print(f"投稿ID: {post_id} にアイキャッチ画像が設定されました。")
    else:
        print(f"アイキャッチ画像の設定に失敗しました。Status Code: {response.status_code}")
        print(response.text)

# メイン処理
if __name__ == '__main__':
    image_path = '/path/to/your/image.jpg'  # アップロードする画像のパス
    post_id = 123  # アイキャッチ画像を設定する投稿のID

    # 画像をアップロードし、メディアIDを取得
    media_id = upload_image(image_path)

    if media_id:
        # 投稿にアイキャッチ画像を設定
        set_featured_image(post_id, media_id)

説明

  1. upload_image(image_path) 関数:
    この関数では、指定した画像ファイルをWordPress REST APIの/mediaエンドポイントにアップロードします。正常にアップロードされた場合は、レスポンスからmedia_id(メディアID)を取得して返します。
  2. set_featured_image(post_id, media_id) 関数:
    こちらの関数では、投稿IDと取得したメディアIDを使って、指定した投稿にアイキャッチ画像を設定します。/posts/{post_id} エンドポイントを使用して投稿を更新し、featured_mediaフィールドに画像のIDを渡します。

注意点

  • application_passwordを使って認証を行うため、セキュリティには十分注意してください。
  • 画像サイズや投稿の制限に関するWordPressの設定が影響する場合があるため、エラーが発生した場合はWordPressのメディア設定を確認してください。

このようにして、Pythonを使ってWordPressの投稿にプログラムでアイキャッチ画像を設定する方法が実現できます。

目次