2016-03-07 27 views
1

我正在嘗試使用亞馬遜MWS製作網絡應用程序。用戶可以添加,列出,刪除他們的產品在這個應用程序,並列出他們的訂單。如何解析此報表製表符分隔的響應?亞馬遜MWS

要列出他們的產品,我試圖使用Reports API與「_GET_MERCHANT_LISTINGS_DATA_」。但是這種方法返回時帶有非常差的製表符分隔的響應。另外,當我使用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_」報告更好的結果?

或者我該如何解析這個製表符分隔的字符串?

謝謝。

回答

1

你真的有兩種選擇來從亞馬遜,製表符分隔和XML獲取批量數據。實際上,Excel中的製表符分隔讀取效果相當好,而將值分割爲可用格式的例程非常簡單。不幸的是,亞馬遜在每個報告中都沒有提供XML或平面文件的選項,因此在大多數情況下您必須使用這兩種選項。

首先,您的標題顯示您需要列出所有列表處於活動狀態和非活動狀態。這將是報告的組合。如果你想要一個「全包」,包括問題列表,積極的房源,隱藏房源並取消列表,那麼您就需要三份報告:

  • _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 
} 

這是一個使用Amazon Inventory報告的代碼片段中的一個示例。基本上,我驗證頭是我期望他們是什麼(表明報告格式沒有改變),然後我分裂,清理空白,並從分裂的每個元素。

Python的拆分方法: Python Split

或者,你很可能把整個物流和直把它粘到Excel電子表格的Excel以來懂得如何在選項卡上劃。

編輯

剛一說明,在我的代碼示例我通過「分隔符」中分裂套路,但我從來沒有定義它。它被定義爲char[] delimiters = new char[] { '\t' };

0

例如使用:

lines = str(result.decode("utf-8")).split('\n') 
    for line in lines: 
     columns = str(line).split('\t') 
     print(columns)