こんにちは、ミナピピン(@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/
コメント
[…] 関連記事:【Python】ワードプレスのREST APIを使って画像アップロードを自動化する […]
[…] 関連記事:【Python】ワードプレスのREST APIを使って画像アップロードを自動化する […]
[…] 関連記事:【Python】ワードプレスのREST APIを使って画像アップロードを自動化する […]