Class: AmazonAssociate::Request
- Inherits:
-
Object
- Object
- AmazonAssociate::Request
- Defined in:
- lib/amazon_associate/request.rb
Constant Summary collapse
- SERVICE_URLS =
{:us => "http://webservices.amazon.com", :uk => "http://webservices.amazon.co.uk", :ca => "http://webservices.amazon.ca", :de => "http://webservices.amazon.de", :jp => "http://webservices.amazon.co.jp", :fr => "http://webservices.amazon.fr" }
- SORT_TYPES =
The sort types available to each product search index.
{ "Apparel" => %w[relevancerank salesrank pricerank inverseprice -launch-date sale-flag], "Automotive" => %w[salesrank price -price titlerank -titlerank], "Baby" => %w[psrank salesrank price -price titlerank], "Beauty" => %w[pmrank salesrank price -price -launch-date sale-flag], "Books" => %w[relevancerank salesrank reviewrank pricerank inverse-pricerank daterank titlerank -titlerank], "Classical" => %w[psrank salesrank price -price titlerank -titlerank orig-rel-date], "DigitalMusic" => %w[songtitlerank uploaddaterank], "DVD" => %w[relevancerank salesrank price -price titlerank -video-release-date], "Electronics" => %w[pmrank salesrank reviewrank price -price titlerank], "GourmetFood" => %w[relevancerank salesrank pricerank inverseprice launch-date sale-flag], "HealthPersonalCare" => %w[pmrank salesrank pricerank inverseprice launch-date sale-flag], "Jewelry" => %w[pmrank salesrank pricerank inverseprice launch-date], "Kitchen" => %w[pmrank salesrank price -price titlerank -titlerank], "Magazines" => %w[subslot-salesrank reviewrank price -price daterank titlerank -titlerank], "Merchants" => %w[relevancerank salesrank pricerank inverseprice launch-date sale-flag], "Miscellaneous" => %w[pmrank salesrank price -price titlerank -titlerank], "Music" => %w[psrank salesrank price -price titlerank -titlerank artistrank orig-rel-date release-date], "MusicalInstruments" => %w[pmrank salesrank price -price -launch-date sale-flag], "MusicTracks" => %w[titlerank -titlerank], "OfficeProducts" => %w[pmrank salesrank reviewrank price -price titlerank], "OutdoorLiving" => %w[psrank salesrank price -price titlerank -titlerank], "PCHardware" => %w[psrank salesrank price -price titlerank], "PetSupplies" => %w[+pmrank salesrank price -price titlerank -titlerank], "Photo" => %w[pmrank salesrank titlerank -titlerank], "Restaurants" => %w[relevancerank titlerank], "Software" => %w[pmrank salesrank titlerank price -price], "SportingGoods" => %w[relevancerank salesrank pricerank inverseprice launch-date sale-flag], "Tools" => %w[pmrank salesrank titlerank -titlerank price -price], "Toys" => %w[pmrank salesrank price -price titlerank -age-min], "VHS" => %w[relevancerank salesrank price -price titlerank -video-release-date], "Video" => %w[relevancerank salesrank price -price titlerank -video-release-date], "VideoGames" => %w[pmrank salesrank price -price titlerank], "Wireless" => %w[daterank pricerank invers-pricerank reviewrank salesrank titlerank -titlerank], "WirelessAccessories" => %w[psrank salesrank titlerank -titlerank] }
- @@options =
{}
- @@debug =
false
Instance Attribute Summary collapse
-
#request_url ⇒ Object
Returns the value of attribute request_url.
-
#unsigned_url ⇒ Object
Returns the value of attribute unsigned_url.
Class Method Summary collapse
-
.browse_node_lookup(browse_node_id, opts = {}) ⇒ Object
Performs BrowseNodeLookup request, defaults to TopSellers ResponseGroup.
-
.cart_add(items, cart_id, hmac, opts = {}) ⇒ Object
Adds items to remote shopping cart.
-
.cart_clear(cart_id, hmac, opts = {}) ⇒ Object
clears contents of remote shopping cart.
-
.cart_create(items, opts = {}) ⇒ Object
Creates remote shopping cart containing asin.
-
.cart_get(cart_id, hmac, opts = {}) ⇒ Object
Retrieve a remote shopping cart.
-
.cart_modify(cart_item_id, cart_id, hmac, quantity = 0, opts = {}) ⇒ Object
modifies cart_item_id in remote shopping cart quantity defaults to 0 to remove the given cart_item_id specify quantity to update cart contents.
- .configure {|@@options| ... } ⇒ Object
-
.debug ⇒ Object
Get debug flag.
-
.debug=(dbg) ⇒ Object
Set debug flag to true or false.
-
.item_lookup(item_id, opts = {}) ⇒ Object
Search an item by ASIN no.
-
.item_search(terms, opts = {}) ⇒ Object
Search amazon items with search terms.
-
.options ⇒ Object
Default search options.
-
.options=(opts) ⇒ Object
Set default search options.
-
.send_request(opts) ⇒ Object
Generic send request to ECS REST service.
-
.sort_types(search_index) ⇒ Object
Returns an Array of valid sort types for search_index, or
nilif search_index is invalid.
Instance Attribute Details
#request_url ⇒ Object
Returns the value of attribute request_url.
262 263 264 |
# File 'lib/amazon_associate/request.rb', line 262 def request_url @request_url end |
#unsigned_url ⇒ Object
Returns the value of attribute unsigned_url.
262 263 264 |
# File 'lib/amazon_associate/request.rb', line 262 def unsigned_url @unsigned_url end |
Class Method Details
.browse_node_lookup(browse_node_id, opts = {}) ⇒ Object
Performs BrowseNodeLookup request, defaults to TopSellers ResponseGroup
88 89 90 91 92 93 94 |
# File 'lib/amazon_associate/request.rb', line 88 def self.browse_node_lookup(browse_node_id, opts = {}) opts = self..merge(opts) if self. opts[:operation] = "BrowseNodeLookup" opts[:browse_node_id] = browse_node_id self.send_request(opts) end |
.cart_add(items, cart_id, hmac, opts = {}) ⇒ Object
Adds items to remote shopping cart
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/amazon_associate/request.rb', line 119 def self.cart_add(items, cart_id, hmac, opts = {}) opts = self..merge(opts) if self. opts[:operation] = "CartAdd" if items.is_a?(String) asin = items opts["Item.#{asin}.Quantity"] = opts[:quantity] || 1 opts["Item.#{asin}.ASIN"] = asin else items.each do |item| (item[:offer_listing_id].nil? || item[:offer_listing_id].empty?) ? opts["Item.#{item[:asin]}.ASIN"] = item[:asin] : opts["Item.#{item[:asin]}.OfferListingId"] = item[:offer_listing_id] opts["Item.#{item[:asin]}.Quantity"] = item[:quantity] || 1 end end opts[:cart_id] = cart_id opts[:hMAC] = hmac self.send_request(opts) end |
.cart_clear(cart_id, hmac, opts = {}) ⇒ Object
clears contents of remote shopping cart
165 166 167 168 169 170 171 172 |
# File 'lib/amazon_associate/request.rb', line 165 def self.cart_clear(cart_id, hmac, opts = {}) opts = self..merge(opts) if self. opts[:operation] = "CartClear" opts[:cart_id] = cart_id opts[:hMAC] = hmac self.send_request(opts) end |
.cart_create(items, opts = {}) ⇒ Object
Creates remote shopping cart containing asin
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/amazon_associate/request.rb', line 100 def self.cart_create(items, opts = {}) opts = self..merge(opts) if self. opts[:operation] = "CartCreate" if items.is_a?(String) asin = items opts["Item.#{asin}.Quantity"] = opts[:quantity] || 1 opts["Item.#{asin}.ASIN"] = asin else items.each do |item| (item[:offer_listing_id].nil? || item[:offer_listing_id].empty?) ? opts["Item.#{item[:asin]}.ASIN"] = item[:asin] : opts["Item.#{item[:asin]}.OfferListingId"] = item[:offer_listing_id] opts["Item.#{item[:asin]}.Quantity"] = item[:quantity] || 1 end end self.send_request(opts) end |
.cart_get(cart_id, hmac, opts = {}) ⇒ Object
Retrieve a remote shopping cart
141 142 143 144 145 146 147 148 |
# File 'lib/amazon_associate/request.rb', line 141 def self.cart_get(cart_id, hmac, opts = {}) opts = self..merge(opts) if self. opts[:operation] = "CartGet" opts[:cart_id] = cart_id opts[:hMAC] = hmac self.send_request(opts) end |
.cart_modify(cart_item_id, cart_id, hmac, quantity = 0, opts = {}) ⇒ Object
modifies cart_item_id in remote shopping cart quantity defaults to 0 to remove the given cart_item_id specify quantity to update cart contents
153 154 155 156 157 158 159 160 161 162 |
# File 'lib/amazon_associate/request.rb', line 153 def self.cart_modify(cart_item_id, cart_id, hmac, quantity=0, opts = {}) opts = self..merge(opts) if self. opts[:operation] = "CartModify" opts["Item.1.CartItemId"] = cart_item_id opts["Item.1.Quantity"] = quantity opts[:cart_id] = cart_id opts[:hMAC] = hmac self.send_request(opts) end |
.configure {|@@options| ... } ⇒ Object
196 197 198 199 200 201 202 203 |
# File 'lib/amazon_associate/request.rb', line 196 def self.configure(&proc) raise ArgumentError, "Block is required." unless block_given? yield @@options if !@@options[:caching_strategy].nil? @@options.merge!(CacheFactory.(@@options)) end end |
.debug ⇒ Object
Get debug flag.
187 188 189 |
# File 'lib/amazon_associate/request.rb', line 187 def self.debug @@debug end |
.debug=(dbg) ⇒ Object
Set debug flag to true or false.
192 193 194 |
# File 'lib/amazon_associate/request.rb', line 192 def self.debug=(dbg) @@debug = dbg end |
.item_lookup(item_id, opts = {}) ⇒ Object
Search an item by ASIN no.
222 223 224 225 226 227 |
# File 'lib/amazon_associate/request.rb', line 222 def self.item_lookup(item_id, opts = {}) opts[:operation] = "ItemLookup" opts[:item_id] = item_id self.send_request(opts) end |
.item_search(terms, opts = {}) ⇒ Object
Search amazon items with search terms. Default search index option is “Books”. For other search type other than keywords, please specify :type => [search type param name].
207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'lib/amazon_associate/request.rb', line 207 def self.item_search(terms, opts = {}) opts[:operation] = "ItemSearch" opts[:search_index] = opts[:search_index] || "Books" type = opts.delete(:type) if type opts[type.to_sym] = terms else opts[:keywords] = terms end self.send_request(opts) end |
.options ⇒ Object
Default search options
177 178 179 |
# File 'lib/amazon_associate/request.rb', line 177 def self. @@options end |
.options=(opts) ⇒ Object
Set default search options
182 183 184 |
# File 'lib/amazon_associate/request.rb', line 182 def self.(opts) @@options = opts end |
.send_request(opts) ⇒ Object
Generic send request to ECS REST service. You have to specify the :operation parameter.
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'lib/amazon_associate/request.rb', line 230 def self.send_request(opts) opts = self..merge(opts) if self. unsigned_url = prepare_unsigned_url(opts) response = nil if caching_enabled? AmazonAssociate::CacheFactory.sweep(self.[:caching_strategy]) res = AmazonAssociate::CacheFactory.get(unsigned_url, self.[:caching_strategy]) response = Response.new(res, unsigned_url) unless res.nil? end if !caching_enabled? || response.nil? request_url = prepare_signed_url(opts) log "Request URL: #{request_url}" res = Net::HTTP.get_response(URI::parse(request_url)) unless res.kind_of? Net::HTTPSuccess raise AmazonAssociate::RequestError, "HTTP Response: #{res.code} #{res.}" end response = Response.new(res.body, request_url) response.unsigned_url = unsigned_url if caching_enabled? cache_response(unsigned_url, response, self.[:caching_strategy]) end end response end |
.sort_types(search_index) ⇒ Object
Returns an Array of valid sort types for search_index, or nil if search_index is invalid.
83 84 85 |
# File 'lib/amazon_associate/request.rb', line 83 def self.sort_types(search_index) SORT_TYPES.has_key?(search_index) ? SORT_TYPES[search_index] : nil end |