module AmazonParser
Public Class Methods
parse(product_hash:)
click to toggle source
# File lib/amazonparser.rb, line 6 def parse(product_hash:) # 1. convert hash keys to snakecase product_hash = product_hash.to_snake_keys # 2. convert hash to open struct product = RecursiveOpenStruct.new(product_hash, recurse_over_arrays: true) # 3. setup basic scopes item = product.item_lookup_response.items.item item_attributes = item.item_attributes images = item.image_sets.image_set categories = item.browse_nodes main_category = item.browse_nodes.browse_node offer_summary = item.offer_summary offers = item.offers promotions = item.offers.offer.promotions # 4. copy attributes into root struct # a. main response groups product.item = item product.item_attributes = item_attributes product.images = images product.categories = categories product.main_category = main_category product.offer_summary = offer_summary product.offers = offers product.promotions = promotions # b. item product.asin = item.asin product.parent_asin = item.parent_asin product.sales_rank = item.sales_rank # c. category product.category = main_category.is_a?(Array) ? main_category[0].name : main_category.name # d. item attributes product.actor = item_attributes.actor product.artist = item_attributes.artist product.aspect_ratio = item_attributes.aspect_ratio product.audience_rating = item_attributes.audience_rating product.audio_format = item_attributes.audio_format product.author = item_attributes.author product.brand = item_attributes.brand product.catalog_number_list = item_attributes.catalog_number_list product.clothing_size = item_attributes.clothing_size product.creator = item_attributes.creator product.department = item_attributes.department product.director = item_attributes.director product.ean = item_attributes.ean product.ean_list = item_attributes.ean_list product.edition = item_attributes.edition product.eisbn = item_attributes.eisbn product.esrb_age_rating = item_attributes.esrb_age_rating product.feature = item_attributes.feature product.format = item_attributes.format product.genre = item_attributes.genre product.hardware_platform = item_attributes.hardware_platform product.hazardous_material_type = item_attributes.hazardous_material_type product.is_adult_product = to_bool item_attributes.is_adult_product product.is_autographed = to_bool item_attributes.is_autographed product.isbn = item_attributes.isbn product.is_memorabilia = to_bool item_attributes.is_memorabilia product.issues_per_year = item_attributes.issues_per_year product.label = item_attributes.label product.legal_disclaimer = item_attributes.legal_disclaimer product.list_price = item_attributes.list_price.amount&.to_i product.manufacturer = item_attributes.manufacturer product.max_use_age = item_attributes.manufacturer_maximum_age product.min_use_age = item_attributes.manufacturer_minimum_age product.manufacturer_warranty = item_attributes.manufacturer_parts_warranty_description product.material_type = item_attributes.material_type product.media_type = item_attributes.media_type product.meta_type = item_attributes.metal_type product.model = item_attributes.model product.mpn = item_attributes.mpn product.number_of_discs = item_attributes.number_of_discs&.to_i product.number_of_issues = item_attributes.number_of_issues&.to_i product.number_of_items = item_attributes.number_of_items&.to_i product.number_of_pages = item_attributes.number_of_pages&.to_i product.number_of_tracks = item_attributes.number_of_tracks&.to_i product.operating_system = item_attributes.operating_system product.package_quantity = item_attributes.package_quantity&.to_i product.part_number = item_attributes.part_number product.platform = item_attributes.platform product.group = item_attributes.product_group product.product_type_name = item_attributes.product_type_name product.publication_date = item_attributes.publication_date product.publisher = item_attributes.publisher product.region_code = item_attributes.region_code product.release_date = item_attributes.release_date product.running_time = item_attributes.running_time product.seikodo_product_code = item_attributes.seikodo_product_code product.size = item_attributes.size product.sku = item_attributes.sku product.studio = item_attributes.studio product.subscription_length = item_attributes.subscription_length product.title = item_attributes.title product.trade_in_value = item_attributes.trade_in_value product.upc = item_attributes.upc product.upc_list = item_attributes.upc_list product.warranty = item_attributes.warranty product.weee_tax_value = item_attributes.weee_tax_value # e. package size product.package_height = item_attributes.package_dimensions.height.__content__&.to_i product.package_height_units = item_attributes.package_dimensions.height.units product.package_width = item_attributes.package_dimensions.width.__content__&.to_i product.package_width_units = item_attributes.package_dimensions.width.units product.package_length = item_attributes.package_dimensions.length.__content__&.to_i product.package_length_units = item_attributes.package_dimensions.length.units # f. offers product.offers_count = offers.total_offers&.to_i product.price = offers.offer.dig(:offer_listing, :price, :amount)&.to_i product.sale_price = offers.offer.dig(:offer_listing, :sale_price, :amount)&.to_i product.discount = offers.offer.dig(:offer_listing, :amount_saved, :amount)&.to_i product.percent_discount = offers.offer.offer_listing.percentage_saved&.to_i product.has_super_saver_shipping = to_bool offers.offer.offer_listing.is_eligible_for_super_saver_shipping product.has_prime = to_bool offers.offer.offer_listing.is_eligible_for_prime product.has_prime_streaming = to_bool offers.offer.offer_listing.is_eligible_for_prime_free_digital_video product.can_be_traded_in = to_bool offers.offer.offer_listing.is_eligible_for_trade_in product.availability = offers.offer.offer_listing.availability product.availability_type = offers.offer.offer_listing.availability_attributes.availability_type product.min_hours_until_available = offers.offer.offer_listing.availability_attributes.minimum_hours&.to_i product.max_hours_until_available = offers.offer.offer_listing.availability_attributes.maximum_hours&.to_i # g. offer summary product.lowest_new_price = offer_summary.dig(:lowest_new_price, :amount)&.to_i product.lowest_used_price = offer_summary.dig(:lowest_used_price, :amount)&.to_i product.lowest_collectibe_price = offer_summary.dig(:lowest_collectibe_price, :amount)&.to_i product.lowest_refurbished_price = offer_summary.dig(:lowest_refurbished_price, :amount)&.to_i product.new_count = offer_summary.total_new&.to_i product.used_count = offer_summary.total_used&.to_i product.collectible_count = offer_summary.total_collectible&.to_i product.refurbished_count = offer_summary.total_refurbished&.to_i # h. first promo product.promo_category = promotions&.promotion&.summary&.category product.promo_requirement = promotions&.promotion&.summary&.eligibility_requirement_description product.promo_benefit = promotions&.promotion&.summary&.benefit_description product.promo_terms = promotions&.promotion&.summary&.terms_and_conditions product end
Private Class Methods
to_bool(string)
click to toggle source
# File lib/amazonparser.rb, line 155 def to_bool(string) return nil if string.nil? return true if string == true || string == "1" return false if string == false || string == "0" raise ArgumentError.new("invalid value for Boolean: '#{string}'") end