如何从 boto 调用返回 XML?

问题描述 投票:0回答:2

我正在使用 boto 2.32.1 和 Python 2.7.6。我在使用 boto 的 mws 模块的 list_orders 函数获取我的亚马逊订单的 XML 数据时遇到问题。

这是我拨打的电话:

response = connection.list_orders(CreatedAfter='2014-08-26T05:53:44+00:00', 
   MarketplaceId=['XXXXXXXXXXXXX'])

这是

response
的值(明显删除了个人信息)

ListOrdersResponse{u'xmlns': u'https://mws.amazonservices.com/Orders/2013-09-01'}
(ListOrdersResult: ListOrdersResult{}
(CreatedBefore: u'2014-08-26T10:06:10Z', Orders: ^Orders^{}
(Order: [Order{}(***ORDER INFORMATION***)])), 
ResponseMetadata: ^ResponseMetadata^{}(RequestId: u'xxxxxxxxxx'))

这并不理想,因为我有另一个用于 eBay 销售的模块,该模块与 ebaysdk-python 返回的 XML 一起使用。 Amazon 的 XML 格式与 eBay 类似,因此如果我能够获得 Amazon 返回的 XML 而不是上面的格式,那就太棒了。

我注意到,如果我使用

boto.set_stream_logger('boto')
,它会打印返回的 XML,所以也许我可以以某种方式利用它?

这就是我想要退回的东西:

<ListOrdersResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
  <ListOrdersResult>
    <Orders>
      <Order>
        ***ORDER INFORMATION***
      </Order>
    </Orders>
    <CreatedBefore>2014-08-26T10:18:59Z</CreatedBefore>
  </ListOrdersResult>
  <ResponseMetadata>
    <RequestId>XXXXXXXXXXXXXXXXXXXXXXXXXXXXX</RequestId>
  </ResponseMetadata>
</ListOrdersResponse>

然后我可以使用 Python 的 xml.etree.ElementTree 来解析和处理数据。

python xml amazon-web-services boto amazon-mws
2个回答
3
投票

我认为没有官方支持的方法可以执行此操作,但您可以执行此操作以轻松获取原始 XML 响应:

# Set up
from boto.mws.connection import MWSConnection
MWSConnection._parse_response = lambda s, x, y, z: z

# Usage
result = az.get_matching_product_for_id(MarketplaceId="ATVPDKIKX0DER",
                                            SearchIndex="Books",
                                            IdType="ASIN",
                                            IdList=[0439023521])
# <?xml version="1.0"?>\n<GetMatchingProductForIdResponse xmlns...

0
投票

对于 boto3 和 s3,基于 docs

import boto3

s3 = boto3.client('s3')

# Create a function that prints the after-call event args.
def print_after_call_args(http_response, parsed, model, **kwargs):
    #print xml response
    print(http_response.text) 

# Register the function to an event
s3.meta.events.register('after-call.s3.ListObjectsV2', print_after_call_args)

s3.list_objects_v2(Bucket='my-bucket')

# <?xml version="1.0" encoding="UTF-8"?>...
© www.soinside.com 2019 - 2024. All rights reserved.