zoukankan      html  css  js  c++  java
  • Amazon MWS 上传数据 (二) 构造请求

    上一篇文章提到了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给我们的标识,通过他才能找到我们的操作。
    这里将处理结果报告直接存放到本地。我一直没想通,为什么返回的结果信息,是在构造请求的时候处理,为什么不是在得到结果后再设置保存路径等信息。这个疑问我可能没写清,

    至此构造请求已经简述完毕。 

  • 相关阅读:
    原型模式
    哈希表原理
    Pow共识算法
    C++虚函数的工作原理
    TCP三次握手与四次分手
    TCP重置报文段及RST常见场景分析
    Ping、Traceroute工作原理
    ARP协议
    Rust生命周期bound用于泛型的引用
    Linux下core dump
  • 原文地址:https://www.cnblogs.com/zjf1987/p/Amazon_Request.html
Copyright © 2011-2022 走看看