Pythonでブログに画像ファイル(JPG)をアップロードする流れ。

  • URLをコピーしました!

WordPressにログインすることなく、画像ファイルを1クリックでまとめてアップロードするしくみをつくってみました。

Pythonを使ってのプログラミングです。

目次

WordPressに画像をまとめてアップする流れ

ブログを書くときには、画像を使っています。
使っているのは、じぶんで撮った写真。

パソコンに取り込んだ画像をJPGファイルをWordPressにアップロードします。

何度かクリックして、この画面を開いてからまとめてアップロードするのではなく、ログインしていない状態でも任意の場所にあるJPEGファイルをまとめてWordPressにアップロードする。

これをPythonで自動でできるようにしました。

inboxというフォルダにあるJPGファイルはすべてWordPressで利用するという前提です。

Screenshot

Alfredの検索画面で「i」と入力して、Enterを押すと、WordPressに画像がアップされます。

Screenshot

画像を選ぶ必要がなく、WordPressの管理画面にログインしていない状態でも、画像のアップロードができるのが今回のしくみです。

PythonでWordPressに画像をアップロードする流れ

何をおいても、Pythonをパソコンにインストールしないことにははじまりません。

まずは、Macならターミナル、Windowsならコマンドプロンプトという標準のアプリがあります。次のように入力してPythonがインストールされているかどうかを確認し、

python3 --version

もし、インストールされていないようならインストールしましょう。(現状だと3.12.4)

Pythonインストール
https://www.python.org/downloads

そして、仮想環境(パソコンの環境とは別でPython用の環境)をつくっておきます。venv(ブイエンブ)というのがそうです。

python3 -m venv venv
source venv/bin/activate

あとは、今回のしくみをつくるのにライブラリを画像処理の「pillow」「request」というライブラリが必要になります。これもインストールします。

pip3 install pillow
pip3 install requests

そのうえで、Pythonのコードをテキストエディタ(メモ帳)などに書いていきます。ただ、コードはChatGPTに聞けば教えてくれます。

一応、わたしがChatGPTに教えてもらいながら、書いたコードを置いておきます。気になる方は開いてもらえれば。

今回書いたPythonコード
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」にすれば大丈夫です。

ただ、このまま書いてもだめで、じぶんの環境にあわせていくつかを変更する必要があります。

それが、冒頭のところ。

# 画像ディレクトリ
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に変えていただければ、あとは同じです。

試しにアドレスをコピペして、ごちゃごちゃな文字がでてきたら大丈夫です。

Screenshot

「USERNAME」は、ログインするときのユーザー名で大丈夫です。
ただ、「PASSWORD」」は、ログインするときのパスワードではありません。「アプリケーションパスワード」という別のパスワードをつくる必要があるのです。

WordPressにログイン後、「ユーザー」→「プロフィール」と移動し、下の方にある「アプリケーションパスワード」で任意の名前を入れて保存すると、16桁のランダムな英数字がでてきます。これが「アプリケーションパスワード」として必要になります。

これでターミナル(コマンドプロンプト)で動くかどうかを試してみましょう。ファイル名は「upload_image_to_wordpress」としたので、以下のように入力すると、

python3 /path/to/your/images/upload_image_to_wordpress.py 
#'/path/to/your/images/'のところはPythonファイルの置いてあるパス

WordPressのメディアにファイルがアップロードされています。

Screenshot

上手くいかなかったら、仮想環境を再度つくり直す、ライブラリをインストールし直すなど、ChatGPTに聞きながらちょっとずつ修正していただければ。

AutometerでPythonを動かす

これでPythonは動くのですが、よりシンプルに操作できるようにしたいもの。

Macの場合だと、Finderのアプリケーションにある「Automator」から、Pythonファイルを動かすことができます。

「Automator」を起動して、「アプリケーション」をクリックし、「選択」をクリック(訂正したい場合には左下の「既存の…」をクリック)し、

Screenshot

「シェルスクリプトを実行」を検索。

白い枠のところにPythonを動かすコマンドを入力しましょう。

Screenshot

わたしの場合は、こんなかんじですが、ご自身の環境にあわせて。

# 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をつかっているだけです。)

Screenshot

ということで、ちょっとややこしいPythonですが、ChatGPTに聞きながらやればしくみもちょっとずつはわかってきます。

他にはニーズがないかもしれないけど、じぶんに必要なしくみをつくってみましょう。Pythonでどんなことができるかを知っておくと、どこにもないしくみをつくれるかもしれません。


【編集後記】
昨日はオフ。朝にプログラミング研究。その後、長男(9)と妻と3人でスーパーに行ってランチの食材を調達。その後はイベントホールへ。写真撮影も込みで楽しめました。夜は妻が買ってきてくれたサーティワンのアイスを家族みんなで食べました。わたしはカロリー少なめのガリガリ君のほうが好みですけど。まぁ、たまには付き合います。

【昨日の1日1新】
※「1日1新」→詳細はコチラ
サーティワン キャンディアップル
サントリー天然水 きりっと果実 ピンクグレープフルーツ&マスカット
「Automator」でPython起動


この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次