すでにWordPressへアップロードした画像を調べる

GET API を使う

自分の WordPress の状態を GET してみたいと思います。画像の自動アップロードとかしていると、同じファイル名の画像を何度もアップしてしまう可能性があります。それを防ぐために、WordPress からメディアライブラリの情報を取得してみます。

REST API Handbook の "Media" の "List Media" の章を見ながら、実装していきます。
REST API Handbook Media

API で GET してみる

GET するには、アプリケーションパスワードは必要ありません。URL さえあればできます。

wp_get.py


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個 のメディア情報が取得できます。これが基本で、ここからやりたいことにカスタマイズしていきます。

すでに画像がアップされているか?

では、ここで "image_auto_upload_test_20210520.png" というファイル名の画像を自動アップロードしようとします。しかし、このファイルは、すでに前の記事でメディアライブラリへアップロード済みです。なので、すでにこの画像がアップ済みかを確認してみたいと思います。

上のコードのままでは、メディアライブラリ情報が 10個 しか取れないので、10個以内に存在しなければ、アップ済みと判断できません。"per_page" の数値を単純に増やせばいいのでしょうか?

ここでは、Handbook に書かれている引数の "search" を使ってみたいと思います。引数の意味は、"search : Limit results to those matching a string." で、"指定した文字列にマッチする結果のみに限定する。" です。

REST API Handbook Media List Media Arguments

検索するファイル名の拡張子を除いた文字列 "image_auto_upload_test_20210520" を search 引数に代入し、GET API を実行します。

wp_get_media_list_search.py

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'])

メディアライブラリのサーチ結果

上のコードを実行し、コンソール画面に GET API の response 情報の '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" をアップロードすべきか判断することができます。