Pythonを使ってWordPressに画像をupload する方法 [REST API]

Python
WordPressでの投稿を続けていると、前の記事をベースにリライトしたいとき、画像や中身の表現だけを少し変えて投稿したいなというときはございませんか?
私は毎週更新している [資産運用の週次報告] はその週の「本文の一部」「画像ファイル」「リンクURL」を差し替えて手動で更新しています。ある程度の型が決まっているため更新作業自体は30分ほどで終了できるのですが、今回その作業を自動化する方法をステップに分けて紹介して行きます。
以前「 Pythonを使ってWordpressに自動投稿 」を行うためにWP REST APIの準備とPythonコードを紹介しました。
Pythonを使ってWordPressに自動投稿 する方法
Wordpressでの投稿を続けていると、前の記事をベースにリライトしたいとき、画像や中身の表現だけを少し変えて投稿したいなというときはございませんか? 私は毎週更新している はその週の「本文の一部」「画像ファイル」「リンクURL」を差...

本記事では「 Pythonを使ってWordPressに画像をupload 」する方法をコード付きで紹介したいと思います。

はじめに

WordPressで[資産運用の週次報告]のページのように実用的な自動投稿を実現するため本記事を含めて5つのステップに分けて解説していきます。

  1. PythonとWordPressを連携して記事の下書き投稿する
  2. PythonでWordPressに画像を追加 (本記事)
  3. PythonでWordPressに複数の画像を一括で追加
  4. PythonとJinja2でWordPress投稿記事を編集 (本文・画像追加・ギャラリー)
  5. REST APIでHTML文とアイキャッチ画像を設定して投稿する

各ステップの流れを一つの流れに整理すると以下のフロー図で示すことができ、本記事で紹介する範囲は黄色ハイライトした箇所です。複数の記事にまたがるとどの内容を見ているかを見失ってしまいやすいので、適宜このフローチャートを確認してください。

環境設定
◆ Mac OS
◆ Python 3
◆ JupyterLab
◆ WordPress ver. 5.8

WP REST API とは

「WP REST API」とは、通常であれば直接WordPressのサイト・アプリ上で記事の作成・投稿を行なっていたものをPythonなどWordPress外のシステムを用いてサイト情報の読み取り、投稿の追加などを「REST API」で行うWordPress用のプラグインが「WP REST API」です。

WordPress 4.7から標準実装になったためver.4.7以降であればすぐに使えます。

最新のバージョン(4.7以降)ではデフォルトでREST APIが利用可能ですが、それ以前のバージョンを利用している場合は別途プラグイン「WordPress REST API (Version 2)」のインストールが必要です。

「WP REST API」が何か概要がわかったところで以下から実際に自動投稿を行うための準備とコードを紹介します。

アプリケーションパスワードを発行

WP REST API」を使用することで記事の投稿が出来ますが、外部から誰でも投稿が出来てしまうとセキュリティ上問題です。そのため、記事の投稿にはその都度「認証」が必要となります。
WP REST API」で今回は「アプリケーションパスワード」を発行することでセキュリティ対策を行います。

プラグインを使用しない方法

WordPressの画面左側のアイコン一覧から「ユーザー」→「プロフィール」を押したのちに、下へスクロールした箇所にある「アプリケーションパスワード」の項目があることを確認します。「新しいアプリケーションパスワード名」に任意の名前を入力し、新しいアプリケーションパスワードを追加ボタンを押すと20文字のパスワードが生成されます。

このパスワードは二度と表示できませんので、必ず最初に表示した際に安全な場所に保存してください

WordPressのVer.によっては上記の「アプリケーションパスワード」が表示されない場合もあるため、その際には以下の方法で対応ください。

プラグイン「Application Password」を使用する方法

プラグインとしてApplication PasswordをWordPressにインストールします。

WordPressの画面左側のアイコン一覧から「プラグイン」→「新規追加」を押したのちに、右上の検索バーに「Application Password」と入力して出てきた以下のプラグインをインストール・有効化をしてください。

