LoginSignup
coolcop
@coolcop (cool cop)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【楽天API】Rails5で書籍検索機能を楽天APIを利用して実装したい

アフィリエイトリンクが表示されない

Ruby on Railsでwebアプリケーションを開発中です。
その中で、キーワードを検索しアフィリエイトリンクを表示させたいのですが、上手くいきません。
解決方法を教えてください。

アプリID、アフィリエイトIDなどは取得済み、イニシャライザーにも記述済みです。

view/posts/bookstore.html.erb

html.erb
<h2>本屋</h2>
  <div class="page_top container">
    <%= form_tag('/posts/bookstore', method: :get) do %>
    <%= label_tag :keyword, 'キーワード検索' %>
    <%= text_field_tag 'keyword', params[:keyword] %>
    <%= submit_tag "検索" %>
    <% end %>

    <table>
    <thead>
    <tr>
    <th>商品名</th>
    <th>価格</th>
    <th>画像</th>
    </tr>
    </thead>
    <tbody>
    <% if @items.present? %>
    <% @items.each do |item| %>
    <tr>
    <td><%= link_to item.title, "#{item.affiliateUrl}" %></td>
    <td align="right"><%= number_with_delimiter(item.itemPrice) %>円</td>
    <td><%= image_tag item["mediumImageUrl"][0]["imageUrl"] %></td>
    </tr>
    <% end %>
    <% end %>
    </tbody>
    </table>

  </div>

検索ボタンを押しても何も表示されません。
また、検索する語句によってはエラーが出ることもあります。
【具体的な例】
「君の膵臓を食べたい」と入力し検索→エラーは出ないがリンクや画像も生成されない
「鼻」と入力し検索→エラー
「Ruby」と入力し検索→エラー

posts_controller#bookstore

def bookstore
  if params[:keyword]
    @items = RakutenWebService::Ichiba::Item.search(keyword: params[:keyword])
  end
end

参考にしている記事

https://www.tom08.net/entry/2016/08/29/133539
https://freesworder.net/rakuten-api-rails/

何か質問に際して不足している情報等ありましたらそちらも合わせてご指摘頂けると幸いです。
どうかよろしくお願い致します。

0

3Answer

気になる点をいくつか(動作確認はしていないので間違えていたらごめんなさい)。

    @items = RakutenWebService::Ichiba::Item.search(keyword: params[:keyword])

上記の呼び出しは「Rakuten Ichiba Item Search API」だと思います。

本来は、書籍検索がしたいのだと思います。
どの書籍検索がしたいのかわかりませんが、仮に「Rakuten Books Total Search API」だとしたら以下のような感じではないでしょうか。

    @items = RakutenWebService::Books::Total.search(keyword: params[:keyword])

もし「Rakuten Books Book Search API」なら以下のような感じ。

    @items = RakutenWebService::Books::Book.search(keyword: params[:keyword])

また、画像の情報の取得方法が違うように思います。
Rakuten Ichiba Item Search API の smallImageUrls の場合には

最大3枚の画像(画像サイズ64px*64px)をimageUrl の配列で返却
httpsではじまる商品画像64x64のURL

と書いてありますが

Rakuten Books Total Search API の mediumImageUrl の場合には

httpsではじまる商品画像(128x128ピクセル)のURL

とあるので、普通に1つだけの URL があるのではないかと思います。
(Rakuten Books Book Search API も同様の記載)

    <td><%= image_tag item.mediumImageUrl %></td>

もし上記で問題が解決しない場合、以下の情報を確認し、何かあれば本文に追記できますか?
(基本的に、アプリIDやアフィリエイトID、個人情報などがあればもちろん潰してください)

  • エラーになっているとのことですが、どのようなエラーですか?
  • エラーログには何か出ていないですか?
  • ブラウザのコンソールに何かエラーがでてないですか?(chrome ならデベロッパーツールのコンソール。その他ブラウザにも似たものがあるはず)
0

@yoshi389111さん、ご回答ありがとうございます!
頂いた指摘通りコードを変更しましたが、やはりエラーが出てしまいました。

エラーは、検索ボタンを押すと添付画像のようなエラーが出ます。また、その画像にブラウザのコンソールも映しておりますのでご覧ください!

また、エラーログですが、プロンプトで「heroku logs -t」と入力し調べたのですが、長すぎてよくわからなかったのですが、とりあえず直近のものを張らせていただきます。

今後もお付き合いどうかよろしくお願い致します。スクリーンショット 2021-04-16 022255.png
スクリーンショット 2021-04-16 023134.png

0

エラーメッセージは、テキストも貼り付けるようにしてください(ソースなどと同様コードブロックにしてください)。

エラーはいくつか起きていて、一つめは

SyntaxError (/app/app/views/posts/_find_book.html.erb:14: unterminated string meets end of file
end
^
/app/app/views/posts/_find_book.html.erb:14: syntax error, unexpected end-of-input, expecting ')'):

とあります。 _find_book.html.erb の中で文字列が閉じられていない、また括弧も閉じられていないと言っています。

まずは、_find_book.html.erb のソースを確認してください。
おそらく文字列が閉じていない箇所があると思います。
括弧については、文字列が閉じていない影響が出ているだけかもしれないですが、一応全体的に見直してください。

二つめは

heroku[router]: at=info method=GET path="/posts/bookstore" host=...

おそらく、router で振り分けることができなかったのではないかと思います。

現状、/posts/bookstore を呼び出す際に GET を使っていますが、ルーティングでは POST になっているのではないでしょうか?

以下のように修正してみてください。

bookstore.html.erb
- <%= form_tag('/posts/bookstore', method: :get) do %>
+ <%= form_tag('/posts/bookstore') do %>

また、_find_book.html.erb/posts/bookstore を呼び出すところも同じようにしてください。

0

Comments

  1. @coolcop

    Questioner
    @yoshi389111さん、コメントありがとうございました!
    頂いたご指摘の内、APIの記述を変更することでうまくできました!

    本当にありがとうございました!

Your answer might help someone💌