ワードプレスをコマンドラインのCURLで投稿する方法

こんにちは、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を指定するのだけど、標準カテゴリーで構わないなら丸々省略できるし、多分これら書く順番は別に問わないのでは無いだろうか?

"date": "2022-01-01T12:00:00",

などと追加すれば日付も指定して予約投稿のような事もできる。

現在日時を自動で取得して変数に入れる場合は…

datetime=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

このようにして日時を変数に入れ、curlを実行する時には,で区切ってタイトルや本文たちと一緒に

"date": "'"$datetime"'"

も入れてあげると良い。

それから既存の記事に追記するには以下のようにできる。

curl -X PUT -H "Content-Type: application/json" -d '{"content": "追加の更新内容"}' https://hogehoge.com/wp-json/wp/v2/posts/1

最後に指定したURLの末尾が記事IDで「curl -X PUT」なら書き足し・追記となり、「curl -X POST」なら既存の記事を上書きして刷新する事になる。

サムネイルの画像を設定するのは、予めアップロードしておいた画像のIDを控えておき、以下の要領で指定するっぽいが、まだ試してはいない。

"featured_media" => $media_id,

記事のIDを取得するには以下のようなコマンドもある。

curl -X GET 'https://example.com/wp-json/wp/v2/posts?per_page=100'

これで記事の日付の新しい方から100件を取得する。使用上100件以上は取得できない。100件以上前の記事ならURLの指定のところでカテゴリーとかページ数とか、使うって工夫するじゃないの?知らんけど。

逆に100件もいらない、10件で良いって場合は「per_page=100」は不要。

で!このコマンドを実行すると日本語環境だと日本語が全て文字コードに変換されて表示されるので、まったく読めないため、以下のようにする。

curl -X GET https://test.com/wp-json/wp/v2/posts? | jq '.[] | {id: .id, title: .title.rendered, content: .content.rendered}'

IDとタイトルしかいらないって場合には「, content: .content.rendered」は不要。

LinuxやUbuntuをこれから試してみたい!と言う人や、今までWindowsで使っていたPCをWindowsは残したままLinuxやUbuntuを活用してみたい人は以下の本がおすすめ!
https://amzn.to/3Vl1oNx

LinuxやUbuntuを使おうとして、初心者の人が最初に「?」となりやすいのがコマンドでしょう。使い方がわかればこれほど簡単で便利なものはありませんが、最初は戸惑うのが普通です。そんな初心者に向けてマンガで超わかりやすいコマンドについて学べるのはシス管系女子みんとちゃんの本!
https://amzn.to/3FMTx5v

シェアする

  • このエントリーをはてなブックマークに追加

フォローする