protected static ProductContainer _getProducts(String search, int pageNum)
        {
            List<Product> products = new List<Product>();
            int pageCount = 0;
            int totalResults = 0;

            //prepare an ItemSearch request
            ItemSearchRequest request = new ItemSearchRequest();
            request.SearchIndex = "All";
            request.Keywords = search;
            request.ResponseGroup = new string[] { "ItemAttributes", "Small", "Images" };
            request.ItemPage = pageNum.ToString();

            ItemSearchResponse res = AmazonService.search(request);
            if (res.Items[0].Item != null)
            {
                foreach (var item in res.Items[0].Item)
                {
                    if (item == null) continue;
                    string url = item.DetailPageURL;

                    if (url.EndsWith("null"))
                        url = url.Remove(url.Length - 4);

                    int price = -1;
                    string formattedPrice = "";
                    if (item.ItemAttributes.ListPrice != null)
                    {
                        price = Convert.ToInt32(item.ItemAttributes.ListPrice.Amount);
                        formattedPrice = item.ItemAttributes.ListPrice.FormattedPrice;
                    }

                    Product product = new Product
                    {
                        Title = item.ItemAttributes.Title,
                        Link = url,
                        Image = item.MediumImage,
                        Price = price,
                        FormattedPrice = formattedPrice
                    };

                    products.Add(product);

                }
            }

            if (products.Count > 0)
            {
                totalResults = Convert.ToInt32(res.Items[0].TotalResults);
                if (totalResults > 0)
                {
                    if (totalResults <= Globals.ITEMS_PER_PAGE)
                        pageCount = 1;
                    else
                    {
                        pageCount = totalResults / Globals.ITEMS_PER_PAGE;
                        if (totalResults % Globals.ITEMS_PER_PAGE != 0)
                            pageCount++;
                    }
                }
            }

            return new ProductContainer
            {
                products = products,
                pageCount = pageCount,
                resultCount = totalResults
            };
        }
Example #2
0
        private void RetrieveProductsFromPages(int firstPage, int lastPage, int firstIndex )
        {
            errorOnSearch_ = false;
            errorMessage_ = "";

            // Batch requests in pairs of two. AMAZON Product Advertising API allows only two requests to be batched together [December 20th 2012]
            int currentIndex = 0;
            for (int pageNr = firstPage; pageNr <= lastPage; pageNr += 2 )
            {
                String itemPagesStr = (pageNr + 1 <= totalProducts_ / Globals.AMAZON_API_MAX_PRODUCTS_PER_PAGE) ? "&ItemSearch.1.ItemPage=" + pageNr + "&ItemSearch.2.ItemPage=" + (pageNr + 1) :
                                                                                                                  "&ItemPage=" + pageNr;
                String requestString = searchRequestHeader_ +
                                       "&ItemSearch.Shared.SearchIndex=" + searchIndex_ +
                                       itemPagesStr +
                                       "&ItemSearch.Shared.Keywords=" + searchKeywords_ +
                                       "&ItemSearch.Shared.Availability=Available" +
                                       "&ItemSearch.Shared.ResponseGroup=Small,Offers" +
                                       "&ItemSearch.Shared.Condition=All";

                String requestUrl = helper.Sign(requestString);
                XmlDocument doc = new XmlDocument();
                try
                {
                    WebRequest request = HttpWebRequest.Create(requestUrl);
                    WebResponse response = request.GetResponse();

                    doc.Load(response.GetResponseStream());
                }
                catch ( Exception e )
                {
                    errorOnSearch_ = true;
                    errorMessage_ = e.Message;
                    return;
                }

                // Check for error response
                XmlNodeList errorMessages = doc.GetElementsByTagName("Message");
                if (errorMessages != null && errorMessages.Count > 0)
                {
                    errorOnSearch_ = true;
                    errorMessage_ = errorMessages.Item(0).InnerText;
                    return;
                }

                foreach( XmlNode node in doc.GetElementsByTagName("Item") ) {
                    if (currentIndex >= firstIndex)
                    {
                        if (foundProducts_.Count == Globals.PRODUCTS_PER_PAGE)
                            break;

                        var product = new Product();
                        product.Title = node["ItemAttributes"]["Title"].InnerText;
                        product.DetailPageLink = node["DetailPageURL"].InnerText;
                        try
                        {
                            product.LowestNewPrice = (int.Parse(node["OfferSummary"]["LowestNewPrice"]["Amount"].InnerText, null) / 100.0);
                        }
                        catch
                        {
                            product.LowestNewPrice = null;
                        }
                        try
                        {
                            product.LowestUsedPrice = (int.Parse(node["OfferSummary"]["LowestUsedPrice"]["Amount"].InnerText, null) / 100.0);
                        }
                        catch
                        {
                            product.LowestUsedPrice = null;
                        }
                        foundProducts_.Add(product);
                    }
                    currentIndex++;
                }

            }
        }