RubyとREST APIを使って、さくっとWordPressに記事をアップする方法

とりあえずコードはこれ

gem不足の場合は、gem installしてください。

※「アプリケーションパスワード」はコードあとに説明。

require 'rest-client'
require 'base64'
require 'json'

# 設定
wordpress_url = "https://自分のドメイン.com"
endpoint = "/wp-json/wp/v2/posts"
username = "WordPressのユーザー名"
password = "アプリケーションパスワード"
auth = "Basic #{Base64.strict_encode64("#{username}:#{password}")}"

# 投稿のデータ
post_data = {
'title' => "タイトル",
'content' => "本文",
'status' => 'draft' # or 'publish' など
}

# REST_API
response = RestClient::Request.execute(
method: :post,
url: "#{wordpress_url}#{endpoint}",
payload: post_data.to_json,
headers: {
:accept => :json,
:content_type => :json,
:authorization => auth
}
)

# ↓なくてもよい
puts response.body

アプリケーションパスワードの作り方

WordPressバージョン:6.3.2

手順

  1. WordPress画面管理>ユーザー>ユーザー一覧>ユーザークリック
  2. 「新しいアプリケーションパスワード名」に名前を決める。
    「名前」とはなにか?要するにいまから作成するアプリケーションパスワードの名称ということ。なので、なんでもいい。
  3. 新しいアプリケーションパスワードを追加をクリック。
  4. 表示されたアプリケーションパスワードをコピー

そういうことで、コード内のusernameとpasswordは…

  • usernameは普段WordPressの管理画面に入るユーザー名
  • passwordはいま作ったアプリケーションパスワード
    です。

私の使い方

投稿する内容をWindowsのメモ帳にマークダウンで書きます。記事のタイトルはそのメモ帳のファイル名。

そして、File.readとDir.glabを使って、コード内の「post_data」にtitleとcontentを変数で渡してます。

コードはこんな感じ。

# タイトル取得
txt_files = Dir.glob('*.txt')
title_name = txt_files[0].gsub(".txt", "") # タイトル
puts title_name

# 本文取得
content = File.read(txt_files[0]) # 本文
puts content

# 新しい投稿のデータ
post_data = {
'title' => title_name,
'content' => content,
'status' => 'draft' # or 'publish' など # 私は画像を公開前に好きなように埋め込みたいので下書き保存
}

このままだと同時並行で記事を作成しているときは複数のメモ帳を取得できないので、ファイル名にフラグを立てるか、プログラム内で、getsとifを使って投稿するものを選べるようにしたいかなという感じ。(後日談。ifは不要でした。getsだけでいけました。インデックスを任意の数字にすればいいだけですので。)

File.readの使い方はこちら。
https://network.okenigou.com/2023/09/25/122

Dir.glabの使い方はこちら。
https://okenigou.com/2023/10/22/1821

画像について

ちなみにWindowsだと、スクリーンショットして、ブロックエディターに貼り付けるだけ画像をアップできるので、毎回画像ファイルをパソコンから選ばなく済むので、このやり方は結構重宝している。

プログラム実行について

ruby script.rb
pause

と書いたバッチファイルを作っておくとダブルクリックするだけなので、とてもラク。

マークダウンがうまく反映されないときの対処法

こんな感じにテキストで表示されちゃうときあるよね?

そんなときはちょっとだけ手間だけど、以下の作業を。

  • テキスト全選択して、コピー。
  • コピーした後はエディター内の本文を全削除。
  • コピーした本文をメモ帳に貼り付けて、そのメモ帳に貼り付けた本文をまた全コピして、エディターにペースト。
  • するとマークダウンが反映されています。

慣れれば5秒かからないので、苦ではない。よって、直接マークダウンが反映される方法はいまは自分は調べる必要いいかな…。

スポンサーリンク
投稿記事
スポンサーリンク
OKE2GOU