| 20318 |
kshitij.so |
1 |
from xml.dom.minidom import parseString
|
|
|
2 |
import re
|
|
|
3 |
import urllib
|
|
|
4 |
import hashlib
|
|
|
5 |
import hmac
|
|
|
6 |
import base64
|
|
|
7 |
from time import strftime, gmtime
|
|
|
8 |
from requests import request
|
|
|
9 |
|
|
|
10 |
domain ="http://webservices.amazon.in"
|
|
|
11 |
uri="/onca/xml"
|
|
|
12 |
method="GET"
|
|
|
13 |
|
|
|
14 |
params = {
|
|
|
15 |
'Service':'AWSECommerceService',
|
|
|
16 |
'AWSAccessKeyId': 'AKIAIRUCTFGTAU6O5SBA',
|
|
|
17 |
'AssociateTag': 'wwwinstaprice-21',
|
|
|
18 |
'Operation':'ItemSearch',
|
|
|
19 |
'SearchIndex':'Electronics',
|
|
|
20 |
'Sort':'salesrank',
|
|
|
21 |
'Version':'2011-10-01'
|
|
|
22 |
}
|
|
|
23 |
|
|
|
24 |
secret_key = "90AyycyFWbvJqck2yKdA/1Z3uDggR56TkHcPhA6O"
|
|
|
25 |
|
|
|
26 |
class Asin:
|
|
|
27 |
def __init__(self, asin, brand, product_name):
|
|
|
28 |
self.asin = asin
|
|
|
29 |
self.brand = brand
|
|
|
30 |
self.product_name = product_name
|
|
|
31 |
|
|
|
32 |
def calc_signature(method,request_description):
|
|
|
33 |
sig_data = method + '\n' + domain.replace('http://', '').lower() + '\n' + uri + '\n' + request_description
|
|
|
34 |
return base64.b64encode(hmac.new(secret_key, sig_data, hashlib.sha256).digest())
|
|
|
35 |
|
|
|
36 |
def get_timestamp():
|
|
|
37 |
return strftime("%Y-%m-%dT%H:%M:%SZ", gmtime())
|
|
|
38 |
|
|
|
39 |
def get_best_seller_rank(browse_node, page):
|
|
|
40 |
params['Timestamp'] = get_timestamp()
|
|
|
41 |
params['BrowseNode'] = browse_node
|
|
|
42 |
params['ItemPage'] = str(page)
|
|
|
43 |
request_description = '&'.join(['%s=%s' % (k, urllib.quote(params[k], safe='-_.~').encode('utf-8')) for k in sorted(params)])
|
|
|
44 |
signature = calc_signature(method,request_description)
|
|
|
45 |
url = '%s%s?%s&Signature=%s' % (domain, uri, request_description, urllib.quote(signature))
|
|
|
46 |
response = request(method, url)
|
|
|
47 |
spString = re.sub('<\?.*\?>','',response.text)
|
|
|
48 |
spString = "<dom>" + spString + "</dom>"
|
|
|
49 |
dom = parseString(spString)
|
|
|
50 |
items = dom.getElementsByTagName('Items')
|
|
|
51 |
bestsellers = []
|
|
|
52 |
for item in items:
|
|
|
53 |
for itemDet in item.getElementsByTagName('Item'):
|
|
|
54 |
asin = itemDet.getElementsByTagName('ASIN')[0].firstChild.nodeValue
|
|
|
55 |
try:
|
|
|
56 |
brand = itemDet.getElementsByTagName('ItemAttributes')[0].getElementsByTagName('Manufacturer')[0].firstChild.nodeValue
|
|
|
57 |
except:
|
|
|
58 |
brand = ""
|
|
|
59 |
try:
|
|
|
60 |
title = itemDet.getElementsByTagName('ItemAttributes')[0].getElementsByTagName('Title')[0].firstChild.nodeValue
|
|
|
61 |
except:
|
|
|
62 |
title= ""
|
|
|
63 |
asin_obj = Asin(asin, brand, title)
|
|
|
64 |
bestsellers.append(asin_obj.__dict__)
|
|
|
65 |
return bestsellers
|
|
|
66 |
|
|
|
67 |
if __name__=='__main__':
|
|
|
68 |
#mobiles 1389432031
|
|
|
69 |
#tablets 1375458031
|
|
|
70 |
for i in range(1,11):
|
|
|
71 |
print get_best_seller_rank("1375458031", i)
|
|
|
72 |
print "=========================="
|