class ProductSearcher(object): MAX_RESULTS = 10 def __init__(self, config): self.api = AmazonAPIManger(config).get_api() def search(self, product_group, keyword, browse_node=None): """ :param product_group: search_index(string) :param keyword: free keyword (string) :return: list of Products instance """ product_items = self.api.item_search(product_group, Keywords=keyword, BrowseNode=browse_node) products = [] index = -1 for item in product_items: index += 1 if index == self.MAX_RESULTS: break browse_nodes = self.api.item_lookup(ItemId=item.ASIN, ResponseGroup='OfferListings,\ BrowseNodes,\ OfferSummary,\ Offers,\ Images') product = Product(item, browse_nodes) if (product.get_img_url('SmallImage') == 'null') or \ (product.get_img_url('MediumImage') == 'null' and product.get_img_url('LargeImage') == 'null'): index -= 1 continue if product.get_rating() == 'null' or product.get_review() == 'null' or product.get_price() == 'null': index -= 1 continue if float(product.get_rating()) < 4.0: index -= 1 continue products.append(product) return products
class ProductSearcherTests(unittest.TestCase): MAX_RESULTS = 13 def setUp(self): self.api = AmazonAPIManger(CONFIG).get_api() self.product_group = 'Shoes' self.keyword = 'Boots' self.seach = ProductSearcher(CONFIG) def test_search_sanity(self): our_products = [] products = self.seach.search(self.product_group, self.keyword) our_products_item = self.api.item_search(self.product_group, Keywords=self.keyword) for index, item in enumerate(our_products_item): if index == self.MAX_RESULTS: break browse_nodes = self.api.item_lookup(ItemId=item.ASIN, ResponseGroup='OfferListings,\ BrowseNodes,\ OfferSummary,\ Offers,\ Images') product = Product(item, browse_nodes) if (product.get_img_url('SmallImage') == 'null') or \ (product.get_img_url('MediumImage') == 'null' and product.get_img_url('LargeImage') == 'null'): index -= 1 continue if product.get_rating() == 'null' or \ product.get_review() == 'null' or product.get_price() == 'null': index -= 1 continue our_products.append(product) products_ASIN = [product.ASIN for product in products] our_products_ASIN = [product.ASIN for product in our_products] self.assertItemsEqual(products_ASIN,our_products_ASIN)