首页 > 解决方案 > 解析 MWS Boto 响应时出错

问题描述

使用 boto 可以非常轻松地解析使用检索到的数据boto.mws.connectionlist_orders 并隔离特定的数据,例如订单号:

from boto.mws.connection import MWSConnection

merchantId = 'XXXXXXXXXXX' 
marketplaceId = 'XXXXXXXXXXX' 
accessKeyId = 'XXXXXXXXXXX' 
secretKey = 'XXXXXXXXXXX' 

mws = MWSConnection(accessKeyId, secretKey, Merchant=merchantId) 

# ListMatchingProducts
a = mws.list_orders(CreatedAfter='2018-05-24T12:00:00Z', MarketplaceId = [marketplaceId])
# retrieve order number within parsed response
a_orderid = a.ListOrdersResult.Orders.Order[0].AmazonOrderId
print(a_orderid)

输出亚马逊订单号:

123-456789-123456

相反,如果要使用该get_matching_product_for_id操作解析和隔离特定数据,假设要获取特定 EAN 产品 ID 的相应 ASIN:

# GetMatchingProductForId (retrieving product info using EAN code)
b = mws.get_matching_product_for_id(MarketplaceId=marketplaceId,IdType="EAN",IdList=["5705260045710"])
# retrieve ASIN for product within result
b_asin = b.GetMatchingProductForIdResult.Products.Product.MarketplaceASIN

抛出以下错误:

Traceback (most recent call last):
  File "C:\Users\alexa\Desktop\API_Amazon_get_matching_product_for_id.py", line 20, in <module>
    b_asin = b.GetMatchingProductForIdResult.Products.Product.MarketplaceASIN
AttributeError: 'list' object has no attribute 'Products'

谁能弄清楚为什么?还是有更好的方法来解析boto.mws.connection响应?

标签: pythonpython-3.xamazon-web-servicesbotoamazon-mws

解决方案


答案在您的错误消息中。我有一段时间没有使用 boto 了,但甚至没有尝试运行您的示例,您就可以知道问题出在这里:

b_asin = b.GetMatchingProductForIdResult.Products.Product.MarketplaceASIN

错误说:

AttributeError: 'list' object has no attribute 'Products'

向后工作,我们可以看出 python 正在尝试访问一个名为Products但对象是一个列表的属性。

列表也是如此b.GetMatchingProductForIdResult。尝试print一下,看看你会得到什么。遍历它并打印元素或打印第一个元素的目录以查看每个元素的属性。

print(dir(b.GetMatchingProductForIdResult[0]))

Traceback 是您的朋友,学习它、热爱它、生活它。

现在专门针对MWS:

Amazon 提供了一个描述此处找到的响应的 xsd 文件。这应该准确地告诉你你正在处理什么。更一般地,它描述了这里的元素。


推荐阅读