示例#1
0
        public SearchResults Search(SearchResultsRequest searchResultsRequest)
        {
            HttpWebRequest request       = CatalogRequestBuilder.ConstructSearchRequest(apiKey, searchResultsRequest);
            SearchResults  searchResults = ProcessBodylessRequest(request).ToObject <SearchResults>();

            return(searchResults);
        }
示例#2
0
        public void TestSearch()
        {
            SearchResultsRequest searchResultsRequest = new SearchResultsRequest();

            searchResultsRequest.Query             = "halo";
            searchResultsRequest.IncludeAttributes = true;
            searchResultsRequest.Offset            = 10;
            searchResultsRequest.Limit             = 10;
            searchResultsRequest.DataOutputs       = new EnumTypes.DataOutputType[] {
                EnumTypes.DataOutputType.PRODUCTS,
                EnumTypes.DataOutputType.CATEGORIES,
                EnumTypes.DataOutputType.REFINEMENTS
            };
            searchResultsRequest.Offers = new EnumTypes.OfferType[] {
                EnumTypes.OfferType.ALL
            };

            SearchResults searchResults = client.Search(searchResultsRequest);

            Assert.IsTrue(searchResults.TotalResultSize > 0);
            Assert.IsNotNull(searchResults.Categories);
            Assert.IsTrue(searchResults.Categories.Count > 0);
            Assert.IsNotNull(searchResults.Products);
            Assert.IsTrue(searchResults.Products.Count > 0);
            Assert.IsNotNull(searchResults.RefinementGroups);
            Assert.IsTrue(searchResults.RefinementGroups.Count > 0);
            Assert.IsTrue(searchResults.Products[0].ParentCategoryPaths.Count > 0);
            Assert.IsTrue(searchResults.Products[0].ParentCategoryPaths[0].ParentCategories.Count > 0);
            Assert.IsFalse(string.IsNullOrEmpty(searchResults.Products[0].ParentCategoryPaths[0].ParentCategories[0].Id));
            Assert.IsFalse(string.IsNullOrEmpty(searchResults.Products[0].ParentCategoryPaths[0].ParentCategories[0].Name));
        }
示例#3
0
        public static HttpWebRequest ConstructSearchRequest(string apiKey, SearchResultsRequest searchResultsRequest)
        {
            NameValueCollection queryParams = new NameValueCollection();

            queryParams.Add("apikey", apiKey);

            if (searchResultsRequest.Query != null)
            {
                queryParams.Add("q", searchResultsRequest.Query);
            }
            if (searchResultsRequest.ProductIds != null)
            {
                queryParams.Add("pids", searchResultsRequest.ProductIds);
            }
            if (searchResultsRequest.CategoryId != null || searchResultsRequest.RefinementIds != null)
            {
                string ids = FormatterUtils.CombineCategoryAndRefinementIds(searchResultsRequest.CategoryId, searchResultsRequest.RefinementIds);
                queryParams.Add("ids", ids);
            }
            if (searchResultsRequest.ListId != null)
            {
                queryParams.Add("listid", searchResultsRequest.ListId);
            }
            if (searchResultsRequest.Field != null)
            {
                queryParams.Add("searchfield", EnumUtils.StringValueOf(searchResultsRequest.Field));
            }
            if (searchResultsRequest.IncludeAttributes != null)
            {
                queryParams.Add("includeattributes", searchResultsRequest.IncludeAttributes.ToString().ToLower());
            }
            if (searchResultsRequest.DataOutputs != null)
            {
                queryParams.Add("dataoutput", FormatterUtils.FormatDataOutput(searchResultsRequest.DataOutputs));
            }
            if (searchResultsRequest.Offers != null)
            {
                queryParams.Add("offers", FormatterUtils.FormatOffer(searchResultsRequest.Offers));
            }
            if (searchResultsRequest.Sort != null)
            {
                queryParams.Add("sort", EnumUtils.StringValueOf(searchResultsRequest.Sort));
            }
            if (searchResultsRequest.Offset != null)
            {
                queryParams.Add("offset", searchResultsRequest.Offset.ToString().ToLower());
            }
            if (searchResultsRequest.Limit != null)
            {
                queryParams.Add("limit", searchResultsRequest.Limit.ToString().ToLower());
            }

            string queryString = HttpUtils.ToQueryString(queryParams);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Constants.URL_PREFIX + "/catalog/v4/search/" + queryString);

            request.Method = "GET";
            request.Accept = "application/json";

            return(request);
        }
        /// <summary>
        /// Searches for products.
        /// </summary>
        /// <param name="searchResultsRequest">The search results request.</param>
        /// <returns>The search results response.</returns>
        public SearchResultsResponse Search(SearchResultsRequest searchResultsRequest)
        {
            SearchResultsResponse searchResultsResponse = null;

            // Prepare request
            NameValueCollection queryParams = new NameValueCollection();
            if (searchResultsRequest.Term != null)
            {
                queryParams.Add("term", searchResultsRequest.Term);
            }
            if (searchResultsRequest.Offset != null)
            {
                queryParams.Add("offset", searchResultsRequest.Offset.ToString());
            }
            if (searchResultsRequest.NrProducts != null)
            {
                queryParams.Add("nrProducts", searchResultsRequest.NrProducts.ToString());
            }
            if (searchResultsRequest.SortingMethod != null)
            {
                queryParams.Add("sortingMethod", EnumUtils.stringValueOf(searchResultsRequest.SortingMethod));
            }
            if (searchResultsRequest.SortingAscending != null)
            {
                queryParams.Add("sortingAscending", searchResultsRequest.SortingAscending.ToString());
            }
            if (searchResultsRequest.IncludeProducts != null)
            {
                queryParams.Add("includeProducts", searchResultsRequest.IncludeProducts.ToString());
            }
            if (searchResultsRequest.IncludeCategories != null)
            {
                queryParams.Add("includeCategories", searchResultsRequest.IncludeCategories.ToString());
            }
            if (searchResultsRequest.IncludeRefinements != null)
            {
                queryParams.Add("includeRefinements", searchResultsRequest.IncludeRefinements.ToString());
            }
            if (searchResultsRequest.IncludeAttributes != null)
            {
                queryParams.Add("includeAttributes", searchResultsRequest.IncludeAttributes.ToString());
            }

            string queryString = ToQueryString(queryParams);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL_PREFIX + "/catalog/v3/searchresults/" + queryString);
            request.Method = "GET";

            // Handle request
            AuthUtils.HandleRequest(request, accessKeyId, secretAccessKey, null, queryParams);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            // Load XML document
            if (HttpStatusCode.OK == response.StatusCode)
            {
                XmlSerializer ser = new XmlSerializer(typeof(SearchResultsResponse));
                object obj = ser.Deserialize(response.GetResponseStream());
                searchResultsResponse = (SearchResultsResponse)obj;
                response.Close();
            }

            return searchResultsResponse;
        }
