Blame | Last modification | View Log | RSS feed
from xml.dom.minidom import parseStringimport reimport urllibimport hashlibimport hmacimport base64from time import strftime, gmtimefrom requests import requestdomain ="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 = asinself.brand = brandself.product_name = product_namedef calc_signature(method,request_description):sig_data = method + '\n' + domain.replace('http://', '').lower() + '\n' + uri + '\n' + request_descriptionreturn 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_nodeparams['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.nodeValuetry:brand = itemDet.getElementsByTagName('ItemAttributes')[0].getElementsByTagName('Manufacturer')[0].firstChild.nodeValueexcept:brand = ""try:title = itemDet.getElementsByTagName('ItemAttributes')[0].getElementsByTagName('Title')[0].firstChild.nodeValueexcept:title= ""asin_obj = Asin(asin, brand, title)bestsellers.append(asin_obj.__dict__)return bestsellersif __name__=='__main__':#mobiles 1389432031#tablets 1375458031for i in range(1,11):print get_best_seller_rank("1375458031", i)print "=========================="