【Ruby on rails6】楽天APIを導入して、商品検索をする

【Ruby on rails6】楽天APIを導入して、商品検索をする

今回は楽天apiを使用して、本を検索し、その本の商品情報を表示させていきます。

1.アプリケーションIDの取得

楽天apiを使用するためには下記のサイトからアプリケーションIDを発行する必要があるので、発行します。

楽天ウェブサービス(WEB SERVICE)は、WEBアプリケーションを構築するデベロッパー向けのサイトです。楽天グループのデータや機能を開発者様、企業の皆様に…
webservice.rakuten.co.jp

2.gemのインストール

gem 'rakuten_web_service'
gem 'dotenv-rails'

3.envファイルの編集

.envファイルに先ほど入手したアプリケーションidを記述します。

RAKUTEN_API_KEY = "***************"

記述ができたらrails cで確認をします。

rails c
ENV['RAKUTEN_API_KEY']

4.アプリケーションIDの設定

config/initializersの下にrakuten.rbファイルを作成し、下記を記述します。

RakutenWebService.configure do |c|

  c.application_id = ENV['RAKUTEN_API_KEY']

end

5.viewの作成

①routesの追加

get 'books/search'

②ヘッダーにリンクの追加

<li><%=  link_to "本を検索",books_search_path,class: 'nav-link text-light' %></li>

③コントローラの編集

def search
    if params[:keyword]
      @books = RakutenWebService::Books::Book.search(title: params[:keyword])
    end
  end

@booksには今回は本に絞った検索なので、RakutenWebService::Books::Bookを使用しています。

④検索フォームの作成

<div class="search-box">
  <%= form_with url: books_search_path, method: :get do |f| %>
    <div class="form-group">
      <%= f.text_field :keyword, class: "form-control" %>
      <%= f.submit "本の題名を検索", class: "form-control" %>
    </div>
  <% end %>
  <% if @books.present? %>
    <%= render "books/book", books: @books %>
  <% else %>
    検索結果は見つかりませんでした
  <% end %>
</div>

⑤検索結果の部分テンプレートの作成

<table class='table table-hover table-inverse'>
  <thead>
    <tr>
      <th>タイトル</th>
      <th>著者</th>
      <th>概要</th>
      <th></th>
      <th colspan="4"></th>
    </tr>
  </thead>
  <tbody>
    <% books.each do |book| %>
      <tr>
        <td><%= book.title %></td>
        <td><%= book.author %></td>
        <td><%= book.item_caption %></td>
        <td><%= link_to (image_tag(book.medium_image_url)), book.item_url %></td>
      </tr>
    <% end %>
  </tbody>
</table>

ここまでで完成なので、動きを見てみます。

おわり

今回は楽天apiを使って本を検索するということをやってみました。意外と楽天apiの導入が簡単で直感的にできたのでよかったです。amazonのapiとかだと審査があるそうなので、そちらは少しめんどくさそうですね。それでは今回はこの辺で!また別の記事でお会いしましょう!

カテゴリー

naska