Example #1
0
    def get_by_upc( self, upc ):
        query = ProductQuery.all().filter('upc =', upc)
        result = query.fetch(api_key)
        if result.total > 0:
            p = result.products[0]
        else:
            return None

        product, created = self.get_or_create(sku=p.sku)
        if created:
            product.product_id = p.product_id
            product.name = fix_signs(p.name)
            product.album_title = "" if getattr(p, 'album_title', "") is None else getattr(p, 'album_title', "")
            product.artist_name = "" if getattr(p, 'artist_name', "") is None else getattr(p, 'artist_name', "")
            product.sku_description = p.name if p.name else p.artist_name
            # get the lowest category in the hierarchy 
            product.category = Category.objects.get(category_id=p.category_path[-1]["id"])
            product.regular_price = p.regular_price
            product.sale_price = p.sale_price
            product.on_sale = p.on_sale
            product.new = p.new
            product.thumbnail_image = p.thumbnail_image
            product.medium_image = p.medium_image
            product.customer_review_average = p.customer_review_average
            product.customer_review_count = 0 if p.customer_review_count == None else p.customer_review_count
            product.url = "" if p.url is None else p.url
            product.cart_url = "" if p.add_to_cart_url is None else p.add_to_cart_url 
            product.save()
        return product 
Example #2
0
    def get_name(self):
        # check if the details are already there
        if self.product_id is None:
            query = ProductQuery.sku(self.sku).show_all()
            p = query.fetch(api_key)
            if p is None: 
                return {}

            self.product_id = p.product_id
            self.name = fix_signs(p.name)
            self.album_title = p.get('album_title', None)
            self.artist_name = p.get('artist_name', None)
            self.sku_description = p.name if p.name else p.artist_name
            # get the lowest category in the hierarchy 
            self.category = Category.objects.get(category_id=p.category_path[-1]["id"])
            self.regular_price = p.regular_price
            self.sale_price = p.sale_price
            self.on_sale = p.on_sale
            self.new = p.new
            self.thumbnail_image = p.thumbnail_image
            self.medium_image = p.medium_image
            self.customer_review_average = p.customer_review_average
            self.customer_review_count = p.customer_review_count
            self.url = p.url
            self.cart_url = p.add_to_cart_url

            self.save()

        return self.name
Example #3
0
    def get_by_sku( self, sku ):
        if self.filter(sku=sku).count() > 0:
            # exists in the db
            p = self.get(sku=sku)
            if p.product_id is not None:
                return p

        query = ProductQuery.sku(sku).show_all()
        p = query.fetch(api_key)
        if p is None:
            return None

        product, created = self.get_or_create(sku=p.sku)
        product.product_id = p.product_id

        product.name = fix_signs(p.name)
        product.album_title = "" if getattr(p, 'album_title', "") is None else getattr(p, 'album_title', "")
        product.artist_name = "" if getattr(p, 'artist_name', "") is None else getattr(p, 'artist_name', "")
        product.sku_description = p.name if p.name else p.artist_name
        # get the lowest category in the hierarchy 
        product.category, created = Category.objects.get_or_create(category_id=p.category_path[-1]["id"])
        product.regular_price = p.regular_price
        product.sale_price = p.sale_price
        product.on_sale = p.on_sale
        product.new = p.new
        product.thumbnail_image = "" if p.thumbnail_image is None else p.thumbnail_image
        product.medium_image = "" if p.medium_image is None else p.medium_image
        product.customer_review_average = 0.0 if p.customer_review_average is None else p.customer_review_average
        product.customer_review_count = 0 if p.customer_review_count == None else p.customer_review_count
        product.url = "" if p.url is None else p.url
        product.cart_url = "" if p.add_to_cart_url is None else p.add_to_cart_url 
        product.save()

        return product 
