上一篇文章提到了Amazon 上傳數據有三個步驟,但是每個步驟都需要構造服務和構造請求,服務是一樣的,請求各不相同;這個很容易理解,這三個步驟都需要和Amazon服務器交互,所以他們的服務構造是一樣的,但是三個步驟的功能各不相同,所以他們的請求(完成的功能)也不相同。
- 現在先來說SubmitFeed的時候需要的請求文件,下面是請求文件的代碼示例:
1 #region 構造請求 Submit Amazon信息 2 private SubmitFeedRequest GetSubmitFeedRequest(string fileName, string feedType)//傳入兩個參數:1.文件名稱 2.文件操作類別 3 { 4 SubmitFeedRequest request = new SubmitFeedRequest(); 5 request.Merchant = merchantId; 6 request.MarketplaceIdList = new IdList(); 7 request.MarketplaceIdList.Id = new List<string>(new string[] { marketplaceId }); 8 9 request.FeedContent = File.Open(fileName, FileMode.Open, FileAccess.Read); 10 11 request.ContentMD5 = MarketplaceWebServiceClient.CalculateContentMD5(request.FeedContent); 12 request.FeedContent.Position = 0; 13 14 request.FeedType = feedType; 15 16 return request; 17 } 18 #endregion
fileName是我們需要上傳的數據文件,feedType是這個文件的操作類別;feedType分為兩大類,XML和Text,feedType據體值見 http://docs.developer.amazonservices.com/zh_CN/feeds/Feeds_FeedType.html
當上傳的文件為Xml 格式時,常用的feedType為:
商品基本數據上傳------_POST_PRODUCT_DATA_
定價數據上傳-------_POST_PRODUCT_PRICING_DATA_
庫存數據上傳-------_POST_INVENTORY_AVAILABILITY_DATA_
商品圖片上傳-------_POST_PRODUCT_IMAGE_DATA_
商品關系上傳-------_POST_PRODUCT_RELATIONSHIP_DATA_
運費數據上傳------_POST_PRODUCT_OVERRIDES_DATA_
文件為Text 時,找到對應的feedType 即可。
上面的代碼中用到了,merchantId和marketplaceId,這兩個數據的值由商家提供。
上傳完數據之后,我們會得到一個feedSubmmissionId,這個就是我們這次操作的標識。下面的操作會用到。
- 上傳數據結束之后我們需要知道上傳操作執行的狀態,這里就要使用接口FeedSubmissionListRequest(),構造請求FeedSubmissionListRequest信息,下面是代碼示例:
1 #region 構造請求FeedSubmissionListRequest信息 2 private GetFeedSubmissionListRequest FeedSubmissionListRequest(string feedSubmmissionId) 3 { 4 5 GetFeedSubmissionListRequest request = new GetFeedSubmissionListRequest(); 6 request.Merchant = merchantId; 7 8 request.FeedSubmissionIdList = new IdList(); 9 request.FeedSubmissionIdList.Id = new List<string>(new string[] { feedSubmmissionId }); 10 11 return request; 12 } 13 #endregion
其中feedSubmmissionId由上傳數據得到。
注意這里需要的是merchantId和feedSubmmissionId的列表,示例中只提供了一個feedSubmmissionId,所以是查看一個操作的執行狀態。當執行狀態是_Done 時,就可以執行下一步操作了。
- 得到Amazon處理報告,使用FeedSubmissionResultRequest()接口,示例代碼如下:
1 #region 構造請求FeedSubmissionResultRequest信息 2 private GetFeedSubmissionResultRequest FeedSubmissionResultRequest(string feedSubmmissionId) 3 { 4 5 GetFeedSubmissionResultRequest request = new GetFeedSubmissionResultRequest(); 6 7 string path = feedSubmmissionId + ".xml";//保存結果至本地 8 FileStream stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite); 9 10 request.Merchant = merchantId; 11 request.FeedSubmissionId = feedSubmmissionId; 12 request.FeedSubmissionResult = stream; 13 14 return request; 15 } 16 #endregion
這里我們也用到了feedSubmmissionId,因為他是Amazon給我們的標識,通過他才能找到我們的操作。
這里將處理結果報告直接存放到本地。我一直沒想通,為什么返回的結果信息,是在構造請求的時候處理,為什么不是在得到結果后再設置保存路徑等信息。這個疑問我可能沒寫清,
至此構造請求已經簡述完畢。