diff --git a/lib/muffin_man.rb b/lib/muffin_man.rb index 38b2d84..3a511f8 100644 --- a/lib/muffin_man.rb +++ b/lib/muffin_man.rb @@ -25,6 +25,7 @@ require "muffin_man/feeds/v20210630" require "muffin_man/notifications/v1" require "muffin_man/merchant_fulfillment/v0" +require "muffin_man/definitions/v20200901" require "muffin_man/awd/v20240509" require "muffin_man/sellers/v1" require "muffin_man/vendor_direct_fulfillment_inventory/v1" diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb new file mode 100644 index 0000000..8da7a1c --- /dev/null +++ b/lib/muffin_man/definitions/v20200901.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module MuffinMan + module Definitions + class V20200901 < SpApiClient + def search_definitions_product_types(marketplace_ids, keywords: nil) + @local_var_path = "/definitions/2020-09-01/productTypes" + @marketplace_ids = marketplace_ids.is_a?(Array) ? marketplace_ids : [marketplace_ids] + @keywords = keywords.is_a?(Array) ? keywords : [keywords] + @query_params = { marketplaceIds: @marketplace_ids.join(",") } + @query_params["keywords"] = @keywords.join(",") if keywords + @request_type = "GET" + call_api + end + + def get_definitions_product_type(product_type, marketplace_ids, seller_id: nil, product_type_version: nil, + requirements: nil, requirements_enforced: nil, locale: nil) + @local_var_path = "/definitions/2020-09-01/productTypes/#{product_type}" + @marketplace_ids = marketplace_ids.is_a?(Array) ? marketplace_ids : [marketplace_ids] + @query_params = { marketplaceIds: @marketplace_ids.join(",") } + @query_params["sellerId"] = seller_id if seller_id + @query_params["productTypeVersion"] = product_type_version if product_type_version + @query_params["requirements"] = requirements.join(",") if requirements + @query_params["requirementsEnforced"] = requirements_enforced if requirements_enforced + @query_params["locale"] = locale if locale + @request_type = "GET" + call_api + end + end + end +end diff --git a/lib/muffin_man/product_pricing/v0.rb b/lib/muffin_man/product_pricing/v0.rb index 8180ea6..554176a 100644 --- a/lib/muffin_man/product_pricing/v0.rb +++ b/lib/muffin_man/product_pricing/v0.rb @@ -3,7 +3,19 @@ module MuffinMan module ProductPricing class V0 < SpApiClient + GET_PRICING_PARAMS = %w[Asins Skus ItemCondition CustomerType].freeze GET_COMPETITIVE_PRICE_PARAMS = %w[Asins Skus CustomerType].freeze + GET_LISTING_OFFERS_PARAMS = %w[CustomerType].freeze + GET_ITEM_OFFERS_PARAMS = %w[CustomerType].freeze + + def get_pricing(marketplace_id, item_type='Asin', params = {}) + @local_var_path = '/products/pricing/v0/price' + @params = { 'MarketplaceId' => marketplace_id, 'ItemType' => item_type } + @params.merge! params.slice(*GET_PRICING_PARAMS) + @query_params = hash_to_sp_api_uri_params(@params) + @request_type = "GET" + call_api + end def get_competitive_pricing(marketplace_id, item_type='Asin', params = {}) @local_var_path = '/products/pricing/v0/competitivePrice' @@ -14,6 +26,76 @@ def get_competitive_pricing(marketplace_id, item_type='Asin', params = {}) call_api end + def get_listing_offers(marketplace_id, item_condition, seller_sku, params = {}) + @local_var_path = "/products/pricing/v0/listings/#{seller_sku}/offers" + @params = { 'MarketplaceId' => marketplace_id, 'ItemCondition ' => item_condition } + @params.merge! params.slice(*GET_LISTING_OFFERS_PARAMS) + @query_params = hash_to_sp_api_uri_params(@params) + @request_type = "GET" + call_api + end + + def get_item_offers(marketplace_id, item_condition, asin, params = {}) + @local_var_path = "/products/pricing/v0/items/#{asin}/offers" + @params = { 'MarketplaceId' => marketplace_id, 'ItemCondition ' => item_condition } + @params.merge! params.slice(*GET_ITEM_OFFERS_PARAMS) + @query_params = hash_to_sp_api_uri_params(@params) + @request_type = "GET" + call_api + end + + # params is a hash with the following structure: + # [ + # { + # "marketplace_id": "marketplace_id1", + # "asin": "asin1", + # "condition": "New", + # "customer_type": "Consumer" # Optional + # ] + def get_item_offers_batch(params = {}) + @local_var_path = "/batches/products/pricing/v0/itemOffers" + requests = [] + params.each do |p| + request = { + "uri" => "/products/pricing/v0/items/#{p[:asin]}/offers", + "method" => "GET", + "MarketplaceId" => p[:marketplace_id], + "ItemCondition" => p[:condition] + } + request["CustomerType"] = p[:customer_type] if p[:customer_type] + requests << request + end + @request_body = { "requests" => requests } + @request_type = "POST" + call_api + end + + # params is a hash with the following structure: + # [ + # { + # "marketplace_id": "marketplace_id1", + # "seller_sku": "sku1", + # "condition": "New", + # "customer_type": "Consumer" # Optional + # ] + def get_listing_offers_batch(params = {}) + @local_var_path = "/batches/products/pricing/v0/listingOffers" + requests = [] + params.each do |p| + request = { + "uri" => "/products/pricing/v0/listings/#{p[:seller_sku]}/offers", + "method" => "GET", + "MarketplaceId" => p[:marketplace_id], + "ItemCondition" => p[:condition] + } + request["CustomerType"] = p[:customer_type] if p[:customer_type] + requests << request + end + @request_body = { "requests" => requests } + @request_type = "POST" + call_api + end + private # SP APIs expect param array on the form of Asins=Asin1%2CAsin2 (%2C is url escaped for ,) ...