Example #4
0
 def query(self, url):
     p = {}
     r = requests.get(url, headers=self.headers)
     html = r.content
     if url.startswith('https://clearance.bestbuy.com'):
         original_price = re.findall(r'original-price">\$([\d.,]+)</span>', html, re.DOTALL)
         current_price = re.findall(r'<div class="your-price(?:.*?)">\$([\d.,]+)</div>', html, re.DOTALL)
         name = re.findall(r'<h1>(.*?)</h1>', html, re.DOTALL)
         sku = re.findall(r'<span><strong>SKU:</strong> ([\d]+)</span>', html, re.DOTALL)
         print original_price, current_price
         p = {
             'name': name[1],
             'type': 'None',
             'current_price': original_price[0],
             'original_price': current_price[0],
             'uuid':  sku[0],
         }
     else:
         try:
             price = re.findall(r'price">(?:\$|<span class="denominator">\$</span>)([\d.,]+)(?:</span>|</div>)', html, re.DOTALL)
             print price
             product_query = ProductQuery.sku(self.get_uuid(url)).show_all()
             api_url = product_query.url(self.api_key,  pid=int(self.get_pid(url)))
             print api_url, 0
             r = requests.get(api_url, headers=self.headers)
             j = json.loads(r.content)
             p = {
                 'name': j.get('name', None),
                 'type': j.get('type', None),
                 'current_price': price[0].replace(',', ''),
                 'original_price': price[1].replace(',', ''),
                 'uuid':  j.get('sku', None),
             }
         except:
             product_query = ProductQuery.sku(self.get_uuid(url)).show_all()
             api_url = product_query.url(self.api_key,  pid=int(self.get_pid(url)))
             print api_url, 1
             r = requests.get(api_url, headers=self.headers)
             j = json.loads(r.content)
             p = {
                 'name': j.get('name', None),
                 'type': j.get('type', None),
                 'current_price': j.get('salePrice', None),
                 'original_price': j.get('regularPrice', None),
                 'uuid':  j.get('sku', None),
             }
     return p
Example #5
0
    def get_by_product_id( self, product_id):
        query = ProductQuery.all().filter('product_id =', product_id)
        result = query.fetch(api_key)

        if result.total > 0:
            p = result.products[0]
        else:
            return None

        product, created = self.get_or_create(sku=p.sku)
        if created:
            product.name = fix_signs(p.name)
            product.album_title = "" if getattr(p, 'album_title', "") is None else getattr(p, 'album_title', "")
            product.artist_name = "" if getattr(p, 'artist_name', "") is None else getattr(p, 'artist_name', "")
            product.sku_description = p.name if p.name else p.artist_name

            product.url = "" if p.url is None else p.url
            product.cart_url = "" if p.add_to_cart_url is None else p.add_to_cart_url 
 
            product.save()
        return product
Example #6
0
    def search(self, s, page=1, me=None):
        results = {} 

        # search by name, artist_name, short description
        query = ProductQuery.all().extend('name =', "%s*"%s).extend('album_title =', "%s*"%s).extend('artist_name =', "%s*"%s).extend('short_description =', "%s*"%s)
        result = query.fetch(api_key, page=page)
        if result.total > 0:
            results['total_pages'] = result.total_pages
            results['products'] = []
            for p in result.products:
                #print sku
                if len(p.category_path) == 0:
                    continue
                product, created = self.get_or_create(sku=p.sku)
                if created:
                    product.product_id = p.product_id
                    product.name = fix_signs(p.name)
                    product.album_title = "" if getattr(p, 'album_title', "") is None else getattr(p, 'album_title', "")
                    product.artist_name = "" if getattr(p, 'artist_name', "") is None else getattr(p, 'artist_name', "")
                    product.sku_description = p.name if p.name else p.artist_name
                    # get the lowest category in the hierarchy 
                    #print p.category_path
                    product.category = Category.objects.get(category_id=p.category_path[-1]["id"])
                    product.regular_price = p.regular_price
                    product.sale_price = p.sale_price
                    product.on_sale = p.on_sale
                    product.new = p.new
                    product.thumbnail_image = "" if p.thumbnail_image is None else p.thumbnail_image
                    product.medium_image = "" if p.medium_image is None else p.medium_image
                    product.customer_review_average = 0.0 if p.customer_review_average is None else p.customer_review_average
                    product.customer_review_count = 0 if p.customer_review_count == None else p.customer_review_count
                    product.url = "" if p.url is None else p.url
                    product.cart_url = "" if p.add_to_cart_url is None else p.add_to_cart_url 

                    product.save()
                results['products'].append(product.details(me))
                        
        return results
