Разбор XML из заказов Amazon MWS - PullRequest
0 голосов
/ 27 августа 2018

Так как несколько дней и много поисков в Google, я пытаюсь получить ответ здесь.

Я бы хотел проанализировать XML MWS Amazon для Google Sheets с помощью скрипта Google Apps.

Вызов API работает, и я могу записать ответ в ячейку на листе, но я не могу разбить элементы XML на отдельные ячейки.

Вот так я пытаюсь получить доступ к XMLэлементы:

var response = UrlFetchApp.fetch('https://mws.amazonservices.de/Orders/2013-09-01', options);  
var responseXml = response.getContentText();  

var Sheet_Temp = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Temp')
Sheet_Temp.getRange(1, 1).setValue(response)

var xmlDoc = XmlService.parse(responseXml);
var root = xmlDoc.getRootElement();

var ns = root.getNamespace();
Sheet_Report.getRange(1, 1).setValue(ns);

var row = new Array();

var feed = root.getChild("ListOrdersResult", ns).getChild("Orders", ns).getChild("Order", ns);
var AmazonOrderId = feed.getChildren("AmazonOrderId", ns).getValue();

Последняя строка вызывает ошибку:

TypeError: Функция getValue в Objekt [Элемент: https://mws.amazonservices.com/Orders/2013-09-01]/>] nicht gefunden (Zeile 497, Datei "Code")

И это короткая версия XML.Реальный файл имеет тысячи разных порядков:

<?xml version="1.0"?>
<ListOrdersResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
  <ListOrdersResult>
    <Orders>
      <Order>
        <LatestShipDate>2018-01-03T09:07:08Z</LatestShipDate>
        <OrderType>StandardOrder</OrderType>
        <PurchaseDate>2018-01-01T00:03:57Z</PurchaseDate>
        <BuyerEmail>7vndn9example@marketplace.amazon.de</BuyerEmail>
        <AmazonOrderId>306-8775721-example</AmazonOrderId>
        <IsReplacementOrder>false</IsReplacementOrder>
        <LastUpdateDate>2018-01-03T09:37:38Z</LastUpdateDate>
        <NumberOfItemsShipped>1</NumberOfItemsShipped>
        <ShipServiceLevel>Expedited</ShipServiceLevel>
        <OrderStatus>Shipped</OrderStatus>
        <SalesChannel>Amazon.de</SalesChannel>
        <IsBusinessOrder>false</IsBusinessOrder>
        <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
        <PaymentMethodDetails>
          <PaymentMethodDetail>Standard</PaymentMethodDetail>
        </PaymentMethodDetails>
        <BuyerName>Fabi example</BuyerName>
        <OrderTotal>
          <CurrencyCode>EUR</CurrencyCode>
          <Amount>10.95</Amount>
        </OrderTotal>
        <IsPremiumOrder>false</IsPremiumOrder>
        <EarliestShipDate>2018-01-03T09:07:08Z</EarliestShipDate>
        <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
        <FulfillmentChannel>AFN</FulfillmentChannel>
        <PaymentMethod>Other</PaymentMethod>
        <ShippingAddress>
          <City>Winnenden</City>
          <PostalCode>71364</PostalCode>
          <StateOrRegion>Baden-Württemberg</StateOrRegion>
          <CountryCode>DE</CountryCode>
          <Name>Fabian example</Name>
          <AddressLine2>example 1</AddressLine2>
        </ShippingAddress>
        <IsPrime>false</IsPrime>
        <ShipmentServiceLevelCategory>Expedited</ShipmentServiceLevelCategory>
        <SellerOrderId>306-8775721-example</SellerOrderId>
      </Order>
      <Order>
        <LatestShipDate>2018-01-13T17:37:01Z</LatestShipDate>
        <OrderType>StandardOrder</OrderType>
        <PurchaseDate>2018-01-01T03:17:35Z</PurchaseDate>
        <BuyerEmail>004xssfxexample@marketplace.amazon.de</BuyerEmail>
        <AmazonOrderId>306-1651353-example</AmazonOrderId>
        <IsReplacementOrder>false</IsReplacementOrder>
        <LastUpdateDate>2018-01-13T18:07:23Z</LastUpdateDate>
        <NumberOfItemsShipped>1</NumberOfItemsShipped>
        <ShipServiceLevel>Standard</ShipServiceLevel>
        <OrderStatus>Shipped</OrderStatus>
        <SalesChannel>Amazon.de</SalesChannel>
        <IsBusinessOrder>false</IsBusinessOrder>
        <NumberOfItemsUnshipped>0</NumberOfItemsUnshipped>
        <PaymentMethodDetails>
          <PaymentMethodDetail>Standard</PaymentMethodDetail>
        </PaymentMethodDetails>
        <BuyerName>F. example</BuyerName>
        <OrderTotal>
          <CurrencyCode>EUR</CurrencyCode>
          <Amount>15.15</Amount>
        </OrderTotal>
        <IsPremiumOrder>false</IsPremiumOrder>
        <EarliestShipDate>2018-01-13T17:37:01Z</EarliestShipDate>
        <MarketplaceId>A1PA6795UKMFR9</MarketplaceId>
        <FulfillmentChannel>AFN</FulfillmentChannel>
        <PaymentMethod>Other</PaymentMethod>
        <ShippingAddress>
          <City>Golling</City>
          <PostalCode>3381</PostalCode>
          <StateOrRegion>Niederösterreich</StateOrRegion>
          <CountryCode>AT</CountryCode>
          <Name>Franz example</Name>
          <AddressLine2>example 9</AddressLine2>
        </ShippingAddress>
        <IsPrime>false</IsPrime>
        <ShipmentServiceLevelCategory>Standard</ShipmentServiceLevelCategory>
        <SellerOrderId>306-1651353-example</SellerOrderId>
      </Order>
    </Orders>
    <CreatedBefore>2018-01-01T12:00:00Z</CreatedBefore>
  </ListOrdersResult>
  <ResponseMetadata>
    <RequestId>aea97379-21ae-4431-a16d-4a6569c4124b</RequestId>
  </ResponseMetadata>
</ListOrdersResponse>

Как получить этот XML в листе Google?

Редактировать: я внес некоторые изменения, но теперь я получаю следующую ошибку:

TypeError: Функция getValue в Objekt [Элемент: https://mws.amazonservices.com/Orders/2013-09-01]/>] nicht gefunden (Zeile 497, Datei "Code")

1 Ответ

0 голосов
/ 29 августа 2018

Хорошо, у меня всё работает.Вот мое решение:

var response = UrlFetchApp.fetch('https://mws.amazonservices.de/Orders/2013-09-01', options);  
var responseXml = response.getContentText();  
var Sheet_Orders = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Orders')

var document = XmlService.parse(responseXml);
var root = document.getRootElement();
var namespace = document.getRootElement().getNamespace();

var orders = root.getChild("ListOrdersResult", namespace).getChild("Orders", namespace).getChildren("Order", namespace);
var laenge = orders.length;

for (var i = 0; i < orders.length; i++) {
  var Country = orders[i].getChild("ShippingAddress", namespace).getChild("CountryCode", namespace).getValue();
  var ShipDate = orders[i].getChild("LatestShipDate", namespace).getValue();
  var Amount = orders[i].getChild("OrderTotal", namespace).getChild("Amount", namespace).getValue();
  var Business = orders[i].getChild("IsBusinessOrder", namespace).getValue();
  Sheet_Orders.getRange([i+1], 1).setValue(ShipDate);
  Sheet_Orders.getRange([i+1], 2).setValue(Amount);
  Sheet_Orders.getRange([i+1], 3).setValue(Business);
  Sheet_Orders.getRange([i+1], 4).setValue(Country);
}
...