こんにちは、minoruです。
ワードプレスに記事を追加するのに、ブラウザを開いていちいちログインして投稿画面を開いて…と言うのは面倒なので、コマンドでパパっとできないか模索。
結果としてはUbuntu系OSの場合CURLでできる方法があった。昔は専用のAPIプラグインをインストールする必要があったようだが、今はその必要はない。
まずは準備としてワードプレスにログインし、メニューの一覧から…
ユーザー
↓
プロフィール
↓
新しいアプリケーションパスワードを追加
…と進んで行き、専用のパスワードを発行する。
この時に「新しいアプリケーションパスワード名」を入力するようになっているが、これは何の用途で発行したかを自分が管理しやすくするためのもので、ここに入力した名前を通常使う事はないので存在は忘れて構わない。
なので、覚えやすさよりもわかりやすい名前をつける方が良いだろう。「#1」みたいな名前より「田中さんが◯◯カテゴリを更新する時専用」みたいなね。
あとは投稿したい内容をCURLで送るだけで良い。例えば長文を書いたテキストファイルの内容を読み取って投稿する場合を紹介しよう。
wpt="$cookingのレシピ"
wpc=$(cat ~/デスクトップ/ファイル名 | tr -d '\n' | sed -e 's/"/\\"/g')
curl -X POST --user ユーザー名:パスワード -H "Content-Type: Application/json" -d '{"title":"'"${wpt}"'","content":"'"${wpc}"'","status":"publish","categories":[143]}' https://hogehoge.com/wp-json/wp/v2/posts
この場合のミソは変数に代入したファイルの内容から改行を全削除して、なおかつエラーが出ないようにダブルクォーテーションをエスケープしてやる必要があるってところ。
あとはCurlでデータを送る時に変数を使う場合にはシングルクォーテーションとダブルクォーテーションで囲うという手順が必要となる。categoriesは投稿するカテゴリーIDを指定するのだけど、標準カテゴリーで構わないなら丸々省略できるし、多分これら書く順番は別に問わないのでは無いだろうか?
などと追加すれば日付も指定して予約投稿のような事もできる。
現在日時を自動で取得して変数に入れる場合は…
このようにして日時を変数に入れ、curlを実行する時には,で区切ってタイトルや本文たちと一緒に
も入れてあげると良い。
それから既存の記事に追記するには以下のようにできる。
最後に指定したURLの末尾が記事IDで「curl -X PUT」なら書き足し・追記となり、「curl -X POST」なら既存の記事を上書きして刷新する事になる。
サムネイルの画像を設定するのは、予めアップロードしておいた画像のIDを控えておき、以下の要領で指定する。
記事のタイトルや本文の内容で検索してIDを取得するには以下のようなコマンドもある。
POST_ID=$(curl -s -H ユーザー名:APIのパスワード -H "Content-Type: application/json" -X GET "https://hogehoge.hoge/wp-json/wp/v2/posts?search=カクカクシカジカほげほげ" | jq -r '.[0].id')
# 記事のIDを使用して、記事を更新する
curl -X POST --user ユーザー名:APIのパスワード -H "Content-Type: Application/json" -d '{"date": "'"${datetime}"'","title":"'"${wpt}"'","content":"'"${wpc}"'","status":"publish"}' https://hogehoge.hoge/wp-json/wp/v2/posts/"$POST_ID"
curlの-sは進捗の表示をしないと言うオプションです。-Hはヘッダー情報付与のオプションです。-XはHTTPメソッドのオプションです。-dはデータの指定のオプションです。