LoginSignup
1
3

More than 3 years have passed since last update.

[Rails] 楽天検索APIを使用する

Last updated at Posted at 2021-02-14

はじめに

今回楽天のAPIを使用してページ取得などをしてみたので

こちらも記述していきます。

githubも日本語版があってありがたや。:relaxed:

開発環境

macOS Big Sur 11.2.1

Ruby 2.6.5

Rails 6.1.1

実装

まずはGemをインストールします。

Gemfile

gem 'rakuten_web_service'

「bundle」でインストールをしていきます。


bundle


アプリケーションIDが必要なのでアプリケーションの登録をします。↓

RakutenDevelopers

登録するとIDが取得できます:zap:

config

「config」の「initializers」に記述します。

config/initializers/goods.rb

RakutenWebService.configure do |c|
  c.application_id = 'アプリケーションID'  # (必須)
  c.affiliate_id = 'アフィリエイトID'      # (任意)
  c.max_retries = 3         # リクエストのリトライ回数(任意)
  c.debug = true            # デバッグモード (任意)
end

IDは公開しないように注意です。

routes

routes.rb

Rails.application.routes.draw do

       # (他は省略しています)
  get 'rakuten_search' => 'goods#search'
end

controller

「params」で「keyword」を受け取るようにします。

goods_controller

class GoodsController < ApplicationController
  def search
    if params[:keyword]
      @goods = RakutenWebService::Ichiba::Item.search(keyword: params[:keyword])
    end
  end
end

view

viewを記述していきます。

goods/search.html.erb

   <!-- 検索をしたいものを入力する部分 -->
<div class='goods-content'>
    <div class="search-box">
      <%= form_with url: rakuten_search_path, method: :get do |f| %>
        <%= f.text_field :keyword %>
        <%= f.submit '検索' %>
      <% end %>
        </div>
    </div>

    <!-- 表示する部分 -->
    <div class="goods-search-main">
      <div class="goods-search-box">
        <ul>
          <% if @goods.present? %>  <!-- (10)は商品を出力する個数 -->
            <% @goods.first(10).each do |item| %>
              <div class="goods-list">
                <div class="goods-img">
                  <li><img src="<%= item['mediumImageUrls'][0] %>"></li>
                </div>
                <div class="goods-list-right">
                  <div class="goods-name">
                    <li><a href="<%= item['itemUrl'] %>" target="_blank"><%= item['itemName'] %></a></li>
                  </div>
                  <div class="goods-price">
                    <li><%= item['itemPrice'] %></li>
                  </div>
                </div>
              </div>
            <% end %>
          <% end %>
        </ul>
      </div>
    </div>
  </div>

そうするとこのように情報を取得することができます。

Image from Gyazo

商品表示

表示のみバージョンも、Githubを見本にして記述していきました。

controller変更

goods_controller

class GoodsController < ApplicationController
  def search
      @goods = RakutenWebService::Ichiba::Item.search(keyword:  'Ruby')
  end                                                  # ↑こことか変更
end

お手本通りにrubyを入れてみます。

viewを変更

ここはとりあえず消すだけ。

goods/search.html.erb

   <!--検索する部分を削除-->

     <!-- 表示する部分だけを残す -->

<div class="goods-search-main">
      <div class="goods-search-box">
        <ul>
          <% if @goods.present? %>
            <% @goods.first(10).each do |item| %>
              <div class="goods-list">
                <div class="goods-img">
                  <li><img src="<%= item['mediumImageUrls'][0] %>"></li>
                </div>
                <div class="goods-list-right">
                  <div class="goods-name">
                    <li><a href="<%= item['itemUrl'] %>" target="_blank"><%= item['itemName'] %></a></li>
                  </div>
                  <div class="goods-price">
                    <li><%= item['itemPrice'] %></li>
                  </div>
                </div>
              </div>
            <% end %>
          <% end %>
        </ul>
      </div>
    </div>
  </div>

そうすると、

表示されました!!

スクリーンショット 2021-02-14 17.15.40.png

バンザーイ。

これでランキングを表示したり、レシピを見たりなどが可能になります!!

パラメーターも変えると、色々なものを出力することができます。

CSSなど装飾はお好みで・・・

さいごに

検索機能を実装中にeachメソッドのところに「if文」を入れていなく、「NoMethodError」になって少し時間がかかりました、が・・!!

パラメーターもサイトを見ながらテストフォームを活用し、内容を確認しながら実装してみて、色々な情報を表示することができました!!

もっといいやり方があるのかはわかりませんが、とても便利です。

また次回もっと細かくさわっていきたいを思います。

お疲れ様でした!!!!!

参考

細かくはこちらに書いています。

Github:rakuten-ws/rws-ruby-sdk

こちらも大変参考になりました。ありがとうございます!:tada:

Railsで楽天APIで商品検索機能を実装してみた!

Ruby on Rails で楽天商品ページを取得してみた

1
3
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
1
3