WordPressでの投稿を続けていると、前の記事をベースにリライトしたいとき、画像や中身の表現だけを少し変えて投稿したいなというときはございませんか?
私は毎週更新している [資産運用の週次報告] はその週の「本文の一部」「画像ファイル」「リンクURL」を差し替えて手動で更新しています。ある程度の型が決まっているため更新作業自体は30分ほどで終了できるのですが、今回その作業を自動化する方法をステップに分けて紹介して行きます。
本記事ではまずは「 Pythonを使ってWordpressに自動投稿 」するために使用するWP REST APIの準備とPythonコードを紹介します。
はじめに
WordPressで[資産運用の週次報告]のページのように実用的な自動投稿を実現するため本記事を含めて5つのステップに分けて解説していきます。
- PythonとWordPressを連携して記事の下書き投稿する (本記事)
- PythonでWordPressに画像を追加
- PythonでWordPressに複数の画像を一括で追加
- PythonとJinja2でWordPress投稿記事を編集 (本文・画像追加・ギャラリー)
- REST APIでHTML文とアイキャッチ画像を設定して投稿する
各ステップの流れを一つの流れに整理すると以下のフロー図で示すことができ、本記事で紹介する範囲は黄色ハイライトした箇所です。複数の記事にまたがるとどの内容を見ているかを見失ってしまいやすいので、適宜このフローチャートを確認してください。
◆ Mac OS
◆ Python 3
◆ JupyterLab
◆ WordPress ver. 5.8
WP REST API とは
WPはWordPressの略だということはわかりますが、「REST API」という意味のよくわからないサービスを使用することに抵抗感がある方も多いのではないでしょうか。聴き馴染みのない「REST API」という言葉について簡単に紹介します。
「REST API」とは?
「REST API (RESTful API)」 は、REST アーキテクチャスタイルの制約に従い、RESTful Web サービスとの対話を可能にするアプリケーション・プログラミング・インタフェース (API) です。この説明だけでもまだ内容が分からないので、「REST」と「API」の2つにわけて説明します。
「REST」とは
「REST」とは、複数のソフトウェアを連携させるのに適した設計原則の一つで、「Webシステムに適用したソフトウェアの設計様式」です。RESTは、パラメータを指定して特定のURLにHTTPでアクセスすると、XMLやJSONなどで記述されたメッセージを呼び出す、逆にXMLやJSONなどで記述したメッセージをHTTPでアクセスすることでウェブページを構築するシステムです。このような呼び出し規約(「RESTful API」と呼ばれる)のことを指します。
「API」とは
「API」とは、「Application Programming Interface」の頭文字で「アプリケーションをプログラミングするためのインターフェース」という意味です。
インターフェイスとは、コンピュータ用語でいうと、「何か」と「何か」をつなぐものという意味を持ち、APIとは「アプリケーション、ソフトウェア」と「プラグラム」をつなぐもの、という意味になります。つまり、異なるソフトウェアやサービス間で認証機能を共有したり、チャット機能を共有したり、片方から数値データを取り込み、別のプログラムでそのデータを解析したりできるようになります。
「WP REST API」とは?
「WP REST API」とは、通常であれば直接WordPressのサイト・アプリ上で記事の作成・投稿を行なっていたものをPythonなどWordPress外のシステムを用いてサイト情報の読み取り、投稿の追加などを「REST API」で行うWordPress用のプラグインが「WP REST API」です。
WordPress 4.7から標準実装になったためver.4.7以降であればすぐに使えます。
「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名と上の章で確認したアプリケーションパスワードを設定します。以下のコード中で”要変更”と書いてある項目をupdateしてください。
1 2 3 4 5 6 7 8 |
import requests import json import base64 # URL, User, Password設定 MY_URL: str = "要変更https://hoge-hoge.com" MY_USER: str = "要変更user" MY_APP_PASSWORD: str = "要変更abcd efgh ijkl mnop qrst uvwx" |
User名は「ユーザー」から確認することができます。
なお下記コードでは、9行目の’status’に’draft’を指定しているため投稿記事の下書きを作成するのみです。Pythonで実行した結果いきなり記事を公開してしまうわけではないので安心して動作確認を行なってください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
def wp_create_post() -> dict: credentials = MY_USER + ':' + MY_APP_PASSWORD token = base64.b64encode(credentials.encode()) headers = {'Authorization': 'Basic ' + token.decode('utf-8')} post = { 'title': 'Pythonで自動投稿 -確認-',#投稿記事タイトル 'status': 'draft',#ステータス 公開:publish, 下書き:draft 'content': 'テスト',#投稿記事本文 'categories': [140],#カテゴリーID 'tags': [202],#タグID 'slug': 'pre_test',#URLスラッグ } res = requests.post(f"{MY_URL}/wp-json/wp/v2/posts/", headers=headers, json=post) if res.ok: print("投稿の追加 成功 code:{res.status_code}") return json.loads(res.text) else: print(f"投稿の追加 失敗 code:{res.status_code} reason:{res.reason} msg:{res.text}") return {} |
「投稿」→「カテゴリー」中でカテゴリーIDを確認したいカテゴリーにカーソルを合わせるとページ下部のURLの「tag_ID=数字」の数字部分がIDです。
タグIDの確認方法
「投稿」→「カテゴリー」中でタグIDを確認したいタグにカーソルを合わせるとページ下部のURLの「tag_ID=数字」の数字部分がIDです。
Pythonを使ってWordPressに自動投稿 実行結果
それでは実際に上記のコードを実行してみましょう。関数として定義したコードを以下のように実行すると、投稿が無事に追加された場合には「投稿の追加 成功」とメッセージをPrintさせ、逆に失敗した場合には「投稿の追加 失敗」とエラー文が表示されます。
次のステップに向けて
今回は「 Pythonを使ってWordPressに自動投稿 」を実行するため、「WP REST API」の準備と「pythonのコード」を紹介しました。
この段階ではまだWordPressの自動投稿で実用的な段階ではありませんが、まず第一ステップとしてPythonとWordPressを繋げることができました。
WordPressで[資産運用の週次報告]のページのように実用的な自動投稿を実現するためのステップは以下の通りです。
- PythonとWordPressを連携して記事の下書き投稿する (本記事)
- PythonでWordPressに画像を追加
- PythonでWordPressに複数の画像を一括で追加
- PythonとJinja2でWordPress投稿記事を編集 (本文・画像追加・ギャラリー)
- REST APIでHTML文とアイキャッチ画像を設定して投稿する
次回は、「Pythonを使ってWordPressに画像を追加」する方法について紹介したいと思います。
コメント
[…] 以前「 Pythonを使ってWordpressに自動投稿 」を行うためにWP REST APIの準備とPythonコードを紹介しました。 […]
[…] 以前「 Pythonを使ってWordpressに自動投稿 」、「メディアファイルをWordpressに投稿」を行うためにWP REST APIの準備とPythonコードを紹介しました。 […]