【问题标题】:Amazon Simple Product API error when looking up product查找产品时出现 Amazon Simple Product API 错误
【发布时间】:2016-07-02 17:31:06
【问题描述】:
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')

当我运行上面的代码时,它工作正常,我从打印函数中得到这个输出: <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 freeze 输出:

(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

【问题讨论】:

  • 您有多个帐户吗?您是否授权了脚本中使用的帐户而不是另一个帐户

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


【解决方案1】:

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

【讨论】:

  • 在我的情况下,这项工作就像我在英国一样,我必须做 amazon = AmazonAPI(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, region="UK")
【解决方案2】:

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

编辑:


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

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

导入日志
logging.basicConfig(level=logging.DEBUG)

应显示以下请求 url:

调试:bottlenose.api:亚马逊网址: http://webservices.amazon.co.uk/onca/xml?AWSAccessKeyId=&AssociateTag=&ItemId=B00EOE0WKQ&Operation=ItemLookup&ResponseGroup=Large&S 服务=AWSECommerceService&Timestamp=&Version=2013-08-01&Signature=

您可以在浏览器中访问它,并且应该会看到返回的 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 连接,如果没有其他工作,请尝试创建另一个访问密钥并使用它。

【讨论】:

  • 谢谢 - 我已经完成了这个过程来获取我的 assoc 标签,assoc access api 和 dsecret 密钥。也许我遗漏了一些东西,但我之前已经遵循了这些步骤。
猜你喜欢
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2016-05-11
相关资源
最近更新 更多