查找产品时出现Amazon Simple Product API错误

时间:2016-07-02 17:31:06

标签: python amazon-web-services python-3.4

from amazon.api import AmazonAPI

AMAZON_ACCESS_KEY = "A******************A"
AMAZON_SECRET_KEY = "7***********************E"
AMAZON_ASSOC_TAG = "j*****-20"

amazon = AmazonAPI(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, region='US')
print(amazon)
#product = amazon.lookup(ItemId='B002RL8FBQ')

当我运行上面的代码时它工作正常,我从print函数得到这个输出: <amazon.api.AmazonAPI object at 0x7fb6e59f7b38>

因此,我的访问密钥,密钥和关联标记一切正常。

但是,如果我取消评论最后一行#product = amazon.lookup(ItemId='B00EOE0WKQ'),那么我会收到此错误追溯:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    product = amazon.lookup(ItemId='B00EOE0WKQ')
  File "/home/darren/Python_projects/amazon_wp/myvenv/lib/python3.4/site-packages/amazon/api.py", line 173, in lookup
    response = self.api.ItemLookup(ResponseGroup=ResponseGroup, **kwargs)
  File "/home/darren/Python_projects/amazon_wp/myvenv/lib/python3.4/site-packages/bottlenose/api.py", line 251, in __call__
    {'api_url': api_url, 'cache_url': cache_url})
  File "/home/darren/Python_projects/amazon_wp/myvenv/lib/python3.4/site-packages/bottlenose/api.py", line 212, in _call_api
    return urllib2.urlopen(api_request, timeout=self.Timeout)
  File "/usr/lib/python3.4/urllib/request.py", line 161, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.4/urllib/request.py", line 469, in open
    response = meth(req, response)
  File "/usr/lib/python3.4/urllib/request.py", line 579, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python3.4/urllib/request.py", line 507, in error
    return self._call_chain(*args)
  File "/usr/lib/python3.4/urllib/request.py", line 441, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.4/urllib/request.py", line 587, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request

我已经按照官方github的指示进行了这个https://github.com/yoavaviram/python-amazon-simple-product-api,而我正在使用的代码将会看到我在github页面上使用了“Usa​​ge”子标题,因此我不确定会出现什么问题

有关添加的信息,我正在使用虚拟环境并显示我在此处安装了正确的软件包是我的pip冻结:

(myvenv) darren@my_comp:~/Python_projects/amazon_wp$ pip3 freeze
bottlenose==0.6.3
lxml==3.6.0
python-amazon-simple-product-api==2.1.0
python-dateutil==2.5.3
six==1.10.0

此外,我尝试了几种不同的asin数量的有效产品,并收到相同的错误消息。

我在ubuntu 14.04上使用python 3.4

2 个答案:

答案 0 :(得分:3)

我认为,问题在于地区。请选择有效值from here。解释可以是AWS可以验证您的凭据,但是当涉及“真实”调用时它会失败,因为“US”不是有效的区域......

答案 1 :(得分:-1)

您可能需要为API access帐户授权。这个step-by-step应该引导您完成它。

修改

我已经安装了所有相同的版本,并使用相同的python代码和我自己的密钥,它工作正常。 我遇到错误的唯一一次是我没有指定区域(你正在做的)。

我尝试的一件事是将以下代码添加到您的脚本中:

  

导入记录
  logging.basicConfig(级别= logging.DEBUG)

应显示以下请求网址:

  

DEBUG:bottlenose.api:亚马逊网址:   http://webservices.amazon.co.uk/onca/xml?AWSAccessKeyId=&安培; AssociateTag =安培;项目Id = B00EOE0WKQ&安培;操作= ItemLookup&安培; ResponseGroup =大&安培; S        ervice = AWSECommerceService&安培;时间戳=安培;版本= 2013年8月1日和安培;签名=

您可以在浏览器中访问它,并且应该看到返回的XML文档。如果它失败了,它应该会给你一个比pythonlib给你更好的错误。

例如,如果我访问https://associates-amazon.s3.amazonaws.com/scratchpad/index.html(从来没有让它为我工作),但它提供了该地区的基本URL列表。

我在.co.uk地区创建了我的关联帐户,因此我的请求仅对http://webservices.amazon.co.uk有效,如果我尝试查询http://webservices.amazon.com,我会看到:

  

我们计算的请求签名与您的签名不符   提供。检查您的AWS Secret Access Key和签名方法。请教   服务文档了解详情。

如果您在amazon.com上有一个关联帐户,请在不指定区域的情况下尝试,因为我认为该默认。除此之外,检查您的VM是否具有互联网连接,如果没有其他工作,请尝试创建另一个访问密钥并使用它。