From 61743e044ec9d9ff42928a6a92dfc8f947a0c20c Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 10:23:15 +0200 Subject: [PATCH 01/11] support for product type definitions --- lib/muffin_man/definitions/v20200901.rb | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 lib/muffin_man/definitions/v20200901.rb diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb new file mode 100644 index 0000000..0b5ac3d --- /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#{seller_id}/#{sku}" + @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.any? + @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 From 17408b72ce6a469de9f8b7c0ba580ca8b95ccbbc Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 10:26:52 +0200 Subject: [PATCH 02/11] support for product type definitions --- lib/muffin_man.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/muffin_man.rb b/lib/muffin_man.rb index ccdefef..ca50a8d 100644 --- a/lib/muffin_man.rb +++ b/lib/muffin_man.rb @@ -20,6 +20,7 @@ require "muffin_man/feeds/v20210630" require "muffin_man/notifications/v1" require "muffin_man/merchant_fulfillment/v0" +require "muffin_man/definitions/v20200901" module MuffinMan class Error < StandardError; end From ec90a4a8fffdea69892369152c9f0c85c3ea82ee Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 10:51:05 +0200 Subject: [PATCH 03/11] fix --- lib/muffin_man/definitions/v20200901.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb index 0b5ac3d..5f7945f 100644 --- a/lib/muffin_man/definitions/v20200901.rb +++ b/lib/muffin_man/definitions/v20200901.rb @@ -4,7 +4,7 @@ module MuffinMan module Definitions class V20200901 < SpApiClient def search_definitions_product_types(marketplace_ids, keywords: nil) - @local_var_path = "/definitions/2020-09-01/productTypes#{seller_id}/#{sku}" + @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(",") } From b3a3aded2243c02d908bade899b8ae0464bee133 Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 10:52:24 +0200 Subject: [PATCH 04/11] fix --- lib/muffin_man/definitions/v20200901.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb index 5f7945f..19cdc0c 100644 --- a/lib/muffin_man/definitions/v20200901.rb +++ b/lib/muffin_man/definitions/v20200901.rb @@ -8,7 +8,7 @@ def search_definitions_product_types(marketplace_ids, keywords: nil) @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.any? + @query_params["keywords"] = keywords.join(",") if keywords @request_type = "GET" call_api end From c62aafc009aa679758e2c598f981bd3c361286b0 Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 13:00:37 +0200 Subject: [PATCH 05/11] fix --- lib/muffin_man/definitions/v20200901.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb index 19cdc0c..11e32b9 100644 --- a/lib/muffin_man/definitions/v20200901.rb +++ b/lib/muffin_man/definitions/v20200901.rb @@ -1,5 +1,3 @@ -# frozen_string_literal: true - module MuffinMan module Definitions class V20200901 < SpApiClient From b89b31dbd000aac244550383e66698d0d06dabdb Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 13:10:07 +0200 Subject: [PATCH 06/11] fix --- lib/muffin_man/definitions/v20200901.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb index 11e32b9..24acc38 100644 --- a/lib/muffin_man/definitions/v20200901.rb +++ b/lib/muffin_man/definitions/v20200901.rb @@ -6,7 +6,7 @@ def search_definitions_product_types(marketplace_ids, keywords: nil) @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 + @query_params["keywords"] = keywords if keywords @request_type = "GET" call_api end From a1c06fb11ce19b6408fe280cf6b91fe5797283b8 Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 13:12:42 +0200 Subject: [PATCH 07/11] fix --- lib/muffin_man/definitions/v20200901.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb index 24acc38..11e32b9 100644 --- a/lib/muffin_man/definitions/v20200901.rb +++ b/lib/muffin_man/definitions/v20200901.rb @@ -6,7 +6,7 @@ def search_definitions_product_types(marketplace_ids, keywords: nil) @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 if keywords + @query_params["keywords"] = keywords.join(",") if keywords @request_type = "GET" call_api end From 44f9cba6fa0687b525c11bfa40ead230be3ec4d0 Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 13:15:23 +0200 Subject: [PATCH 08/11] fix --- lib/muffin_man/definitions/v20200901.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb index 11e32b9..c4f5040 100644 --- a/lib/muffin_man/definitions/v20200901.rb +++ b/lib/muffin_man/definitions/v20200901.rb @@ -6,7 +6,7 @@ def search_definitions_product_types(marketplace_ids, keywords: nil) @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 + @query_params["keywords"] = @keywords.join(",") if keywords @request_type = "GET" call_api end From 0061288017e231bb05db02e1921564eae2a0de64 Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Wed, 6 Sep 2023 13:17:24 +0200 Subject: [PATCH 09/11] rubocop fixes --- lib/muffin_man/definitions/v20200901.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/muffin_man/definitions/v20200901.rb b/lib/muffin_man/definitions/v20200901.rb index c4f5040..8da7a1c 100644 --- a/lib/muffin_man/definitions/v20200901.rb +++ b/lib/muffin_man/definitions/v20200901.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module MuffinMan module Definitions class V20200901 < SpApiClient From c7d8d49169d5b1de9d87952a432026c50391a8c0 Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Tue, 19 Mar 2024 10:45:46 +0100 Subject: [PATCH 10/11] product pricing methods --- lib/muffin_man/product_pricing/v0.rb | 80 ++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/lib/muffin_man/product_pricing/v0.rb b/lib/muffin_man/product_pricing/v0.rb index 8180ea6..75b5582 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,74 @@ 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" + 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" + end + private # SP APIs expect param array on the form of Asins=Asin1%2CAsin2 (%2C is url escaped for ,) ... From 9beaa4a3e43b35b76b06d0a52ac37f8ef73bb5e7 Mon Sep 17 00:00:00 2001 From: Wolfgang Tom Date: Tue, 19 Mar 2024 11:10:30 +0100 Subject: [PATCH 11/11] bugfix --- lib/muffin_man/product_pricing/v0.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/muffin_man/product_pricing/v0.rb b/lib/muffin_man/product_pricing/v0.rb index 75b5582..554176a 100644 --- a/lib/muffin_man/product_pricing/v0.rb +++ b/lib/muffin_man/product_pricing/v0.rb @@ -67,6 +67,7 @@ def get_item_offers_batch(params = {}) end @request_body = { "requests" => requests } @request_type = "POST" + call_api end # params is a hash with the following structure: @@ -92,6 +93,7 @@ def get_listing_offers_batch(params = {}) end @request_body = { "requests" => requests } @request_type = "POST" + call_api end private