Example #7
0
    def filter_category( self, cat_id, page=1, me=None):
        """
            :param cat_id: the BestBuy category ID
        """
        results = {} 

        query = ProductQuery.all().filter('category_path.id =', cat_id)
        result = query.fetch(api_key, page=page)
        if result.total > 0:
            results['total_pages'] = result.total_pages
            results['products'] = []
            for p in result.products:
                product, created = self.get_or_create(sku=p.sku)
                if created:
                    product.product_id = p.product_id
                    product.name = fix_signs(p.name)
                    product.album_title = "" if getattr(p, 'album_title', "") is None else getattr(p, 'album_title', "")
                    product.artist_name = "" if getattr(p, 'artist_name', "") is None else getattr(p, 'artist_name', "")
                    product.sku_description = p.name if p.name else p.artist_name
                    # get the lowest category in the hierarchy 
                    product.category = Category.objects.get(category_id=p.category_path[-1]["id"])
                    product.regular_price = p.regular_price
                    product.sale_price = p.sale_price
                    product.on_sale = p.on_sale
                    product.new = p.new
                    product.thumbnail_image = "" if p.thumbnail_image is None else p.thumbnail_image
                    product.medium_image = "" if p.medium_image is None else p.medium_image
                    product.customer_review_average = 0.0 if p.customer_review_average is None else p.customer_review_average
                    product.customer_review_count = 0 if p.customer_review_count == None else p.customer_review_count
                    product.url = "" if p.url is None else p.url
                    product.cart_url = "" if p.add_to_cart_url is None else p.add_to_cart_url 

                    product.save()
                results['products'].append(product.details(me))
                        
        return results
Example #8
0
#!/usr/bin/python
import os
import json
import time
import urllib2
import sys
from premix import ProductQuery

api_key='3xvhyc8utc852wrwhy34n8wk'

f2=open('products.txt','w')

product_query = ProductQuery.all().filter('search =', 'laptop')

results=product_query.fetch(api_key)

totalpages = results.total_pages
curpage = results.current_page

while (curpage < totalpages) :
	try:
 		cur_results = product_query.fetch(api_key, page=curpage)
        	begin = 1
		end =10 
        	curprod=begin
        	time.sleep(1)
		while curprod < end :
                	product = cur_results.products[curprod]
    			sku = product.sku
			webURL = 'http://api.remix.bestbuy.com/v1/products(sku='+str(sku)+')?format=json&apiKey=3xvhyc8utc852wrwhy34n8wk'
 			try:
