アイキャッチ付きの記事を自動投稿するときに、メディアをWordPressにアップロードしておく必要があります。
記事が自動投稿なら、メディアも自動アップロードしたくなります。
WP REST API Handbook を見ましたが、これだけで実装できる人はいないような内容でした。
最も参考になったサイトは stackoverflow にありました。
How to upload images using wordpress REST api in python?
アップロードする画像を用意する
最終的にはアイキャッチ付きの記事を自動投稿したいので、アイキャッチ画像を用意しました。ファイル名は “eyecatch_auto_post_test_20210518.png” にしました。

画像の自動アップロードを実装する
WordPressに画像をアップロードするサンプルコードです。
アップロードした画像を扱うためには、アップロードした画像に配布されるIDが必要になります。下のハイライトした行のunique_idにそのIDを格納しています。
import requests
from urllib.parse import urljoin
import os
import json
def wp_upload_media():
url_base = 'https://kamiki.blog/'
url = urljoin(url_base, 'wp-json/wp/v2/media/')
user = 'xxx' # ユーザー名
password = 'xxx' # アプリケーションパスワードで発行したパスワード
filename = 'eyecatch_auto_post_test_20210518.png'
file_path = os.path.join(os.getcwd(), filename)
print(file_path)
f = open(file_path, 'rb')
image_data = f.read()
f.close()
headers = {
'Content-Type': 'image/png',
'Content-Disposition': 'attachment; filename=' + filename,
}
res = requests.post(
url,
data=image_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()
アプリケーションパスワードを使いますが、わからない方はこの記事をご覧ください。
実行後、メディアライブラリを見ると画像をアップロードができていることが確認できます。

