rakuten-ws/rws-ruby-sdk

Item Searchでsortを指定するとエラーが出ます

Closed this issue · 4 comments

items = RakutenWebService::Ichiba::Item.search(
  keyword: 'Ruby',
  sort: "+itemPrice"
)

と入力するとエラーが出ました。
"+itemPrice"をUTF-8にエンコードしても同様の結果でした。
書き方が間違っていますでしょうか。どうぞ宜しくお願いします。

利用しているRubyのバージョン、rakuten_web_serviceのバージョン、エラーのメッセージを教えてください。

ruby 2.3.0
エラー内容:set sort from +affiliateRate,-affiliateRate,+reviewCount,-reviewCount,+reviewAverage,-reviewAverage,+itemPrice,-itemPrice,+updateTimestamp,-updateTimestamp,standard
です。

手元の環境でも同じエラーを再現できました。
sortオプションのURLパラメーターが適切にエンコーディングできていないというバグのようです。

irb(main):002:0> RWS::Ichiba::Item.search(keyword: 'ruby', sort: '+itemPrice').first
opening connection to app.rakuten.co.jp:443...
opened
starting SSL for app.rakuten.co.jp:443...
SSL established
<- "GET /services/api/IchibaItem/Search/20140222?applicationId=***********&affiliateId=&keyword=ruby&sort=+itemPrice HTTP/1.1\r\nUser-Agent: RakutenWebService SDK for Ruby v1.4.0(ruby-2.3.2 [x86_64-darwin15])\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nConnection: close\r\nHost: app.rakuten.co.jp\r\n\r\n"
-> "HTTP/1.1 400 Bad Request\r\n"
-> "Date: Mon, 21 Nov 2016 13:09:44 GMT\r\n"
-> "Access-Control-Allow-Origin: *\r\n"
-> "Cache-Control: no-store\r\n"
-> "Content-Type: application/json;charset=UTF-8\r\n"
-> "Content-Language: ja-JP\r\n"
-> "Vary: Accept-Encoding\r\n"
-> "Content-Encoding: gzip\r\n"
-> "Content-Length: 149\r\n"
-> "Connection: close\r\n"
-> "\r\n"
reading 149 bytes...
-> "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x03]\x8CK\n\xC30\fD\xAF\x12\xBC\xB5}\x81\xEEJ/PJ\xF7A\xC4r\x10\xD4\x1F\xC6J\xB2(\xBD{\rm\xE8g\xA1AOo\xD0\xDD0P`\x0EfC\xC9\xF3X\t\x94X\x19\xC6\xBD\xCC\x18\xB8M\x90\xAARro5\xD6\xA1\x15\xE8\x10Q\xD2`)F\xB9\t)_\xFA8\xFF\x8B\x16\xBC\no\xA7\xB2du\xFE\e\xDE\xE6\xB82h\xE6\xDD\xEDhE9\x9D!S7\x9F\xD5.5\xF4\xAFWI\xDC\x94Ru\xFE\xFF\xD03\aB0\x8F'\xAF\x1F\xA2\xE7\xD6\x00\x00\x00"
read 149 bytes
Conn close
RakutenWebService::WrongParameter: set sort from +affiliateRate,-affiliateRate,+reviewCount,-reviewCount,+reviewAverage,-reviewAverage,+itemPrice,-itemPrice,+updateTimestamp,-updateTimestamp,standard
        from /Users/tatsuya.b.sato/Projects/work/rws-ruby-sdk/lib/rakuten_web_service/client.rb:23:in `get'
        from /Users/tatsuya.b.sato/Projects/work/rws-ruby-sdk/lib/rakuten_web_service/search_result.rb:58:in `block in query'
        from /Users/tatsuya.b.sato/Projects/work/rws-ruby-sdk/lib/rakuten_web_service/search_result.rb:85:in `ensure_retries'
        from /Users/tatsuya.b.sato/Projects/work/rws-ruby-sdk/lib/rakuten_web_service/search_result.rb:58:in `query'
        from /Users/tatsuya.b.sato/Projects/work/rws-ruby-sdk/lib/rakuten_web_service/search_result.rb:63:in `response'
        from /Users/tatsuya.b.sato/Projects/work/rws-ruby-sdk/lib/rakuten_web_service/search_result.rb:20:in `each'
        from (irb):2:in `first'
        from (irb):2
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli/console.rb:18:in `run'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli.rb:362:in `console'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli.rb:20:in `dispatch'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/cli.rb:11:in `start'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/exe/bundle:34:in `block in <top (required)>'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/lib/bundler/friendly_errors.rb:100:in `with_friendly_errors'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/exe/bundle:26:in `<top (required)>'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/bin/bundle:22:in `load'
        from /Users/tatsuya.b.sato/.rbenv/versions/2.3.2/bin/bundle:22:in `<main>'
irb(main):003:0>

@sho-yamane バグを修正し、v1.4.1をリリースしました。

gem install rakuten_web_service -v '1.4.1'

もしくは、bundler をお使いであれば、Gemfile

gem 'rakuten_web_service', version: '~> 1.4.1'

のように書き直した後に、bundle update rakuten_web_service を実行すれば、新しいバージョンに更新できます。