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页面的“使用”副标题中使用了什么,因此我不知道出了什么问题。
为了获得更多的信息,我正在使用一个虚拟环境,为了表明我安装了正确的软件包,这里是我的输出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此外,我尝试了几个不同的有效产品编号,并得到了相同的错误信息。
我在ubuntu 14.04上使用python 3.4
发布于 2016-07-10 12:32:49
我想,问题是地区问题。请选择有效值从这里开始。可以解释为AWS可以验证您的凭据,但是当涉及到“真正”调用时,它会失败,因为'US‘不是有效区域.
发布于 2016-07-04 21:41:21
您可能需要授权您的API访问帐户。这个分步应该会带你通过它。
编辑:
我已经安装了所有相同的版本,并且用自己的密钥使用相同的python代码,并且工作正常。我唯一一次遇到这个错误时,我没有指定区域(这显然是您正在做的)。
我想尝试的一件事是将以下代码添加到脚本中:
进口测井 logging.basicConfig(level=logging.DEBUG)
它应该显示以下请求url:
http://webservices.amazon.co.uk/onca/xml?AWSAccessKeyId=&AssociateTag=&ItemId=B00EOE0WKQ&Operation=ItemLookup&ResponseGroup=Large&S ervice=AWSECommerceService&Timestamp=&Version=2013-08-01&Signature=:DEBUG:bottlenose.api:Amazon网址
您可以在浏览器中访问该文档,并且应该会看到返回的XML文档。如果失败了,希望它会给您一个比pythonlib提供的错误更好的错误。
例如,如果我访问https://associates-amazon.s3.amazonaws.com/scratchpad/index.html (从未让它对我起作用),但它提供了该区域的基本URL列表。
我在.co.uk区域上创建了我的关联帐户,因此我的请求只对http://webservices.amazon.co.uk有效,如果我尝试查询http://webservices.amazon.com,我会看到:
我们计算的请求签名与您提供的签名不匹配。检查您的AWS秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。
如果您在amazon.com上有一个关联帐户,请尝试它,而不指定区域,因为我认为这是默认的。除上述内容外,请检查VM是否具有internet连接性,如果没有其他工作,请尝试创建另一个访问密钥并使用该密钥。
https://stackoverflow.com/questions/38162779
复制相似问题