Ошибка при синтаксическом анализе ответа MWS Boto - PullRequest
0 голосов
/ 02 июня 2018

С помощью boto можно очень легко проанализировать данные, полученные с помощью boto.mws.connection и list_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)

Вывести номер заказа Amazon:

123-456789-123456

И наоборот, если кто-то хочет проанализировать и изолировать конкретные данные с помощью операции get_matching_product_for_id, скажем, чтобы получить соответствующий ASIN для конкретного идентификатора продукта EAN:

# 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 ответов?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Решение было в ответе, как указал @Verbal_Kint.Используя мой пример выше, можно получить ASIN, копая дерево и обрабатывая атрибуты как списки, когда это необходимо.Я не совсем понял, почему некоторые атрибуты являются списками, а некоторые нет, но на этом этапе быстрая пробная версия и ошибка позволили мне найти решение:

b_asin = b.GetMatchingProductForIdResult[0].Products.Product[0].Identifiers.MarketplaceASIN.ASIN
print(b_asin)
0 голосов
/ 02 июня 2018

Ответ в вашем сообщении об ошибке.Я не использовал 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, который описывает ответ , найденный здесь .Это должно сказать вам точно, с чем вы имеете дело.В более общем смысле он описывает элементы здесь .

...