アイキャッチ付きの記事を自動投稿するときに、メディアを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()
アプリケーションパスワードを使いますが、わからない方はこの記事をご覧ください。
PythonでWordPressに記事を自動投稿する実行後、メディアライブラリを見ると画像をアップロードができていることが確認できます。