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页面上使用了“Usage”子标题,因此我不确定会出现什么问题
有关添加的信息,我正在使用虚拟环境并显示我在此处安装了正确的软件包是我的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
答案 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是否具有互联网连接,如果没有其他工作,请尝试创建另一个访问密钥并使用它。