前提・実現したいこと
楽天市場商品検索、Yahoo shopping商品検索APIを利用し、ほぼ安ネットのようなWebアプリを作っています。
検索機能実装についてはうまく完成したのですが、
エラーが発生した際の挙動を例外処理で捕捉し動作を停止させ、rootに戻したいのですがうまくいかず詰まっています。
なにかアドバイスがありましたらいただきたいです。
発生している問題・エラーメッセージ
例)① 商品名 aなど間に半角スペースを挟んだ時、
HTTPステータスコードが400
{ "error": "wrong_parameter", "error_description": "keyword parameter is not valid" }
楽天Developers
https://webservice.rakuten.co.jp/api/ichibaitemsearch/#aboutError
例)② 健康食品というワードをsort(価格が安い順)したときに発生
params{"keyword"=>"健康食品", "page"=>"1", "commit"=>"安い順",}
undefined method `[]' for nil:NilClass
②はURLに直接パラメータを入力したらきちんと結果が表示されます。(謎)
該当のソースコード
rails
1 2# application_controller.rb 3case params[:commit] 4when "安い順" 5 @sort_r = "+itemPrice" 6 @sort_y = "+price" 7when "レビュー件数順" 8 @sort_r = "-reviewCount" 9 @sort_y = "-review_count" 10when "レビュー平均順" 11 @sort_r = "-reviewAverage" 12 @sort_y = "-score" 13else 14 @sort_r = "standard" 15 @sort_y = "-score" 16end 17@rakutenitem = RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], page: @page, sort: @sort_r) 18@yahooitem = [] 19res = Yahoo::Api.get(Yahoo::Api::Shopping::ItemSearch, 20 {query: params[:keyword], offset: @page, sort: @sort_y, hits: "30", availability: "1"}) 21unless res["ResultSet"]["totalResultsReturned"] == "0" 22 res["ResultSet"]["totalResultsReturned"].times do |i| 23 @yahooitem.push(res["ResultSet"]["0"]["Result"]["#{i}"]) 24 end 25end
試したこと
rails
1begin 2 @rakutenitem = RakutenWebService::Ichiba::Item.search(keyword: params[:keyword], page: 3@page, sort: @sort_r) 4 @yahooitem = [] 5 res = Yahoo::Api.get(Yahoo::Api::Shopping::ItemSearch, 6 {query: params[:keyword], offset: @page, sort: @sort_y, hits: "30", availability: "1"}) 7 unless res["ResultSet"]["totalResultsReturned"] == "0" 8 res["ResultSet"]["totalResultsReturned"].times do |i| 9 @yahooitem.push(res["ResultSet"]["0"]["Result"]["#{i}"]) 10 end 11 end 12rescue 13 flash[:danger] = "エラー発生" 14 redirect_to root_url 15end 16
例外処理について知識が浅く、調べながら進めています。
補足情報(FW/ツールのバージョンなど)
開発環境 cloud9
言語 rails 5.1.6
使用gem
rakuten_web_service ~> 1.4.1
gem 'yahoo-api'
初学者です。
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/31 06:28
2020/05/31 06:40
2020/05/31 12:06