API連携

WordPressのアプリケーションパスワードとREST APIで、スクリプトから下書きを作る

この記事には広告リンクが含まれる場合があります。リンク先の評価は、試した範囲の記録です。

この記事の目次
  1. アプリケーションパスワードでできること
  2. 準備するもの
  3. 手順
  4. アプリケーションパスワードを発行する
  5. 送信する下書きをファイルに用意する
  6. 送信先とユーザー名を指定する
  7. HTTPSで下書き作成を送信する
  8. 結果の確認方法
  9. 注意点

WordPressの下書きをスクリプトから作るには、アプリケーションパスワードで認証し、REST APIへ投稿内容を送ります。管理画面のログイン用パスワードをスクリプトに渡す必要はありません。

この記事では、自分が管理するWordPressに、公開せず下書きを作る手順を説明します。例はBashとcurlを使う対話実行用です。無人運転の仕組みや、画像のアップロードは扱いません。公式資料に基づく手順であり、このサイトでの実行結果や運営者の利用体験を示すものではありません。

アプリケーションパスワードでできること

アプリケーションパスワードは、WordPressのユーザーに紐づく、アプリや連携処理向けの認証情報です。用途ごとに発行でき、不要になったものだけを取り消せます。作成時に表示される値は、その場で安全に保管する必要があります。

REST APIでは、WordPressのユーザー名と発行したパスワードをHTTP Basic認証で送ります。Basic認証の符号化は暗号化ではないため、通信先はHTTPSに限定します。アプリケーションパスワードは管理画面へのログインには使えません。根拠はWordPress公式のApplication PasswordsとREST APIのAuthenticationです。

認証できることと、投稿を作成できることは別です。実行ユーザーには投稿の作成権限が必要です。今回の送信内容は下書きに限定しますが、認証情報そのものを「下書き作成専用」に制限する例ではありません。

準備するもの

  • 自分が操作してよいWordPressの検証用サイト。HTTPSが有効で、証明書の検証に成功することを確認してください。
  • そのサイトで投稿を作成できるWordPressユーザー。連携に必要な権限だけを持つユーザーを選び、管理者権限を前提にしないでください。
  • WordPressのユーザー名。表示名ではなく、ログインに使うユーザー名を使用します。
  • Bashとcurlを使える端末、およびUTF-8のテキストファイルを保存できるエディタ。
  • 発行した認証情報を保管する、アクセスを制限したパスワード管理ツール。

初回は本番サイトではなく検証用サイトで進めてください。下書きの作成もサーバーへの書き込みです。検証用サイトであっても、操作の許可が必要です。サーバーやプラグイン側でREST APIやアプリケーションパスワードが制限されている場合は、先に管理者へ確認します。

手順

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

  1. 使用するユーザーでWordPressの管理画面にログインし、プロフィール画面を開きます。
  2. 「アプリケーションパスワード」の欄で、用途を識別できる名前を入力します。例として「検証サイトの下書き作成」を使えます。
  3. 新しいアプリケーションパスワードを作成し、表示された値をパスワード管理ツールに保管します。値は再表示されません。

この欄が見つからない場合は、HTTPSとして認識されているか、機能が無効化されていないかを確認してください。使うためにHTTPSの条件を外す設定変更は行わないでください。公式のApplication Passwords: Integration Guideにも、機能の提供条件と個別の取り消し方法が記載されています。

送信する下書きをファイルに用意する

作業用フォルダを用意し、エディタで次の内容をUTF-8のdraft.jsonとして保存します。このファイルには認証情報を入れません。例ではタイトル、本文、抜粋を送信し、statusをdraftに固定しています。

{
  "title": "REST APIから作る確認用の下書き",
  "content": "<p>これは検証用の本文です。公開前に内容を確認します。</p>",
  "excerpt": "REST APIによる下書き作成の確認用です。",
  "status": "draft"
}

本文のHTMLはJSONの文字列として指定します。内容を編集するときは、文字列内の半角の二重引用符をバックスラッシュでエスケープしてください。JSONの構文を壊さないよう、JSONを検査できるエディタで確認してから送ります。

投稿作成の指定先はPOST /wp/v2/postsです。通常のREST APIルートが/wp-json/なら、送信先のURLはhttps://example.com/wp-json/wp/v2/postsになります。title、content、excerpt、statusの根拠はWordPress公式のPostsリファレンスで確認できます。

送信先とユーザー名を指定する