Example #9
0
    def details(self, me=None):
        """
            me is Party object that signifies myself who's looking at info
        """
        # check if the details are already there
        if self.product_id is None:
            query = ProductQuery.sku(self.sku).show_all()
            p = query.fetch(api_key)
            if p is None: 
                return {}

            self.product_id = p.product_id
            self.name = fix_signs(p.name)
            product.album_title = "" if getattr(p, 'album_title', "") is None else getattr(p, 'album_title', "")
            product.artist_name = "" if getattr(p, 'artist_name', "") is None else getattr(p, 'artist_name', "")
            self.sku_description = p.name if p.name else p.artist_name
            # get the lowest category in the hierarchy 
            self.category = Category.objects.get(category_id=p.category_path[-1]["id"])
            self.regular_price = p.regular_price
            self.sale_price = p.sale_price
            self.on_sale = p.on_sale
            self.new = p.new
            self.thumbnail_image = "" if p.thumbnail_image is None else p.thumbnail_image
            self.medium_image = "" if p.medium_image is None else p.medium_image
            self.customer_review_average = 0.0 if p.customer_review_average is None else p.customer_review_average
            self.customer_review_count = 0 if p.customer_review_count == None else p.customer_review_count
            self.url = "" if p.url is None else p.url
            self.cart_url = "" if p.add_to_cart_url is None else p.add_to_cart_url 

            self.save()

        detail = {}

        detail['sku'] = str(self.sku)
        detail['product_id'] = str(self.product_id)
        detail['name'] = self.name
        detail['album_title'] = self.album_title
        detail['artist_name'] = self.artist_name
        # exclude most highlevel Best Buy category
        detail['category'] = self.category.name
        detail['regular_price'] = "%.2f"%self.regular_price
        detail['sale_price'] = "%.2f"%self.sale_price
        detail['on_sale'] = self.on_sale
        detail['new'] = self.new
        detail['thumbnail_image'] = self.thumbnail_image
        detail['medium_image'] = self.medium_image
        detail['customer_review_average'] = "%.1f"%(self.customer_review_average if self.customer_review_average else 0)
        detail['customer_review_count'] = str(self.customer_review_count)
    

        detail['wished_by'] = ""
        detail['bought_by'] = "" 
        detail['review_request'] = ""
        detail['num_wished'] = '0'
        detail['num_bought'] = '0'
        detail['num_requested'] = '0'
        detail['url'] = self.url
        detail['cart_url'] = self.cart_url

        if me is not None:

            # for experiment 1 and when nobody wishes or bought it
            if me.experiment.id == 2:
                # exclude reviews that I have requested and reviews that I have already replied
                reqs = ReviewRequest.objects.exclude(requester=me).filter(product=self, requester__in=me.friends()).exclude(replies__reviewer=me)
                if reqs.count() > 0:
                    detail['num_requested'] = str(reqs.count())
                    request_str = "Requested review by "
                    for q in reqs:
                        request_str += q.requester.first_name + ", "
                    detail['review_request'] = request_str[:-2]

                wishes = Wishlist.objects.filter(product=self, party__in=me.friends())
                if wishes.count() > 0:
                    detail['num_wished'] = str(wishes.count())
                    wish_str = "Wished by "
                    for w in wishes:
                        wish_str += w.party.first_name + ", "
                    detail['wished_by'] = wish_str[:-2] 
                purchases = TransactionLineItem.objects.filter(product=self, transaction__party__in=me.friends())
                if purchases.count() > 0:
                    detail['num_bought'] = str(purchases.count())
                    purchase_str = "Bought by "
                    for b in purchases:
                        purchase_str += b.transaction.party.first_name + ", "
                    detail['bought_by'] = purchase_str[:-2]
            elif me.experiment.id == 3:
                # exclude reviews that I have requested and reviews that I have already replied
                num_reqs = ReviewRequest.objects.exclude(requester=me).filter(product=self).exclude(replies__reviewer=me).count()
                if num_reqs > 0:
                    detail['num_requested'] = str(num_reqs)
                    detail['review_request'] = "%d people requested for review"%num_reqs if num_reqs > 1 else "%d person requested for review"%num_reqs

                num_wish = Wishlist.objects.filter(product=self).exclude(party=me).count()
                if num_wish > 0:
                    detail['num_wished'] = str(num_wish)
                    detail['wished_by'] = "%d people want this"%num_wish if num_wish > 1 else "%d person want this"%num_wish
                num_bought = TransactionLineItem.objects.filter(product=self).exclude(transaction__party=me).count()
                if num_bought > 0:
                    detail['num_bought'] = str(num_bought)
                    detail['bought_by'] = "%d people bought this"%num_bought if num_bought > 1 else "%d person bought this"%num_bought
            elif me.experiment.id == 4:
                # exclude reviews that I have requested and reviews that I have already replied
                reqs = ReviewRequest.objects.exclude(requester=me).filter(product=self, requester__in=me.friends()).exclude(replies__reviewer=me)
                if reqs.count() > 0:
                    detail['num_requested'] = str(reqs.count())
                    detail['review_request'] = "%d friends requested for review"%reqs.count() if reqs.count() > 1 else "%d friend requested for review"%reqs.count()

                num_wish = Wishlist.objects.filter(product=self).exclude(party=me).count()
                if num_wish > 0:
                    detail['num_wished'] = str(wishes.count())
                    detail['wished_by'] = "%d friends want this"%num_wish if num_wish > 1 else "%d friend want this"%num_wish
                num_bought = TransactionLineItem.objects.filter(product=self).exclude(transaction__party=me).count()
                if num_bought > 0:
                    detail['num_bought'] = str(bought.count())
                    detail['bought_by'] = "%d friends bought this"%num_bought if num_bought > 1 else "%d friend bought this"%num_bought

        return detail