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 }; }
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++; } } }