def method(self, operation, **kwargs): aws_conn = AWSQueryConnection( aws_access_key_id=self.aws_access_key_id, aws_secret_access_key=self.aws_secret_access_key, is_secure=False, host='ecs.amazonaws.com') aws_conn.SignatureVersion = '2' kwargs.update(dict( Service='AWSECommerceService', Version=Parser.version, SignatureVersion=aws_conn.SignatureVersion, AWSAccessKeyId=self.aws_access_key_id, AssociateTag=self.aws_associate_tag, Timestamp=time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime()), Operation=operation, )) verb = 'GET' path = '/onca/xml' qs, signature = aws_conn.get_signature(kwargs, verb, path) qs = path + '?' + qs + '&Signature=' + urllib.quote(signature) xml_response = StringIO(aws_conn._mexe(verb, qs, None, headers={ 'User-Agent': 'AWSECommerceClient.py', }).read()) try: return Parser.parse_file(xml_response) except: # Log the original response and the exception. log.error("Error parsing response:\n"+xml_response.getvalue()) raise
def amz_call(self, call_params): AWS_ACCESS_KEY_ID = '1PKXRTEQQV19XXDW3ZG2' AWS_ASSOCIATE_TAG = 'whotookmybook-20' import time from boto.connection import AWSQueryConnection aws_conn = AWSQueryConnection( aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=Amz.AWS_SECRET_ACCESS_KEY, is_secure=False, host='ecs.amazonaws.com') aws_conn.SignatureVersion = '2' base_params = dict( Service='AWSECommerceService', Version='2008-08-19', SignatureVersion=aws_conn.SignatureVersion, AWSAccessKeyId=AWS_ACCESS_KEY_ID, AssociateTag=AWS_ASSOCIATE_TAG, Timestamp=time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime())) #http://stackoverflow.com/questions/38987/how-can-i-merge-two-python-dictionaries-as-a-single-expression params = dict(base_params, **call_params) verb = 'GET' path = '/onca/xml' qs, signature = aws_conn.get_signature(params, verb, path) qs = path + '?' + qs + '&Signature=' + urllib.quote(signature) return aws_conn._mexe(verb, qs, None, headers={})
def get(keywords): aws_conn = AWSQueryConnection( aws_access_key_id=ACCESS_KEY_ID, aws_secret_access_key=SECRET_ACCESS_KEY, is_secure=False, host="ecs.amazonaws.com") aws_conn.SignatureVersion = "2" params = dict( Service='AWSECommerceService', Version='2008-08-19', SignatureVersion=aws_conn.SignatureVersion, AWSAccessKeyId=ACCESS_KEY_ID, AssociateTag=ASSOCIATE_TAG, Operation="ItemSearch", SearchIndex="All", Keywords=keywords, ResponseGroup="ItemAttributes", Timestamp=time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime()), ) verb = 'GET' path = "/onca/xml" qs, signature = aws_conn.get_signature(params, verb, path) qs = path + '?' + qs + '&Signature=' + urllib.quote(signature) response = aws_conn._mexe(verb, qs, None, headers={}) content = response.read() tree = ET.fromstring(content) NS = tree.tag.split("}")[0][1:] res = [] for item in tree.find('{%s}Items' % NS).findall('{%s}Item' % NS): item_dic = {} attrs = item.find('{%s}ItemAttributes' % NS) if attrs is not None: isbn = attrs.find('{%s}ISBN' % NS) if isbn is not None: item_dic['ISBN'] = isbn.text title = attrs.find('{%s}Title' % NS) if title is not None: item_dic['Title'] = title.text author = attrs.find('{%s}Author' % NS) if author is not None: item_dic['Author'] = author.text if 'ISBN' in item_dic and 'Title' in item_dic: res.append(item_dic) return res
def get_ecs_response(params): """Call Amazon ECS with the given parameters and return the raw XML response""" try: aws_conn = AWSQueryConnection( aws_access_key_id=settings.AWS_ACCESS_KEY_ID, aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY, is_secure=False, host='ecs.amazonaws.com', ) aws_conn.SignatureVersion = '2' base_params = dict( Service='AWSECommerceService', Version='2008-08-19', SignatureVersion=aws_conn.SignatureVersion, AWSAccessKeyId=settings.AWS_ACCESS_KEY_ID, AssociateTag=settings.AWS_ASSOCIATE_TAG, Operation='ItemSearch', IdType='ASIN', ResponseGroup='Small', Timestamp=time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime()) ) if params: base_params.update(params) verb = 'GET' path = '/onca/xml' qs, signature = aws_conn.get_signature(base_params, verb, path) qs = path + '?' + qs + '&Signature=' + urllib.quote(signature) time.sleep(0.5) # throttle response = aws_conn._mexe(verb, qs, None, headers={}) resp = response.read() _log.debug("ECS Response: %s", resp) return resp except Exception, e: _log.debug("AWS ASIN call failed for params: %s", params) _log.debug(e) return u''
def create_amazon_book_by_asin(self, asin): AWS_ACCESS_KEY_ID = settings.AWS_ACCESS_KEY_ID AWS_ASSOCIATE_TAG = settings.AWS_ASSOCIATE_TAG AWS_SECRET_ACCESS_KEY = settings.AWS_SECRET_ACCESS_KEY search_index = 'Book' aws_conn = AWSQueryConnection( aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, is_secure=False, host='ecs.amazonaws.com') aws_conn.SignatureVersion = '2' params = dict( Service='AWSECommerceService', Version='2008-08-19', SignatureVersion=aws_conn.SignatureVersion, AWSAccessKeyId=AWS_ACCESS_KEY_ID, AssociateTag=AWS_ASSOCIATE_TAG, Operation='ItemLookup', ItemId=asin, ResponseGroup='ItemAttributes,Large, Images,Reviews', Timestamp=time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime())) verb = 'GET' path = '/onca/xml' qs, signature = aws_conn.get_signature(params, verb, path) qs = path + '?' + qs + '&Signature=' + urllib.quote(signature) #print "verb:", verb, "qs:", qs response = aws_conn._mexe(verb, qs, None, headers={}) returned_xml = self.raw_xml = myxml = str(response.read()) returned_xml = returned_xml.replace(" xmlns=\"http://webservices.amazon.com/AWSECommerceService/2008-08-19\"", '') doc = ElementTree.fromstring(returned_xml) try: self.title = doc.find('Items/Item/ItemAttributes/Title').text except: self.title = "" #self.author = doc.find('Items/Item/ItemAttributes/Author').text author_list = doc.findall('Items/Item/ItemAttributes/Author') for a in author_list: self.authors.append(a.text) try: self.edition = doc.find('Items/Item/ItemAttributes/Edition').text except: self.edition = "" try: self.list_price = doc.find('Items/Item/ItemAttributes/ListPrice/FormattedPrice').text except AttributeError: self.list_price = "" try: self.sale_price = doc.find('Items/Item/Offers/Offer/OfferListing/Price/FormattedPrice').text except AttributeError: self.sale_price = "" try: self.amount_saved = doc.find('Items/Item/Offers/Offer/OfferListing/AmountSaved/FormattedPrice').text except AttributeError: self.amount_saved = "" try: self.percentage_saved = doc.find('Items/Item/Offers/Offer/OfferListing/PercentageSaved').text except AttributeError: self.percentage_saved = "" try: self.ISBN = doc.find('Items/Item/ItemAttributes/ISBN').text except AttributeError: self.ISBN = "" try: self.ASIN = doc.find('Items/Item/ASIN').text except: self.ASIN = "" try: self.binding = doc.find('Items/Item/ItemAttributes/Binding').text except: self.binding = "" try: self.detail_url = doc.find('Items/Item/DetailPageURL').text except: self.detail_url = "" try: temp_date = doc.find('Items/Item/ItemAttributes/PublicationDate').text except: self.date = "" try: # convert to struct_time, then to datetime obj c = time.strptime(temp_date,"%Y-%m-%d") d = datetime.datetime(*c[:6]) self.publication_date = d except: self.publication_date = "" try: self.publisher = doc.find('Items/Item/ItemAttributes/Publisher').text # this should be a tag so it becomes a link to view more books by publisher except: self.publisher = "" try: self.pages = doc.find('Items/Item/ItemAttributes/NumberOfPages').text except AttributeError: self.page= "" try: self.lrg_image = doc.find('Items/Item/LargeImage/URL').text except AttributeError: self.lrg_img = "" try: self.med_image = doc.find('Items/Item/MediumImage/URL').text except AttributeError: self.med_image= "" try: self.tiny_image = doc.find('Items/Item/ImageSets/ImageSet/TinyImage/URL').text except AttributeError: self.tiny_image = "" editorials = doc.findall('Items/Item/EditorialReviews/EditorialReview') for reviews in editorials: if reviews.find('Source').text == "Product Description": self.description = reviews.find('Content').text else: ed = AmazonEditorial() ed.source = reviews.find('Source').text ed.content = reviews.find('Content').text self.editorial_reviews.append(ed) creators = doc.findall('Items/Item/ItemAttributes/Creator') for creator in creators: cr = AmazonBookCreator() cr.name = creator.text cr.role = creator.attrib['Role'] self.creators.append(cr)
''' import time import urllib from boto.connection import AWSQueryConnection import xml.etree.ElementTree as ET from django.conf import settings AWS_ACCESS_KEY_ID = settings.AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY = settings.AWS_SECRET_ACCESS_KEY AWS_ASSOCIATE_TAG = settings.AWS_ASSOCIATE_TAG aws_conn = AWSQueryConnection(aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, is_secure=False, host='ecs.amazonaws.com') aws_conn.SignatureVersion = '2' params = dict(Service='AWSECommerceService', Version='2008-08-19', SignatureVersion=aws_conn.SignatureVersion, AWSAccessKeyId=AWS_ACCESS_KEY_ID, AssociateTag=AWS_ASSOCIATE_TAG, Operation='ItemSearch', IdType='ASIN', SearchIndex='MP3Downloads', Sort='-releasedate', Keywords='"Will Dailey"', ResponseGroup='ItemIds', Timestamp=time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime())) verb = 'GET' path = '/onca/xml' qs, signature = aws_conn.get_signature(params, verb, path)
import xml.etree.ElementTree as ET from django.conf import settings AWS_ACCESS_KEY_ID = settings.AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY = settings.AWS_SECRET_ACCESS_KEY AWS_ASSOCIATE_TAG = settings.AWS_ASSOCIATE_TAG aws_conn = AWSQueryConnection( aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, is_secure=False, host="ecs.amazonaws.com", ) aws_conn.SignatureVersion = "2" params = dict( Service="AWSECommerceService", Version="2008-08-19", SignatureVersion=aws_conn.SignatureVersion, AWSAccessKeyId=AWS_ACCESS_KEY_ID, AssociateTag=AWS_ASSOCIATE_TAG, Operation="ItemSearch", IdType="ASIN", SearchIndex="MP3Downloads", Sort="-releasedate", Keywords='"Will Dailey"', ResponseGroup="ItemIds", Timestamp=time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime()), ) verb = "GET"