Bashを開き、draft.jsonのあるフォルダへ移動します。次のexample.comを、操作してよい検証用サイトの正しいURLに置き換えて実行してください。サブディレクトリ設置なら、そのパスも含め、末尾のスラッシュは付けません。サイトのREST APIルートが/wp-json/ではない場合、この例をそのまま使わず、管理者に正しいURLを確認します。

WP_SITE='https://example.com'

続いて、次の行を実行し、表示された案内にWordPressのユーザー名だけを入力します。ユーザー名にコロンがある場合は、このcurlの指定方法では扱えないため停止してください。

read -r -p 'WordPressのユーザー名: ' WP_USER

ここまでの変数にはパスワードを入れません。端末の操作記録や画面共有を停止してから、次の送信に進みます。

HTTPSで下書き作成を送信する

次のコマンドは、WordPressに新しい下書きを作成する書き込み操作です。送信先とdraft.jsonの内容を見直したうえで、一度だけ実行してください。

curl -q --proto '=https' --basic --user "$WP_USER" --header 'Content-Type: application/json' --data-binary @draft.json --write-out '\nHTTP %{http_code}\n' "$WP_SITE/wp-json/wp/v2/posts"

curlがパスワードを求めたら、先ほど発行したアプリケーションパスワードを対話入力します。管理画面のログイン用パスワードではありません。ユーザー名だけを–userに渡すことで、パスワードをコマンドやソースコードへ直接書かずに入力できます。この動作はcurl公式マニュアルの–userに記載されています。

先頭の-qはcurlの既定設定ファイルを読み込ませないための指定です。–protoでHTTPSに限定し、JSONファイルを–data-binaryで送ります。この例はリダイレクトの追従、自動再試行、証明書検証の無効化を指定していません。画面でコマンドが折り返されても、コード部分は一つのコマンドとして入力してください。

結果の確認方法

応答のHTTPステータスとJSONを確認します。作成された投稿のidを控え、statusがdraftであることを確認してください。続いて、同じ検証用サイトの管理画面で「投稿」の下書き一覧を開き、指定したタイトル・本文・抜粋を確認します。応答内容は実行するまで分からないため、この記事には成功結果の実例を載せていません。

エラーやHTMLのログイン画面が返った場合は、作成成功と判断しないでください。認証に失敗した場合は、ユーザー名とアプリケーションパスワード、HTTPS、Authorizationヘッダーがサーバーやプロキシで除去されていないかを確認します。認証できても権限が不足していれば、投稿作成は拒否されます。

証明書エラーが出た場合は送信を止め、証明書チェーン・有効期限・接続先のホスト名・端末の信頼済みCAを確認します。証明書検証を無効化して進めてはいけません。

通信が途中で切れたときは、サーバー側で作成だけが完了している可能性があります。コマンドを繰り返す前に、管理画面の下書き一覧で重複がないか確認してください。POSTによる作成を繰り返すと、別の投稿ができる可能性があります。確認できない場合は、再送せず管理者に確認します。

注意点

  • アプリケーションパスワードをソースコード、JSON、URL、リポジトリ、チャット、スクリーンショットへ書かないでください。Authorizationヘッダーを含む通信ログも共有しないでください。
  • 認証情報は連携先ごとに分け、不要になったものはプロフィール画面で取り消します。漏えいが疑われる場合は、その認証情報を取り消して再発行します。
  • この例は対話実行用です。無人実行へ変更するときは、秘密情報の保管・取得・権限制御・ログへの非出力を別途設計し、パスワードの直書きで済ませないでください。
  • draftは投稿状態の指定です。認証ユーザーが持つ別の権限まで取り消す指定ではなく、検証用サイトのプラグインが起こす別処理まで停止する保証もありません。
  • 下書きの公開は別の判断です。APIから作成できたことだけを理由に公開せず、本文・出典・リンク・表示を人が確認してください。

まずは許可された検証用サイトで、認証情報をコードに残さず、下書きとして作成し、管理画面で内容を確認するところまでに範囲を区切ります。本番へ広げる場合は、対象・件数・重複防止・失敗時の確認方法を決めてから進めてください。

TOY'S STYLE

普段はデザイン関連の業務をしているが、ChatGPTにも少し興味があるので色々試してみる場として、このサイトを作りました。 業務でデザインをしているため、このサイトではできる限りデザインはしません! 何も考えず遊び場としたいだけなので。 基本的にはAI関連で何ができるのか、実際の業務に役立つかどうかを前提に色々と作ってみたものをアップしていきたいと思っています。 後々どうなるかは不明ですが、初心としてはそんなゆるい感じです。 なので、このサイトにあるものはご利用は自由ですが、なんの責任も負いませんので自己責任にてご利用ください。

この人の記録

関連する記録

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA