ThumbnailUtility.py
import base64 import datetime import hmac import sha import sys import re import urllib import xml.dom.minidom AWS_ACCESS_KEY_ID = 'your-access-key-id' AWS_SECRET_ACCESS_KEY = 'your-super-secret-key' # This one is for an individual thumbnail... def create_thumbnail(site_url, img_size): def generate_timestamp(dtime): return dtime.strftime("%Y-%m-%dT%H:%M:%SZ") def generate_signature(operation, timestamp, secret_access_key): my_sha_hmac = hmac.new(secret_access_key, operation + timestamp, sha) my_b64_hmac_digest = base64.encodestring(my_sha_hmac.digest()).strip() return my_b64_hmac_digest timestamp_datetime = datetime.datetime.utcnow() timestamp_list = list(timestamp_datetime.timetuple()) timestamp_list[6] = 0 timestamp_tuple = tuple(timestamp_list) timestamp = generate_timestamp(timestamp_datetime) signature = generate_signature('Thumbnail', timestamp, AWS_SECRET_ACCESS_KEY) parameters = { 'AWSAccessKeyId': AWS_ACCESS_KEY_ID, 'Timestamp': timestamp, 'Signature': signature, 'Url': site_url, 'Action': 'Thumbnail', 'Size': img_size, } url = 'http://ast.amazonaws.com/?' result_xmlstr = urllib.urlopen(url, urllib.urlencode(parameters)).read() result_xml = xml.dom.minidom.parseString(result_xmlstr) image_url = result_xml.childNodes[0].getElementsByTagName('aws:Thumbnail')[0].firstChild.data return image_url # And this one is for a list def create_thumbnail_list(all_sites, img_size): def generate_timestamp(dtime): return dtime.strftime("%Y-%m-%dT%H:%M:%SZ") def generate_signature(operation, timestamp, secret_access_key): my_sha_hmac = hmac.new(secret_access_key, operation + timestamp, sha) my_b64_hmac_digest = base64.encodestring(my_sha_hmac.digest()).strip() return my_b64_hmac_digest timestamp_datetime = datetime.datetime.utcnow() timestamp_list = list(timestamp_datetime.timetuple()) timestamp_list[6] = 0 timestamp_tuple = tuple(timestamp_list) timestamp = generate_timestamp(timestamp_datetime) signature = generate_signature('Thumbnail', timestamp, AWS_SECRET_ACCESS_KEY) image_loc = {} image_num = [] image_size = {} count = 1 for s in all_sites: image_num = 'Thumbnail.%s.Url' % count image_loc[image_num] = s count += 1 parameters = { 'AWSAccessKeyId': AWS_ACCESS_KEY_ID, 'Timestamp': timestamp, 'Signature': signature, 'Action': 'Thumbnail', 'Thumbnail.Shared.Size': img_size, } parameters.update(image_loc) ast_url = 'http://ast.amazonaws.com/?' result_xmlstr = urllib.urlopen(ast_url, urllib.urlencode(parameters)).read() result_xml = xml.dom.minidom.parseString(result_xmlstr) image_urls = [] count = 0 for s in all_sites: image_urls.append(result_xml.childNodes[0].getElementsByTagName('aws:Thumbnail')[count].firstChild.data) count += 1 return image_urls
This is how you interact with this code for a single thumbnail:
>>> from ThumbnailUtility import * >>> create_thumbnail('kelvinism.com', 'Large') u'http://s3-external-1.amazonaws.com/alexa-thumbnails/A46FF6A30BECB0730455F2AB306EDC28605BC19Cl?Signature=XpsxgPey4b0JgreZA46XnvHVVLo%3D&Expires=1181110547&AWSAccessKeyId=1FVZ0JNEJDA5TK457CR2'
And for a list:
>>> from ThumbnailUtility import * >>> all_sites = ['kelvinism.com', 'alexa.com', 'vpslink.com'] >>> create_thumbnail_list(all_sites, 'Small') [u'http://s3-external-1.amazonaws.com/alexa-thumbnails/A46FF6A30BECB0730455F2AB306EDC28605BC19Cs?Signature=%2BfcOUKwH4xD9IH9o1vfto%2FMoALU%3D&Expires=1181110698&AWSAccessKeyId=1FVZ0JNEJDA5TK457CR2', u'http://s3-external-1.amazonaws.com/alexa-thumbnails/D798D8CE8F821FCC63159C92C85B70319E44D0EFs?Signature=6jriChrGM%2F8DoejN9dn9Dv3Lc5w%3D&Expires=1181110698&AWSAccessKeyId=1FVZ0JNEJDA5TK457CR2', u'http://s3-external-1.amazonaws.com/alexa-thumbnails/23529C34E0518AA9C2577653AC237D3647BA8D2Ds?Signature=5ksuwZx0I5TqXWL3Kt%2BWP6r2LQk%3D&Expires=1181110698&AWSAccessKeyId=1FVZ0JNEJDA5TK457CR2']
This is just a simple example to get your feet wet, maybe you'll find it useful. If you are wondering how to integrate this with Django, don't worry, I've got you covered.