Piilotin blogistani toistaiseksi Amazonin kirja- ja musiikkisuositukset, koska en ole lisännyt pitkään aikaan mitään uutta niihin. Ajattelin kuitenkin kertoa lyhyesti millä tekniikalla ne voi toteuttaa Djangossa ja Pythonissa.

Perustana toimii Boto, joka on Python-kielinen kirjasto kaikille Amazonin web-serviceille. Se kattaa pääasiassa pilvipalvelut, kuten EC2:n ja S3:n, mutta sopii myös Product Advertising API:n käyttöön.

Oma koodini näyttää suurin piirtein tältä:

class ProductManager(models.Manager):
    def get_amazon_xml(self, asin):
        """Get product info from Amazon service."""
        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.co.uk')
        aws_conn.SignatureVersion = '2'
        params = dict(
            Service='AWSECommerceService',
            Version='2009-10-01',
            SignatureVersion=aws_conn.SignatureVersion,
            AWSAccessKeyId=settings.AWS_ACCESS_KEY_ID,
            AssociateTag=settings.AWS_ASSOCIATE_TAG,
            Operation='ItemLookup',
            ItemId=asin,
            ResponseGroup='ItemAttributes,Images',
            Timestamp=time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime()))
        qs, signature = aws_conn.get_signature(params, 'GET', '/onca/xml')
        qs = '/onca/xml?' + qs + '&Signature=' + urllib.quote(signature)
        return ET.parse(aws_conn._mexe(verb, qs, None, headers={}))

Tuossa haetaan tuotteen tiedot XML:nä ASIN-koodin perusteella. Python-henkisesti koko homma hoituu muutamalla rivillä koodia ,vaikkakin osa riveistä on vähän pitkiä, kun parametrejä tarvitaan niin paljon. Parametrien määrä johtuu siitä, että Boto tukee samalla geneerisellä rajapinnalla kaikkia Amazonin eri palveluita. Oleellisinta koko hommassa on aws_conn.get_signature(), joka allekirjoittaa hakupyynnön.

Amazonin APIn hyödyntämiseen tarvitsee AWS_ASSOCIATE_TAGin, AWS_ACCESS_KEY_ID:n ja AWS_SECRET_ACCESS_KEYn, jotka on esimerkissä tallennettu Djangon settings-asetuksiin. Nämä saa kun rekisteröityy Amazonin yhteistyökumppaniksi.