「ユーザー」→「プロフィール」画面で「Application Passwords」の項目が存在することを確認して投稿者権限を有するユーザ名を入力後、「Add User」ボタンを押し生成されるパスワードを控えておきます。

Pythonでコードの準備

それではいよいよPythonで外部からWordPressの投稿ができるか確認して見ましょう。まず初めにブログのURL, User名と上の章で確認したアプリケーションパスワードを設定します。以下に示す関数の中の9~11行目のコード中で”要変更”と書いてある項目をupdateしてください。

 

User名の確認方法
User名は「ユーザー」から確認することができます。
user名の確認方法
次に以下のコードで[wp_upload_path_media()]というメディアファイルを自動でWordpressにuploadする関数を作成します。この関数の引数はuploadしたいメディアファイルの引数です。
前回紹介した「記事の自動投稿」と異なり今回の関数はメディアファイルのuploadのみですのでPythonで実行した結果いきなり記事を公開してしまうわけではないので安心して動作確認を行なってください

 

この関数では指定したfilepathの画像ファイルをWordpressの「メディア」にuploadし、そのuploadした画像の「ファイル名 filename」「パス名 file_path」「メディアID media_id」「メディアURL media_url」を取得します。
特に「メディアID media_id」「メディアURL media_url」はこの次に「画像入りの記事をREST APIで自動投稿する」際に必要です。
16行目 filenameをfilepathから取得
16行目のfilename = filepath[41:] # 数字はfilepathに応じて変更すること41は私の環境での数字でありフォルダ名や構成に応じて数字を変更する必要があります。ここではメディアファイルのuploadのために参照したパスfilepath の最後にファイル名が入ります(以下の例だとxxx.png)。ファイル名が始まるちょうどの文字数をカウントして設定します。
33~36行目 media_infoからmedia_id, media_urlを取得
「メディアID media_id」「メディアURL media_url」を取得するには33行目で作成したmedia_info中から情報を抜き出す必要があります。現在は34行目はコメントアウトされておりますが、このコメントを外してprint()で実行した結果が以下に示されております。このようにmedila_infoの中には様々な情報が入っていてここから必要な情報を取り出します。1つ目の“id"にはこのアップロードしたメディアファイルのID番号が示されております。
真ん中あたりにメディアURLの情報が"source_url"に示されています。

35, 36行目でこれらの情報を取り出しております。
media_id = media_info['id'] # アップロードした画像のID
media_url = media_info['source_url'] # アップロードした画像のURL

Pythonを使ってWordPressに画像をupload 実行結果

それでは実際に上記のコードを実行してみましょう。uploadするファイルはご自身で用意し以下のパス名は適宜変更してください。私は以下の「test.png」を用意しました。

実行

 

実行結果

関数として定義したコードを実行すると、投稿が無事に追加された場合には以下のlistが返され、「ファイル名 filename」「パス名 file_path」「メディアID media_id」「メディアURL media_url」が取得できました。

 

WordPressの「メディア」を確認するとちゃんとコードで指定したファイルがメディアファイルとしてuploadされたことが確認できます。

次のステップに向けて

今回は「 Pythonを使ってWordPressに画像をupload 」を実行するため、「WP REST API」の準備と「pythonのコード」を紹介しました。

この段階ではまだWordPressの自動投稿で実用的な段階ではありませんが、まず第一ステップとしてPythonとWordPressを繋げることができました。

WordPressで[資産運用の週次報告]のページのように実用的な自動投稿を実現するためのステップは以下の通りです。

  1. PythonとWordPressを連携して記事の下書き投稿する
  2. PythonでWordPressに画像を追加 (本記事)
  3. PythonでWordPressに複数の画像を一括で追加
  4. PythonとJinja2でWordPress投稿記事を編集 (本文・画像追加・ギャラリー)
  5. REST APIでHTML文とアイキャッチ画像を設定して投稿する

次回は、「Pythonを使ってWordPressに複数の画像を一括で追加」する方法について紹介したいと思います。

コメント

タイトルとURLをコピーしました