· 9 years ago · Oct 11, 2016, 09:30 AM
1# coding: utf-8
2
3from amazon.api import AmazonAPI
4from amazon.api import AmazonException, LookupException, AsinNotFound
5
6
7class AmazonAPIWrapper(object):
8 """
9 pip install python-amazon-simple-product-api
10 """
11 def __init__(self, account):
12 self.account = account
13
14 def __enter__(self):
15 self.API = AmazonAPI(
16 self.account["ACCESS_KEY"],
17 self.account["SECRET_KEY"],
18 self.account["ASSOC_TAG"],
19 region = self.account["REGION"] if "REGION" in self.account else "US")
20 return self
21
22 def __exit__(self, exception_type, exception_value, traceback):
23 pass
24
25 def Lookup(self, **kwargs):
26 if "ItemId" not in kwargs:
27 raise AmazonException("Not Set ItemId")
28
29 if isinstance(kwargs["ItemId"], list):
30 kwargs["ItemId"] = ",".join(kwargs["ItemId"])
31
32 response = self.API.lookup(**kwargs)
33 if hasattr(response, "__iter__"):
34 for item in response:
35 self.item = item
36 yield self
37 else:
38 self.item = response
39 yield self
40
41 def inches2cm(self, data):
42 return round(float(data) / 100 * 2.54, 2)
43
44 def pounds2g(self, data):
45 return round(float(data) / 100 * 0.4536 * 1000, 2)
46
47 @property
48 def region(self):
49 return self.API.region
50
51 @property
52 def asin(self):
53 return self.item.asin
54
55 @property
56 def title(self):
57 return self.item.title
58
59 @property
60 def category(self):
61 if len(self.item.browse_nodes) > 0:
62 for i in range(len(self.item.browse_nodes)):
63 name = self.item.browse_nodes[i].ancestors[-1].name
64 if name == "jp-stores":
65 continue
66 elif name is not None:
67 break
68
69 if hasattr(name, "text"):
70 return name.text
71 else:
72 return name
73 else:
74 return None
75
76 @property
77 def browsenode_id(self):
78 if len(self.item.browse_nodes) > 0:
79 for i in range(len(self.item.browse_nodes)):
80 name = self.item.browse_nodes[i].ancestors[-1].name
81 if name == "jp-stores":
82 continue
83 else:
84 return self.item.browse_nodes[i].id
85 else:
86 return None
87
88 @property
89 def image_url(self):
90 if self.item.medium_image_url:
91 return str(self.item.medium_image_url)
92
93 @property
94 def attributes(self):
95 return self.item.get_attributes([
96 "PackageDimensions.Weight",
97 "PackageDimensions.Width",
98 "PackageDimensions.Height",
99 "PackageDimensions.Length"
100 ])
101
102 @property
103 def weight(self):
104 if "PackageDimensions.Weight" in self.attributes:
105 return self.pounds2g(self.attributes["PackageDimensions.Weight"])
106
107 @property
108 def raw_weight(self):
109 if "PackageDimensions.Weight" in self.attributes:
110 return self.attributes["PackageDimensions.Weight"]
111
112 @property
113 def width(self):
114 if "PackageDimensions.Width" in self.attributes:
115 return self.inches2cm(self.attributes["PackageDimensions.Width"])
116
117 @property
118 def raw_width(self):
119 if "PackageDimensions.Width" in self.attributes:
120 return self.attributes["PackageDimensions.Width"]
121
122 @property
123 def height(self):
124 if "PackageDimensions.Height" in self.attributes:
125 return self.inches2cm(self.attributes["PackageDimensions.Height"])
126
127 @property
128 def raw_height(self):
129 if "PackageDimensions.Height" in self.attributes:
130 return self.attributes["PackageDimensions.Height"]
131
132 @property
133 def length(self):
134 if "PackageDimensions.Length" in self.attributes:
135 return self.inches2cm(self.attributes["PackageDimensions.Length"])
136
137 @property
138 def raw_length(self):
139 if "PackageDimensions.Length" in self.attributes:
140 return self.attributes["PackageDimensions.Length"]
141
142 @property
143 def price(self):
144 price, currency = self.item.price_and_currency
145 return price
146
147 @property
148 def publication_date(self):
149 return self.item.publication_date
150
151 @property
152 def release_date(self):
153 return self.item.release_date
154
155 @property
156 def sales_rank(self):
157 return self.item.sales_rank
158
159 @property
160 def total_new(self):
161 return self.item._safe_get_element_text('OfferSummary.TotalNew')
162
163 @property
164 def brand(self):
165 return self.item.brand
166
167 @property
168 def manufacturer(self):
169 return self.item.manufacturer
170
171 @property
172 def ean(self):
173 return self.item.ean
174
175if __name__ == "__main__":
176
177 account = {
178 "ACCESS_KEY": "ACCESS_KEY",
179 "SECRET_KEY": "SECRET_KEY",
180 "ASSOC_TAG": "associate-tag"
181 }
182
183 with AmazonAPIWrapper(account) as API:
184 try:
185 #API.setAsinFromFile(file)
186 #api.Asin = ["B00F5JOIT0", "B00TS0UK0I", "B00O9GPEAC"]
187 API.Asin = "B017VFHDKQ"
188 for item in API.Lookup():
189 print(item.total_new)
190 except Exception as e:
191 print(e)