0
0

gem Faradayを使ったWordPress記事の取得方法について

Last updated at Posted at 2024-07-01

はじめに

アプリ制作の過程で、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サイトから簡単に記事データを取得し、自分のアプリケーションで利用することができます。今後は、記事の更新や削除など、さらに高度な機能も実装していく予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0