WordPressで画像の自動アップロードをしていると、同じファイル名の画像を何度もアップしてしまう可能性があります。
それを防ぐためにWordPressからメディアライブラリの情報を取得してみます。
REST API Handbook の “Media” の “List Media” の章を見ながら、実装していきます。
APIを使ってWordPressから情報を取得する
APIで情報を取得するだけならアプリケーションパスワードは必要ありません。URLさえあればできます。
メディアライブラリの情報を取得するコードです。
import requests from urllib.parse import urljoin def wp_get_media_list(): url_base = 'https://kamiki.blog/' url = urljoin(url_base, 'wp-json/wp/v2/media/') res = requests.get( url, ) print(res) media_list = res.json() return media_list if __name__ == '__main__': media_list = wp_get_media_list()
GET MEDIA の引数の “per_page : Maximum number of items to be returned in result set.” のデフォルト値が10なので、そのままだと10個のメディア情報を取得できます。
すでにWordPressに画像がアップされているか調べる方法
“image_auto_upload_test_20210520.png” というファイル名の画像がWordPressにアップロード済みか確認してみたいと思います。
上のコードのままでは、メディアライブラリ情報が10個しか取れないので、取得できる数を増やしたいです。
“per_page” の数値を単純に増やせばいいのでしょうか?
ここではHandbookに書かれている引数の “search” を使ってみたいと思います。
用途は、”search : Limit results to those matching a string.” で、”指定した文字列にマッチする結果のみに限定する。” です。
検索するファイル名の拡張子を除いた文字列 “image_auto_upload_test_20210520” をsearch引数に代入し、APIを実行します。
import requests from urllib.parse import urljoin import os def wp_get_media_list_search(search_word): url_base = 'https://kamiki.blog/' url = urljoin(url_base, 'wp-json/wp/v2/media/') params = { 'search': search_word, } res = requests.get( url, params=params, ) print(res) media_list = res.json() return media_list if __name__ == '__main__': filename = 'image_auto_upload_test_20210520.png' search_word, ext = os.path.splitext(filename) print(search_word) media_list = wp_get_media_list_search(search_word) for media in media_list: print(media['source_url'])
メディアライブラリのサーチ結果
上記コードを実行し、コンソール画面にレスポンス情報のsource_urlを表示させるとこうなりました。
https://kamiki.blog/wp-content/uploads/2021/05/image_auto_upload_test_20210520-1.png https://kamiki.blog/wp-content/uploads/2021/05/image_auto_upload_test_20210520.png
メディアライブラリに “image_auto_upload_test_20210520″ を含むメディアは 2個 あったことがわかります。これで、”image_auto_upload_test_20210520.png” をアップロードすべきか判断することができます。