はじめに
アプリ制作の過程で、APIを利用してWordPressの記事を取得し、RailsのDBに保存をする実装を行いました。
その際にgem Faraday
を使用したため、ここではその実装過程で得られた気づきをまとめます。
本記事の内容
gem Faraday
を使いWordPress記事を取得する方法について。
対象者
gem Faraday
を使ってWordPress記事を取得する方法を知りたい方。
REST APIを使った記事取得方法
WordPress REST APIを使用することで、簡単に記事一覧を取得できます。例えば、今回取得したいWordPressのURLの後ろに /wp-json/wp/v2/posts
をつけてアクセスするだけで、JSON形式で記事一覧が取得可能です。これを利用して、Rails側から記事一覧を取得する手順を説明します。
Faradayのセットアップ
まず、Gemfileに gem 'faraday' を追加し、bundle install します。次に、Faradayの接続設定を行います。
conn = Faraday.new(url: 'https://demo.wp-api.org') do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
記事一覧の取得
次に、GETリクエストで記事一覧を取得し、JSONをパースして記事情報を展開します。
下記のようにURLを取得し、Json形式で返ってくるものをparseし、取得したいプロパティを指定します。
ここまでが基本的な使い方になります。
response = conn.get '/wp-json/wp/v2/posts'
parsed_articles = JSON.parse(response.body)
parsed_articles.each do |article|
puts article['id']
puts article['title']
puts article['content']
end
では次にRailsのDBに保存する処理についてです。
Railsでテーブルの作成
取得してきたWordPressの記事情報を保存するためのテーブルを作成します。
rails generate migration CreateWpArticles
class CreateWpArticles < ActiveRecord::Migration[6.1]
def change
create_table :wp_articles do |t|
t.integer :wp_id
t.string :title
t.string :article_url
t.timestamps
end
end
end
最後に、マイグレーションを実行してテーブルを作成します。
rails db:migrate
これで、WpArticleテーブルが作成され、wp_id, id, title, article_urlのカラムが追加されます。
WpArticleFetcherクラスの作成
次に、WordPressの記事を取得して保存するためのWpArticleFetcherクラスを作成します。このクラスでは、Faradayを使用してAPIからデータを取得し、取得した記事をWpArticleテーブルに保存します。
以下がコードの全体像になります。
class WpArticleFetcher
def self.fetch_and_save
conn = Faraday.new(url: 'https://kiryu910.jp') do |faraday|
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
end
parsed_articles = JSON.parse(response.body)
parsed_articles.each do |article|
wp_article = WpArticle.find_or_initialize_by(wp_id: article['id'])
wp_article.title = article['title']['rendered']
wp_article.article_url = article['link']
wp_article.save!
end
end
end
コードの解説
Faradayのセットアップ
まず、Faradayを使用してWordPressのAPIに接続する設定を行います。以下のコードでは、接続設定とレスポンスのロギング、リクエストの形式を指定しています。
conn = Faraday.new(url: 'https://kiryu910.jp') do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
APIから記事データの取得
次に、GETリクエストを送信して記事データを取得します。
response = conn.get '/wp-json/wp/v2/posts'
parsed_articles = JSON.parse(response.body)
データの保存
取得した記事データをWpArticleテーブルに保存します。既に存在する記事は更新し、存在しない記事は新規作成します。
parsed_articles.each do |article|
wp_article = WpArticle.find_or_initialize_by(wp_id: article['id'])
wp_article.title = article['title']['rendered']
wp_article.article_url = article['link']
wp_article.save!
end
全体の流れ
やっていることとしてはかなりシンプルです。
まず、この部分でJson形式にparseをしています。
parsed_articles = JSON.parse(response.body)
このparseをしたものを次の行のeach文で回します。
each文の中で一つ一つの記事に対して行いたい処理をします。
parsed_articles.each do |article|
#この中で処理をする
end
以下が実際にテーブルに保存処理を行っている部分です。
wp_article = WpArticle.find_or_initialize_by(wp_id: article['id'])
wp_article.title = article['title']['rendered']
wp_article.article_url = article['link']
wp_article.save!
まとめ
Faraday
を使用してWordPressの記事を取得し、Railsのデータベースに保存する実装を行いました。この方法を使うことで、外部のWordPressサイトから簡単に記事データを取得し、自分のアプリケーションで利用することができます。今後は、記事の更新や削除など、さらに高度な機能も実装していく予定です。