From 64dd6fffb9d78f679ced3d45a93886756453d26a Mon Sep 17 00:00:00 2001 From: Jeff Wagner Date: Mon, 29 Jun 2020 14:26:17 +0200 Subject: [PATCH] Added undocumented Customer Rating to API for use with "GetItems" and "SearchItems". --- entity/entity.go | 10 ++++++++-- query/getitems.go | 8 +++++++- query/getitems_test.go | 1 + query/query.go | 6 ++++++ query/resources.go | 7 +++++++ query/searchitems.go | 8 +++++++- query/searchitems_test.go | 1 + 7 files changed, 37 insertions(+), 4 deletions(-) diff --git a/entity/entity.go b/entity/entity.go index eeb3c8e..306bf21 100644 --- a/entity/entity.go +++ b/entity/entity.go @@ -67,8 +67,14 @@ type GenPriceInfo struct { } type Item struct { - ASIN string - DetailPageURL string + ASIN string + DetailPageURL string + CustomerReviews *struct { + Count *int `json:",omitempty"` + StarRating *struct { + Value *float64 `json:",omitempty"` + } `json:",omitempty"` + } `json:",omitempty"` BrowseNodeInfo *struct { BrowseNodes []struct { Id string diff --git a/query/getitems.go b/query/getitems.go index 3b1fa96..9049c17 100644 --- a/query/getitems.go +++ b/query/getitems.go @@ -50,7 +50,7 @@ func (q *GetItems) EnableBrowseNodeInfo() *GetItems { return q } -//Images sets the resource of Images +//EnableImages sets the resource of Images func (q *GetItems) EnableImages() *GetItems { q.With().Images() return q @@ -74,6 +74,12 @@ func (q *GetItems) EnableParentASIN() *GetItems { return q } +//EnableCustomerReviews sets the resource of CustomerReviews +func (q *GetItems) EnableCustomerReviews() *GetItems { + q.With().CustomerReviews() + return q +} + /* Copyright 2019 Spiegel and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/query/getitems_test.go b/query/getitems_test.go index 6c14041..536fa5b 100644 --- a/query/getitems_test.go +++ b/query/getitems_test.go @@ -85,6 +85,7 @@ func TestResourcesInGetItems(t *testing.T) { {q: NewGetItems("", "", "").EnableItemInfo(), str: `{"Operation":"GetItems","Resources":["ItemInfo.ByLineInfo","ItemInfo.ContentInfo","ItemInfo.ContentRating","ItemInfo.Classifications","ItemInfo.ExternalIds","ItemInfo.Features","ItemInfo.ManufactureInfo","ItemInfo.ProductInfo","ItemInfo.TechnicalInfo","ItemInfo.Title","ItemInfo.TradeInInfo"]}`}, {q: NewGetItems("", "", "").EnableOffers(), str: `{"Operation":"GetItems","Resources":["Offers.Listings.Availability.MaxOrderQuantity","Offers.Listings.Availability.Message","Offers.Listings.Availability.MinOrderQuantity","Offers.Listings.Availability.Type","Offers.Listings.Condition","Offers.Listings.Condition.SubCondition","Offers.Listings.DeliveryInfo.IsAmazonFulfilled","Offers.Listings.DeliveryInfo.IsFreeShippingEligible","Offers.Listings.DeliveryInfo.IsPrimeEligible","Offers.Listings.DeliveryInfo.ShippingCharges","Offers.Listings.IsBuyBoxWinner","Offers.Listings.LoyaltyPoints.Points","Offers.Listings.MerchantInfo","Offers.Listings.Price","Offers.Listings.ProgramEligibility.IsPrimeExclusive","Offers.Listings.ProgramEligibility.IsPrimePantry","Offers.Listings.Promotions","Offers.Listings.SavingBasis","Offers.Summaries.HighestPrice","Offers.Summaries.LowestPrice","Offers.Summaries.OfferCount"]}`}, {q: NewGetItems("", "", "").EnableParentASIN(), str: `{"Operation":"GetItems","Resources":["ParentASIN"]}`}, + {q: NewGetItems("", "", "").EnableCustomerReviews(), str: `{"Operation":"GetItems","Resources":["CustomerReviews.Count","CustomerReviews.StarRating"]}`}, } for _, tc := range testCases { diff --git a/query/query.go b/query/query.go index 937139b..eebddef 100644 --- a/query/query.go +++ b/query/query.go @@ -111,6 +111,12 @@ func (q *Query) ParentASIN() *Query { return q } +//CustomerReviews sets the resource of CustomerReviews resource +func (q *Query) CustomerReviews() *Query { + q.enableResources[resourceCustomerReviews] = true + return q +} + /* Copyright 2019 Spiegel and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/query/resources.go b/query/resources.go index 7e7b0ce..2bb3678 100644 --- a/query/resources.go +++ b/query/resources.go @@ -9,6 +9,7 @@ const ( resourceOffers //Offers resource resourceSearchRefinements //SearchRefinements resource resourceParentASIN //ParentASIN resource + resourceCustomerReviews //CustomerReviews resource ) var ( @@ -74,6 +75,11 @@ var ( resourcesParentASIN = []string{ "ParentASIN", } + //CustomerReviews resource + resourcesCustomerReviews = []string{ + "CustomerReviews.Count", + "CustomerReviews.StarRating", + } resourcesMap = map[resource][]string{ resourceBrowseNodeInfo: resourcesBrowseNodeInfo, //BrowseNodeInfo resource resourceImages: resourcesImages, //Images resource @@ -81,6 +87,7 @@ var ( resourceOffers: resourcesOffers, //Offers resource resourceSearchRefinements: resourcesSearchRefinements, //SearchRefinements resource resourceParentASIN: resourcesParentASIN, //ParentASIN resource + resourceCustomerReviews: resourcesCustomerReviews, //CustomerReviews resource } ) diff --git a/query/searchitems.go b/query/searchitems.go index c3ac7bb..4f9c360 100644 --- a/query/searchitems.go +++ b/query/searchitems.go @@ -50,7 +50,7 @@ var ( searchTypes = []RequestFilter{Actor, Artist, Author, Brand, Keywords, Title} ) -//RequestFilters adds RequestFilter to Query instance +//Request adds RequestFilter to Query instance func (q *SearchItems) Request(request RequestFilter, value interface{}) *SearchItems { if request.findIn(requestsOfSearchItems) { q.With().RequestFilters(RequestMap{request: value}) @@ -102,6 +102,12 @@ func (q *SearchItems) EnableParentASIN() *SearchItems { return q } +//EnableCustomerReviews sets the enableCustomerReviews flag in SearchItems instance +func (q *SearchItems) EnableCustomerReviews() *SearchItems { + q.With().CustomerReviews() + return q +} + /* Copyright 2019 Spiegel and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/query/searchitems_test.go b/query/searchitems_test.go index be06d46..f051394 100644 --- a/query/searchitems_test.go +++ b/query/searchitems_test.go @@ -172,6 +172,7 @@ func TestResourcesInSearchItems(t *testing.T) { {q: NewSearchItems("", "", "").EnableOffers(), str: `{"Operation":"SearchItems","Resources":["Offers.Listings.Availability.MaxOrderQuantity","Offers.Listings.Availability.Message","Offers.Listings.Availability.MinOrderQuantity","Offers.Listings.Availability.Type","Offers.Listings.Condition","Offers.Listings.Condition.SubCondition","Offers.Listings.DeliveryInfo.IsAmazonFulfilled","Offers.Listings.DeliveryInfo.IsFreeShippingEligible","Offers.Listings.DeliveryInfo.IsPrimeEligible","Offers.Listings.DeliveryInfo.ShippingCharges","Offers.Listings.IsBuyBoxWinner","Offers.Listings.LoyaltyPoints.Points","Offers.Listings.MerchantInfo","Offers.Listings.Price","Offers.Listings.ProgramEligibility.IsPrimeExclusive","Offers.Listings.ProgramEligibility.IsPrimePantry","Offers.Listings.Promotions","Offers.Listings.SavingBasis","Offers.Summaries.HighestPrice","Offers.Summaries.LowestPrice","Offers.Summaries.OfferCount"]}`}, {q: NewSearchItems("", "", "").EnableSearchRefinements(), str: `{"Operation":"SearchItems","Resources":["SearchRefinements"]}`}, {q: NewSearchItems("", "", "").EnableParentASIN(), str: `{"Operation":"SearchItems","Resources":["ParentASIN"]}`}, + {q: NewSearchItems("", "", "").EnableCustomerReviews(), str: `{"Operation":"SearchItems","Resources":["CustomerReviews.Count","CustomerReviews.StarRating"]}`}, } for _, tc := range testCases {