如何解析此报告制表符分隔的响应?亚马逊 MWS

How can I parse this report tab-delimited response? Amazon MWS

我正在尝试使用亚马逊 MWS 制作网络应用程序。用户可以在此应用中添加、列出、删除他们的产品,还可以列出他们的订单。

为了列出他们的产品,我尝试将报告 API 与“_GET_MERCHANT_LISTINGS_DATA_”一起使用。但是这种方法 returns 制表符分隔的响应非常糟糕。而且当我使用 RequestReport 方法发出请求时,它会将列表报告发送给店主。

这是虚拟响应示例:

b'item-name\titem-description\tlisting-id\tseller-sku\tprice\tquantity\topen-date\timage-url\titem-is-marketplace\tproduct-id-type\tzshop-shipping-fee\titem-note\titem-condition\tzshop-category1\tzshop-browse-path\tzshop-storefront-feature\tasin1\tasin2\tasin3\twill-ship-internationally\texpedited-shipping\tzshop-boldface\tproduct-id\tbid-for-featured-placement\tadd-delete\tpending-quantity\tfulfillment-channel\nPropars deneme urunu 2 CD-ROM CD-ROM\tThis is a development test product\t0119QL9BRT8\tPARS12344321\t0.5\t9\t2016-01-19 05:26:44 PST\t\ty\t4\t\t\t11\t\t\t\tB01ATBY2NA\t\t\t1\t\t\t8680925084020\t\t\t0\tDEFAULT\n'

是否有人知道在商店中列出产品的另一种方法,或者您有什么建议可以从“_GET_MERCHANT_LISTINGS_DATA_”报告中获得更好的结果?

或者我如何解析这个制表符分隔的字符串?

谢谢。

从亚马逊获取批量数据确实有两种选择,tab-delimited 和 xml。 tab-delimited 实际上读入 Excel 非常好,将值拆分为可用格式的例程非常简单。不幸的是,亚马逊不会在每份报告中为您提供 XML 或平面文件选项,因此在大多数情况下您必须混合使用两者。

首先,您的标题表明您需要列出所有有效和无效的列表。这将是报告的组合。如果您想要 'all inclusive' 包括问题列表、有效列表、隐藏列表和已取消列表,您将需要三份报告:

  • _GET_MERCHANT_LISTINGS_DATA_
  • _GET_MERCHANT_CANCELLED_LISTINGS_DATA_
  • _GET_MERCHANT_LISTINGS_DEFECT_DATA_

所有这些都是平面文件格式,因此您将有一个一致的方法来读取数据。在 c# 中,您只需读取一行,拆分该行并读取每个数组值。在 python 中将有一个类似的方法来执行此操作,这很可能在 SO 上有很好的记录。 C# 方法看起来像这样:

while ((line = file.ReadLine()) != null)
{
    if (counter == 0)
    {
       string[] tempParts = line.Split(delimiters);
       for (int i = 0; i < tempParts.Length; i++)
       {
           tempParts[i] = tempParts[i].Trim(); //Clean up remaining whitespace.
       }
       //Try and verify headers have not changed.
       if (!isReportHeaderValid(tempParts))
       {
           reportStatus.IsError = true;
           reportStatus.Exception = new Exception("Report Column headers were not validated!!!!");
        return;
       }
       counter++;
       continue;
   }
   counter++;
   string[] parts = line.Split(delimiters);
   for (int i = 0; i < parts.Length; i++)
   {
      parts[i] = parts[i].Trim(); //Clean up remaining whitespace.
   }
   //Do stuff with parts[1], parts[2] etc
}

这是我使用亚马逊库​​存报告的一段代码中的示例。基本上,我验证 headers 是我所期望的(表明报告格式没有改变),然后我拆分,清理白色 space,并处理拆分中的每个元素。

Python拆分方法: Python Split

或者,您可以获取整个流并将其直接粘贴到 excel 电子表格中,因为 Excel 了解如何在制表符上定界。

编辑

请注意,在我的代码示例中,我将 'delimiters' 传递给拆分例程,但我从未定义它。它被定义为 char[] delimiters = new char[] { '\t' };