Python スクレイピング

【Python】ワードプレスのREST APIを使って画像アップロードを自動化する

この記事は約4分で読めます。

 

こんにちは、ミナピピン(@python_mllover)です

 

前回はワードプレスのRESTAPIでブログへの記事投稿を自動化しました。その際に画像のアップロードについては紹介していなかったので今回は画像のアップロード方法について紹介したいと思います。

 

前準備

 

ワードプレスのREST APIを使用するためにはプラグインの「Application password」を使用する必要があります。「Application password」の初期設定方法については以下の記事に書いているのでそちらを参考にしてください。

 

関連記事:【Python】WordPressのREST APIを使ってブログ記事を自動投稿する

 

スポンサーリンク
スポンサーリンク

WordPressのRestAPI経由で画像アップロードを自動化する

 

import requests
from urllib.parse import urljoin
import json
import base64

url_base = 'http://~~~~.com/'
url = urljoin(url_base, 'wp-json/wp/v2/media')
user = '<管理画面のユーザー名>'
password = 'xxxx xxxx xxxx xxxx' # アプリケーションパスワードで発行したパスワード

dir_ = "C:\\Users\\81903\\Desktop\\" # 画像が保存されているローカルのディレクトリ
def wp_upload_media(file_name):
    
    with open(f'{dir_}{file_name}', 'rb') as f:
        img_data = f.read()
    if file_name[-3:] == 'jpg':
        contenttype = 'image/jpg'
    elif file_name[-4:] == 'jpeg':
        contenttype = 'image/jpeg'
    elif file_name[-3:] == 'png':
        contenttype = 'image/png'
    else:
        contenttype = 'image/jpeg'
    headers = {
        'Content-Type': contenttype,
        'Content-Disposition': f'attachment; filename={file_name}',
    }

    res = requests.post(
        url,
        data=img_data,
        headers=headers,
        auth=(user, password),
        )
    res_dict = res.json()
    print(json.dumps(res_dict, indent=4))
    unique_id = res_dict['id'] # アップロードした画像のID
    return

if __name__ == '__main__':
    wp_upload_media('test.jpg')

 

ハマった点

 

ハマった点は 'Content-Disposition': f'attachment; filename={file_name}',の部分。attachment; filename=で指定するファイル名はローカルのファイル名と同じでないといけないみたいです。ここが違うと「api rest_upload_sideload_error」が発生します。

 

参考:https://kamiki.blog/wordpress-auto-upload-media-in-python/

 

 

 

コメント

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