目次
前提
以下の環境で実装/動作確認済み
要素 | バージョン |
---|---|
ruby | 2.3.1 |
gem | 2.6.12 |
bundle | 1.15.1 |
rubypress | 1.2.2 |
概要
- Rubyを用いて外部のWordPressの記事一覧、詳細を取得する
- 対象WordPressの有効なアカウント情報が必要
- 記事の投稿、編集など基本的な全ての処理が可能だが、本記事では取得までに抑える
XML-RPCの有効化
本記事ではWordPressのXML-RPC機能を用いて外部から操作を行う。ただしこの機能はセキュリティの観点から無効になっている場合が多い。その場合はwp_config.phpの以下の行をコメントアウトすることで有効化出来る。サーバに入れない環境の場合は諦めるしか無い。
add_filter('xmlrpc_enabled', '__return_false');
rubypressの導入
RubyでXML-RPCを用いてWordPressを操作する時に最も手軽に利用できそうなgemライブラリであるrubypressを導入する。ここでは空のGemfileを作成するところから始める
source "https://rubygems.org" gem "rubypress"
ディレクトリ内にインストール
$ bundle install --path vendor/bundle
WordPressクライアントオブジェクトの作成
Rubypressを用いてClientオブジェクトを作成する。ここでは対象WordPressのホスト名、ユーザ名、パスワードが必要になる。
require 'rubypress' class WordPress @@hostname = 'qs.nndo.jp' @@username = 'sasaki' @@password = 'XXXXXXXXXXXXXXXX' def initialize @wp_client = Rubypress::Client.new( host: @@hostname, path: '/xmlrpc.php', username: @@username, password: @@password, ) end end
記事を取得する主なメソッドの使い方
post_idを指定して取得
@wp_client.getPost(post_id: 13)
出力。長いので一部のみ掲示
{"post_id"=>"13", "post_title"=>"サンプル記事3", "post_date"=> "post_status"=>"publish", "post_content"=>"サンプル記事3本文", "post_parent"=>"0", "post_mime_type"=>"", "post_format"=>"standard", "terms"=>[], "custom_fields"=>[]}
一部のフィールドのみ取得
タイトルと本文さえあれば良いという場合は以下のように
@wp_client.getPost(post_id: 13, fields: [:post_title, :post_content])
{"post_id"=>"13", "post_title"=>"サンプル記事3", "post_content"=>"サンプル記事3"}
全ての記事一覧を取得
出力が長くなってしまうので、タイトルのみ取り出すようにする
@wp_client.getPosts(fields: [:post_title])
[{"post_id"=>"18", "post_title"=>"サンプル記事1"}, {"post_id"=>"20", "post_title"=>"サンプル記事2"}, {"post_id"=>"22", "post_title"=>"サンプル記事3"}]
カスタム投稿タイプを指定して記事一覧を取得
例えば”news”というカスタム投稿タイプがあるとして、newsの一覧を取得する
@wp_client.getPosts(filter: {post_type: :news}, fields: [:post_title])
[{"post_id"=>"8", "post_title"=>"サンプルニュース1"}, {"post_id"=>"10", "post_title"=>"サンプルニュース2"}]