WordPressにログインすることなく、画像ファイルを1クリックでまとめてアップロードするしくみをつくってみました。
Pythonを使ってのプログラミングです。
WordPressに画像をまとめてアップする流れ
ブログを書くときには、画像を使っています。
使っているのは、じぶんで撮った写真。
パソコンに取り込んだ画像をJPGファイルをWordPressにアップロードします。
何度かクリックして、この画面を開いてからまとめてアップロードするのではなく、ログインしていない状態でも任意の場所にあるJPEGファイルをまとめてWordPressにアップロードする。
これをPythonで自動でできるようにしました。
Alfredの検索画面で「i」と入力して、Enterを押すと、WordPressに画像がアップされます。
画像を選ぶ必要がなく、WordPressの管理画面にログインしていない状態でも、画像のアップロードができるのが今回のしくみです。
PythonでWordPressに画像をアップロードする流れ
何をおいても、Pythonをパソコンにインストールしないことにははじまりません。
まずは、Macならターミナル、Windowsならコマンドプロンプトという標準のアプリがあります。次のように入力してPythonがインストールされているかどうかを確認し、
1 |
python3 --version |
もし、インストールされていないようならインストールしましょう。(現状だと3.12.4)
Pythonインストール
https://www.python.org/downloads
そして、仮想環境(パソコンの環境とは別でPython用の環境)をつくっておきます。venv(ブイエンブ)というのがそうです。
1 2 |
python3 -m venv venv source venv/bin/activate |
あとは、今回のしくみをつくるのにライブラリを画像処理の「pillow」「request」というライブラリが必要になります。これもインストールします。
1 |
pip3 install pillow |
1 |
pip3 install requests |
そのうえで、Pythonのコードをテキストエディタ(メモ帳)などに書いていきます。ただ、コードはChatGPTに聞けば教えてくれます。
一応、わたしがChatGPTに教えてもらいながら、書いたコードを置いておきます。気になる方は開いてもらえれば。
今回書いたPythonコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import os import requests import base64 import urllib.parse # 画像ディレクトリ IMAGE_DIRECTORY = '/path/to/your/images' # 画像が保存されているディレクトリのパスを設定 # WordPressの設定 WORDPRESS_URL = "https://yourwordpresssite.com/wp-json/wp/v2/media" # あなたのWordPressサイトのメディアURL WORDPRESS_USERNAME = "your_username" # あなたのWordPressのユーザー名 WORDPRESS_PASSWORD = "your_password" # あなたのWordPressのアプリケーションパスワード def upload_image_to_wordpress(image_path): filename = os.path.basename(image_path) url_encoded_filename = urllib.parse.quote(filename) headers = { 'Content-Disposition': 'attachment; filename=' + url_encoded_filename, 'Authorization': 'Basic ' + base64.b64encode(f'{WORDPRESS_USERNAME}:{WORDPRESS_PASSWORD}'.encode()).decode() } # 画像のデータを読み込む with open(image_path, 'rb') as img: response = requests.post(WORDPRESS_URL, headers=headers, files={'file': img}) # HTTPリクエストを送信 if response.status_code == 201: print(f'Successfully uploaded {image_path}') else: print(f'Failed to upload {image_path}: {response.content}') def process_images_in_directory(directory): """ディレクトリ内のすべての画像ファイルをWordPressにアップロード""" for filename in os.listdir(directory): if filename.lower().endswith(('.jpg', '.jpeg')): image_path = os.path.join(directory, filename) upload_image_to_wordpress(image_path) # 実行 if __name__ == "__main__": process_images_in_directory(IMAGE_DIRECTORY) |
This is an example of a single quote: 'word'.
コードをテキストエディタに書いた後、保存しましょう。ここで大事なのは末尾を「.py」とすることです。「upload_image_to_wordpress.py」のように。
いったんはファイル名が「.py.txt」のように表示されるのですが、ファイル名の変更で「.py」にすれば大丈夫です。
ただ、このまま書いてもだめで、じぶんの環境にあわせていくつかを変更する必要があります。
それが、冒頭のところ。
1 2 3 4 5 6 7 8 9 10 11 |
# 画像ディレクトリ IMAGE_DIRECTORY = '/path/to/your/images' # 画像が保存されているディレクトリのパスを設定 # WordPressの設定 WORDPRESS_URL = "https://yourwordpresssite.com/wp-json/wp/v2/media" # あなたのWordPressのメディアURL WORDPRESS_USERNAME = "your_username" # あなたのWordPressのユーザー名 WORDPRESS_PASSWORD = "your_password" # あなたのWordPressのアプリケーションパスワード |
1つは画像の「IMAGE_DIRECTORY」。
JPEGファイルを置いてあるフォルダのパス(Macだとoptionキーを押しながらファイルを右クリックでわかる)を入力します。わたしの場合は、「’/Users/gouemura/Dropbox/0 inbox/’」です。
次にWordPressのURL。これは管理画面にログインするときのURLとは別のURLです。「https://yourwordpresssite.com」のところをご自身のサイトURLに変えていただければ、あとは同じです。
試しにアドレスをコピペして、ごちゃごちゃな文字がでてきたら大丈夫です。
「USERNAME」は、ログインするときのユーザー名で大丈夫です。
ただ、「PASSWORD」」は、ログインするときのパスワードではありません。「アプリケーションパスワード」という別のパスワードをつくる必要があるのです。
WordPressにログイン後、「ユーザー」→「プロフィール」と移動し、下の方にある「アプリケーションパスワード」で任意の名前を入れて保存すると、16桁のランダムな英数字がでてきます。これが「アプリケーションパスワード」として必要になります。
これでターミナル(コマンドプロンプト)で動くかどうかを試してみましょう。ファイル名は「upload_image_to_wordpress」としたので、以下のように入力すると、
1 2 |
python3 /path/to/your/images/upload_image_to_wordpress.py #'/path/to/your/images/'のところはPythonファイルの置いてあるパス |
WordPressのメディアにファイルがアップロードされています。
上手くいかなかったら、仮想環境を再度つくり直す、ライブラリをインストールし直すなど、ChatGPTに聞きながらちょっとずつ修正していただければ。
AutometerでPythonを動かす
これでPythonは動くのですが、よりシンプルに操作できるようにしたいもの。
Macの場合だと、Finderのアプリケーションにある「Automator」から、Pythonファイルを動かすことができます。
「Automator」を起動して、「アプリケーション」をクリックし、「選択」をクリック(訂正したい場合には左下の「既存の…」をクリック)し、
「シェルスクリプトを実行」を検索。
白い枠のところにPythonを動かすコマンドを入力しましょう。
わたしの場合は、こんなかんじですが、ご自身の環境にあわせて。
1 2 3 4 5 6 |
# Python仮想環境を有効にする source /Users/gouemura/Dropbox/myenv/bin/activate # WordPressに画像をアップロードするPythonスクリプトを実行する python3 /Users/gouemura/Dropbox/Python/upload_image_to_wordpress.py |
これもChatGPTに聞けばわかるかと。
で、わたしの場合には、Alfredを起動して、「i」と入力すると、Pythonファイルが表示され、Enterでアップロードがはじまるようになっています。
ターミナルで動かしても構いません。(ラクだからAlfredをつかっているだけです。)
ということで、ちょっとややこしいPythonですが、ChatGPTに聞きながらやればしくみもちょっとずつはわかってきます。
他にはニーズがないかもしれないけど、じぶんに必要なしくみをつくってみましょう。Pythonでどんなことができるかを知っておくと、どこにもないしくみをつくれるかもしれません。
【編集後記】
昨日はオフ。朝にプログラミング研究。その後、長男(9)と妻と3人でスーパーに行ってランチの食材を調達。その後はイベントホールへ。写真撮影も込みで楽しめました。夜は妻が買ってきてくれたサーティワンのアイスを家族みんなで食べました。わたしはカロリー少なめのガリガリ君のほうが好みですけど。まぁ、たまには付き合います。
【昨日の1日1新】
※「1日1新」→詳細はコチラ
サーティワン キャンディアップル
サントリー天然水 きりっと果実 ピンクグレープフルーツ&マスカット
「Automator」でPython起動