Что не так с этим запросом API рекламы продукта Amazon - PullRequest
0 голосов
/ 18 января 2012

Я продолжаю получать 400 Bad Request Error. Пожалуйста, кто-нибудь может сказать мне, что я делаю не так здесь ?? Я не хочу использовать библиотеки.

from requestmanager import RequestManager
from datetime import datetime
from urllib import quote

dt = quote(datetime.strftime(datetime.utcnow(), '%Y-%m-%d %H:%M:%S'))
sign = quote('mySecretAceessKey')
key = 'myKey'
if __name__ == '__main__':
    rP = RequestManager()
    url = 'http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId='+key+'&Operation=ItemLookup&ItemId=B003MWJKVI&ResponseGroup=Large&Timestamp='+dt+'&Signature='+ sign

    response = rP.getContent(url)
    content = response.RESPONSE

Я следую упомянутым шагам здесь .

1 Ответ

1 голос
/ 18 января 2012

Неверный формат вашей временной метки. Возьмите созданный вами URL, поместите его в свой браузер и посмотрите полученное вами XML-сообщение. Попробуйте создать свою метку времени так:

import time
dt = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())

После того, как я исправил это, я получил HTTPError: HTTP Error 403: Forbidden. Попытка URL в браузере говорит мне (среди прочего, что я отредактировал):

... <Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message></Error> ...

Я обнаружил, что по состоянию на 17 августа 2009 года Amazon требует, чтобы все запросы к их API рекламы продуктов были подписаны.

Следующая ссылка предоставляет очень хорошую методологию для создания необходимого URL, проверьте его: http://www.princesspolymath.com/princess_polymath/?p=182

...