ruby-amazon でのリストマニア検索

ruby-amazonを使って,CDのリストマニア(listmania)を検索し表示してみる.3人のリストマニアのおすすめ商品10点づつ表示させてみた.使ってみるとruby-amazonは細かなパラメータ指定ができないので,ちょっと不便かも.


ruby-amazon インストール

ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

コントロール

  • dev_token, associate_id はベタにここに書かなくてもいい
  def amazon_search_lmania
    @products = []
    @lists = []
    @asins_lmania = []
    @asin_key = @params[:asin]

    require 'amazon/search'
    dev_token = "xxxxxxxxxxxxxx"
    associate_id = "yyyyyyyyyyyyyyy"
    locale='jp'
    req = Amazon::Search::Request.new(dev_token, associate_id, locale)

    # ListId商品サーチ
    res = req.asin_search(@asin_key, Amazon::Search::HEAVY)
    @products = res.products
    puts @products[0].properties
    @lists = @products[0].lists

    if @lists
      for list_id in @lists 
        sleep 1
        puts list_id
        res = req.listmania_search(list_id, Amazon::Search::LITE)
        @products = res.products
        for product in @products
          @asins_lmania << product.asin
        end
      end
    end

    render :layout => false  
  end
  • Libでエラーが出たので修正した.「 list ID length must be 12 or 13 characters」REST確認すると,14桁なのでLocal=jpでのバグか?
  • /ruby/lib/ruby/site-ruby/1.8/amazon/search.rb L747,748 : 13->14
      # Return an Amazon::Search::Response of the products on a Listmania list.
      # If a block is given, that Response's @products will be passed to the
      # block.
      #
      def listmania_search(list_id, weight=HEAVY, &block)

	url = AWS_PREFIX + "?t=%s&ListManiaSearch=%s&f=xml&type=%s&dev-t=%s"
 	@type = WEIGHT[weight]

	unless list_id.length.between?(12, 14)
	  raise TermError, "list ID length must be 12 or 14 characters"
	end

	search(url % [@id, list_id, @type, @token], &block)
      end