Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

from xml.dom.minidom import parseString
import re
import urllib
import hashlib
import hmac
import base64
from time import strftime, gmtime
from requests import request

domain ="http://webservices.amazon.in"
uri="/onca/xml"
method="GET"

params = {
            'Service':'AWSECommerceService',
            'AWSAccessKeyId': 'AKIAIRUCTFGTAU6O5SBA',
            'AssociateTag': 'wwwinstaprice-21',
            'Operation':'ItemSearch',
            'SearchIndex':'Electronics',
            'Sort':'salesrank',
            'Version':'2011-10-01'
        }

secret_key = "90AyycyFWbvJqck2yKdA/1Z3uDggR56TkHcPhA6O"

class Asin:
    def __init__(self, asin, brand, product_name):
        self.asin = asin
        self.brand = brand
        self.product_name = product_name

def calc_signature(method,request_description):
    sig_data = method + '\n' + domain.replace('http://', '').lower() + '\n' + uri + '\n' + request_description
    return base64.b64encode(hmac.new(secret_key, sig_data, hashlib.sha256).digest())

def get_timestamp():
        return strftime("%Y-%m-%dT%H:%M:%SZ", gmtime())

def get_best_seller_rank(browse_node, page):
    params['Timestamp'] = get_timestamp()
    params['BrowseNode'] = browse_node
    params['ItemPage'] = str(page)
    request_description = '&'.join(['%s=%s' % (k, urllib.quote(params[k], safe='-_.~').encode('utf-8')) for k in sorted(params)])
    signature = calc_signature(method,request_description)
    url = '%s%s?%s&Signature=%s' % (domain, uri, request_description, urllib.quote(signature))
    response = request(method, url)
    spString = re.sub('<\?.*\?>','',response.text)
    spString = "<dom>" + spString + "</dom>"
    dom = parseString(spString)
    items = dom.getElementsByTagName('Items')
    bestsellers = []
    for item in items:
        for itemDet in item.getElementsByTagName('Item'):
            asin =  itemDet.getElementsByTagName('ASIN')[0].firstChild.nodeValue
            try:
                brand =  itemDet.getElementsByTagName('ItemAttributes')[0].getElementsByTagName('Manufacturer')[0].firstChild.nodeValue
            except:
                brand = ""
            try:
                title = itemDet.getElementsByTagName('ItemAttributes')[0].getElementsByTagName('Title')[0].firstChild.nodeValue
            except:
                title= ""
            asin_obj = Asin(asin, brand, title)
            bestsellers.append(asin_obj.__dict__)
    return bestsellers
            
if __name__=='__main__':
    #mobiles 1389432031
    #tablets 1375458031
    for i in range(1,11):
        print get_best_seller_rank("1375458031", i)
        print "=========================="