示例#5
0
        /// <summary>
        /// Searches for products.
        /// </summary>
        /// <param name="searchResultsRequest">The search results request.</param>
        /// <returns>The search results response.</returns>
        public SearchResultsResponse Search(SearchResultsRequest searchResultsRequest)
        {
            SearchResultsResponse searchResultsResponse = null;

            // Prepare request
            NameValueCollection queryParams = new NameValueCollection();

            if (searchResultsRequest.Term != null)
            {
                queryParams.Add("term", searchResultsRequest.Term);
            }
            if (searchResultsRequest.Offset != null)
            {
                queryParams.Add("offset", searchResultsRequest.Offset.ToString());
            }
            if (searchResultsRequest.NrProducts != null)
            {
                queryParams.Add("nrProducts", searchResultsRequest.NrProducts.ToString());
            }
            if (searchResultsRequest.SortingMethod != null)
            {
                queryParams.Add("sortingMethod", EnumUtils.stringValueOf(searchResultsRequest.SortingMethod));
            }
            if (searchResultsRequest.SortingAscending != null)
            {
                queryParams.Add("sortingAscending", searchResultsRequest.SortingAscending.ToString());
            }
            if (searchResultsRequest.IncludeProducts != null)
            {
                queryParams.Add("includeProducts", searchResultsRequest.IncludeProducts.ToString());
            }
            if (searchResultsRequest.IncludeCategories != null)
            {
                queryParams.Add("includeCategories", searchResultsRequest.IncludeCategories.ToString());
            }
            if (searchResultsRequest.IncludeRefinements != null)
            {
                queryParams.Add("includeRefinements", searchResultsRequest.IncludeRefinements.ToString());
            }
            if (searchResultsRequest.IncludeAttributes != null)
            {
                queryParams.Add("includeAttributes", searchResultsRequest.IncludeAttributes.ToString());
            }

            string         queryString = ToQueryString(queryParams);
            HttpWebRequest request     = (HttpWebRequest)WebRequest.Create(URL_PREFIX + "/catalog/v3/searchresults/" + queryString);

            request.Method = "GET";

            // Handle request
            AuthUtils.HandleRequest(request, accessKeyId, secretAccessKey, null, queryParams);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            // Load XML document
            if (HttpStatusCode.OK == response.StatusCode)
            {
                XmlSerializer ser = new XmlSerializer(typeof(SearchResultsResponse));
                object        obj = ser.Deserialize(response.GetResponseStream());
                searchResultsResponse = (SearchResultsResponse)obj;
                response.Close();
            }

            return(searchResultsResponse);
        }