Class: Ramazon::Product
- Inherits:
-
Object
- Object
- Ramazon::Product
- Includes:
- HappyMapper, AbstractElement
- Defined in:
- lib/ramazon/product.rb
Overview
Find and get product details with this class Currently supports the following accessors (all other elements can be accessed via nokogiri selectors and the get method)
asin
-
Amazon Identifier
upc
-
UPC ID
title
-
Title of the product
product_group
-
The category/product_group of the product
manufacturer
-
The manufacturer of the product
brand
-
The brand of the product
url
-
The Amazon URL of the product
small_image
-
The small image that Amazon provides (NOTE: Returns Ramazon::Image object)
medium_image
-
The medium image that Amazon provides (NOTE: Returns Ramazon::Image object)
large_image
-
The large image that Amazon provides (NOTE: Returns Ramazon::Image object)
list_price
-
The list price of the item (NOTE: Returns Ramazon::Price object)
lowest_new_price
-
The lowest new price from the offer summary (NOTE: Returns Ramazon::Price object)
sales_rank
-
The sales rank of the product
new_count
-
The quantity of new item offers
used_count
-
The quantity of used item offers
collectible_count
-
The quantity of collectible item offers
refurbished_count
-
The quantity of refurbished item offers
release_date
-
The release date of the product
original_release_date
-
The original release date of the product
offers
-
The collection of offers available for the given product
Instance Attribute Summary collapse
-
#xml_doc ⇒ Object
Returns the value of attribute xml_doc.
Class Method Summary collapse
-
.find(*args) ⇒ Array
Creates the worker that performs the delta indexing (ie. passing the :response_group option will be converted to “ResponseGroup”)
:item_id
- the ASIN or UPC you’re looking for. -
.item_lookup(item_id, options = {}) ⇒ Object
Performs an item lookup.
-
.offer_pages_for(product) ⇒ Object
gets the number of offer pages for the specified product.
- .parse(xml, options = {}) ⇒ Object
Instance Method Summary collapse
-
#category_tree ⇒ Object
returns a hash of category browse nodes from the top down.
-
#get(*args) ⇒ Object
perform a nokogiri search on the product’s XML.
-
#images ⇒ Hash
assembles the available images for the object.
-
#lowest_offers ⇒ Hash
get the lowest offers broken down by subcondition.
-
#offer_page(page = 1) ⇒ Array
get offers from a given page.
- #offer_pages ⇒ Object
- #offer_pages=(pages) ⇒ Object
-
#offers_by_condition ⇒ Hash
breaks down all the offers in a nested hash of [condition] note: this will load ALL offers into memory.
-
#used_offers ⇒ Object
a sorted list of used offers.
Methods included from AbstractElement
Instance Attribute Details
#xml_doc ⇒ Object
Returns the value of attribute xml_doc.
128 129 130 |
# File 'lib/ramazon/product.rb', line 128 def xml_doc @xml_doc end |
Class Method Details
.find(*args) ⇒ Array
Creates the worker that performs the delta indexing (ie. passing the :response_group option will be converted to “ResponseGroup”) :item_id
- the ASIN or UPC you’re looking for
91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/ramazon/product.rb', line 91 def self.find(*args) = args. if [:item_id] item_lookup([:item_id], ) else [:operation] ||= "ItemSearch" [:search_index] ||= "Blended" [:item_page] ||= 1 res = Ramazon::Request.new().submit Ramazon::ProductCollection.create_from_results([:item_page] || 1, 10, res) end end |
.item_lookup(item_id, options = {}) ⇒ Object
Performs an item lookup
107 108 109 110 111 112 113 |
# File 'lib/ramazon/product.rb', line 107 def self.item_lookup(item_id, = {}) req = Ramazon::Request.new({:item_id => item_id, :operation => "ItemLookup"}.merge()) res = req.submit Ramazon::ProductCollection.create_from_results(1,1,res) end |
.offer_pages_for(product) ⇒ Object
gets the number of offer pages for the specified product
196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/ramazon/product.rb', line 196 def self.offer_pages_for(product) if !@offer_pages = product.get("//Offers/TotalOfferPages") if .size > 0 offer_pages = [0].content.to_i else offer_pages = 1 end end offer_pages end |
.parse(xml, options = {}) ⇒ Object
129 130 131 132 133 134 135 136 |
# File 'lib/ramazon/product.rb', line 129 def self.parse(xml, = {}) node = XML::Parser.string(xml.to_s).parse.root node.find("//Item").collect do |n| p = super(n.to_s) p.xml_doc = Nokogiri::XML.parse(n.to_s) p end end |
Instance Method Details
#category_tree ⇒ Object
returns a hash of category browse nodes from the top down
148 149 150 151 152 153 154 |
# File 'lib/ramazon/product.rb', line 148 def category_tree @category_tree = {} get_category_browse_nodes.each do |n| build_category_tree(n) end @category_tree end |
#get(*args) ⇒ Object
perform a nokogiri search on the product’s XML
143 144 145 |
# File 'lib/ramazon/product.rb', line 143 def get(*args) result = @xml_doc.search(args) end |
#images ⇒ Hash
assembles the available images for the object
117 118 119 120 121 122 123 124 125 126 |
# File 'lib/ramazon/product.rb', line 117 def images if !@images @images = {} @images[:thumb] = self.thumb_image if self.thumb_image @images[:tiny_image] = self.tiny_image if self.tiny_image @images[:small] = self.small_image if self.small_image @images[:medium] = self.medium_image if self.medium_image @images[:large] = self.large_image if self.large_image end end |
#lowest_offers ⇒ Hash
get the lowest offers broken down by subcondition
211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/ramazon/product.rb', line 211 def lowest_offers if @lowest_offers.nil? @lowest_offers = {} offers_by_condition.each do |condition, sub_conditions| @lowest_offers[condition] = {} sub_conditions.each do |sub_condition, col| sorted_offers = col.sort{|a,b| a.price.amount.to_i <=> b.price.amount.to_i} @lowest_offers[condition][sub_condition] = sorted_offers.first end end end @lowest_offers end |
#offer_page(page = 1) ⇒ Array
get offers from a given page
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/ramazon/product.rb', line 237 def offer_page(page = 1) #get all offers products = self.class.find(:item_id => self.asin, :response_group => "OfferListings", :merchant_id => "All", :condition => "All", :offer_page => page) if products product = products[0] self.offer_pages = self.class.offer_pages_for(product) product.offers else [] end end |
#offer_pages ⇒ Object
230 231 232 |
# File 'lib/ramazon/product.rb', line 230 def offer_pages @offer_pages end |
#offer_pages=(pages) ⇒ Object
226 227 228 |
# File 'lib/ramazon/product.rb', line 226 def offer_pages=(pages) @offer_pages = pages.to_i end |
#offers_by_condition ⇒ Hash
breaks down all the offers in a nested hash of [condition] note: this will load ALL offers into memory
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/ramazon/product.rb', line 173 def offers_by_condition @offer_hash = {} offer_page = 1 offers = offer_page(offer_page) while offer_page <= offer_pages offers.each do |o| @offer_hash[o.condition.downcase] ||= {} @offer_hash[o.condition.downcase][o.sub_condition] ||= [] @offer_hash[o.condition.downcase][o.sub_condition] << o end offer_page += 1 offers = offer_page(offer_page) end @offer_hash end |
#used_offers ⇒ Object
a sorted list of used offers
157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/ramazon/product.rb', line 157 def used_offers if @used_offers.nil? @used_offers = [] self.offers.each do |o| if o.condition.downcase == "used" @used_offers << o end end @used_offers.sort!{|a,b| a.price.amount <=> b.price.amount} end @used_offers end |