亚马逊上传数据,现有能操作的功能有很多:库存数量、跟踪号、价格、商品.......

我们可以设置FeedType值,根据需要,再上传对应的xml文件即可。

下面可以看看FeedType类型

这次我们拿同步价格为例子,首先我们来熟悉一下Amazon MWS 提供的上传接口实现流程。

详细流程可访问:http://docs.developer.amazonservices.com/zh_CN/feeds/Feeds_Overview.html

上传流程:

在此,简要说明一下大致的步骤和流程:

第一步:建立请求

    通过MWS提供的XML程序开发指南上,根据需求,找到对应的XSD和XML实例。XML程序开发指南下载地址:点击下载

    通过程序对XML进行拼接,生存一个XML文件,保存在本地。

    调用MWS客户端的SubmitFeed方法建立一个请求,设置FeedContent值为我们拼接生存的XML文件的流。

    在建立请求后,亚马逊接受到请求后,会返回一个FeedSubmissionId值。

第二步:上传数据

    调用GetFeedSubmissionList接口方法,将第一步操作返回的FeedSubmissionId值,设置到请求参数FeedSubmissionIdList中。

      此刻,获得Amazon的返回结果,我们可以通过FeedProcessingStatusList状态来判断数据是否上传完成。

当状态为" _DONE_" 时,说明已经上传成功,接着执行后续操作了。

    当状态为" _IN_PROGRESS_" ,此刻正在上次数据,如果数据量大的情况下,我建议大家Sleep 一会,个人建议Sleep时间设置为1—5分钟之间,视个人情况而定。

第三步:接受上传结果

在第二步的上传状态返回" _DONE_"之后,我们可以调用GetFeedSubmissionResult方法,设置第一步返回的FeedSubmissionId参数,来获得上传结果信息。

上传结果信息包含成功个数,失败的具体信息等。通过核对失败的信息,我们修改后可以继续上传。

这就是整个的流程,没以生硬的MWS文档来讲解,希望大家能够理解这么一个流程。

实例DEMO:

    /// <summary>
/// 上传数据客户端
/// </summary>
public class FeedClient
{ private FeedClient() { } public FeedClient(string feedType)
{
this.FeedType = feedType;
} /// <summary>
/// 上传类型
/// </summary>
string FeedType { get; set; } /// <summary>
/// 获得账户信息
/// </summary>
Account Account { get; set; } private MarketplaceWebServiceConfig GetConfig()
{
var config = new MarketplaceWebServiceConfig();
config.ServiceURL = Account.ServiceUrl;
return config;
} private MarketplaceWebServiceClient GetClient()
{
var config = this.GetConfig();
var client = new MarketplaceWebServiceClient(Account.AppName,
Account.AppVersion, Account.AccessKeyId, Account.SecretAccessKey, config);
return client;
} /// <summary>
/// Step 1: 提交XML或txt 上传文件,亚马逊服务端接受到数据,返回一个FeedSubmissionId
/// </summary>
/// <returns></returns>
public string SubmitFeed()
{
var client = GetClient();
var request = new SubmitFeedRequest();
request.FeedType = this.FeedType; //!上传商品数据
request.MarketplaceIdList = new IdList();
request.MarketplaceIdList.Id = new List<string> { Account.MarketplaceId }; request.Merchant = Account.MerchantId;
string filePath = @"D:\HUAGE.txt"; //PathHelper.CreateFile(Account.AppName, "FeedContent");
request.FeedContent = File.Open(filePath, FileMode.OpenOrCreate, FileAccess.Write);
request.ContentMD5 = MarketplaceWebServiceClient.CalculateContentMD5(request.FeedContent);
request.FeedContent.Position = ; var response = client.SubmitFeed(request);
var result = response.SubmitFeedResult;
return result.FeedSubmissionInfo.FeedSubmissionId;
} /// <summary>
/// Step 2: 提交一个SubmissionList,等待亚马逊返回"_DONE"状态,如果没有返回则一直等待。
/// </summary>
/// <param name="feedSubmissionId">feedSubmissionId</param>
/// <returns></returns>
public bool GetFeedSubmissionList(string feedSubmissionId)
{
bool isSuccess = true;
var client = GetClient();
var request = new GetFeedSubmissionListRequest();
request.FeedSubmissionIdList = new IdList();
request.FeedSubmissionIdList.Id = new List<string> { feedSubmissionId }; while (isSuccess)
{
var response = client.GetFeedSubmissionList(request);
var result = response.GetFeedSubmissionListResult; foreach (var item in result.FeedSubmissionInfo)
{
if (item.FeedProcessingStatus == "_Done")
{
isSuccess = false;
}
else
{
System.Threading.Thread.Sleep( * * ); //! 休息一会。
}
}
}
return isSuccess;
} /// <summary>
/// Step 3: 获得上传结果,如果没有错,亚马逊服务端返回处理报告,否则返回错误的上传数据内容。
/// </summary>
/// <param name="feedSubmissionId">feedSubmissionId</param>
/// <returns></returns>
public bool GetFeedSubmissionResult(string feedSubmissionId)
{
var client = GetClient();
var request = new GetFeedSubmissionResultRequest();
request.FeedSubmissionId = feedSubmissionId;
string filePath = PathHelper.CreateFile(Account.AppName, "FeedResult");
request.FeedSubmissionResult = File.Open(filePath, FileMode.Open, FileAccess.Read);
request.Merchant = Account.MerchantId; var response = client.GetFeedSubmissionResult(request);
if (response.IsSetGetFeedSubmissionResultResult())
{
var result = response.GetFeedSubmissionResultResult;
if (result.IsSetContentMD5())
{
return true;
}
}
return false;
} /// <summary>
/// 整合上传数据功能
/// </summary>
public bool SubmitFile()
{
var feedSubmissionId = SubmitFeed();
if (!string.IsNullOrEmpty(feedSubmissionId))
{
if (GetFeedSubmissionList(feedSubmissionId))
{
return GetFeedSubmissionResult(feedSubmissionId);
}
}
return false;
}
}

错误消息解决方案汇总:

      在上传过程中,经常会出现调用接口出现的异常,我将结合在工作中出现的异常实例。整理放出来,提供解决方案。

Amzon MWS API开发之 上传数据的更多相关文章

  1. Amzon MWS API开发之 请求报告

    时间一晃而过又过了两周,博客园更新的速度确实有点慢,今天我要分享的是对请求报告的调用. 在文档中,相信大家也看了下面这个流程图吧? 相关流程,在文档中也有细说,我就不一一去Copy了:http://d ...

  2. Amzon MWS API开发之订单接口

    Amazon订单接口是Amazon MWS 开发接口中的一大块,我们可以通过接口调用来获得订单数据. 在调用接口之前,首先我们要获得相关店铺商家的店铺密钥等信息.如下: 在此我将所有信息定义在一个类中 ...

  3. 微信的API都是通过https调用实现的,分为post方法调用和get方法调用。不需要上传数据的采用get方法(使用IntraWeb开发)

    首先需要明确的是,微信的API都是通过https调用实现的,分为post方法调用和get方法调用.不需要上传数据的采用get方法(例如获取AccessToken),而需要向微信服务器提交数据的采用po ...

  4. Amazon MWS 上传数据 (一) 设置服务

    Amazon 上传数据的流程为: 通过 SubmitFeed 操作.加密标头和所有必需的元数据(包括 FeedType 的值在内),来提交 XML 或文本型数据文件.正如亚马逊 MWS的所有提交内容一 ...

  5. Amazon MWS 上传数据 (三) 提交请求

    前面介绍了设置服务和构造请求,现在介绍提交请求. 上传数据,查询上传操作的工作状态,和处理上传操作返回的报告操作使用的Amazon API 分别为:SubmitFeed(),FeedSubmissio ...

  6. Amazon MWS 上传数据 (二) 构造请求

    上一篇文章提到了Amazon 上传数据有三个步骤,但是每个步骤都需要构造服务和构造请求,服务是一样的,请求各不相同:这个很容易理解,这三个步骤都需要和Amazon服务器交互,所以他们的服务构造是一样的 ...

  7. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  8. SharePoint REST API - 使用REST API和jQuery上传一个文件

    博客地址:http://blog.csdn.net/FoxDave 本篇主要通过两个代码示例来展示如何应用REST API和jQuery上传文件到SharePoint. 示例会使用REST接口和j ...

  9. 使用pycharm开发代码上传到GitLab和GitHub

    使用pycharm开发代码上传到GitLab和GitHub 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我这里主要是针对局域网的自减的GitLab服务器,python开发工程师如 ...

随机推荐

  1. HDU 1026 Ignatius and the Princess I(BFS+优先队列)

    Ignatius and the Princess I Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  2. abiword Related Pages

    Application Framework The 'af' directory contains all source code for the cross-platform application ...

  3. try-catch-finally块的运行机制

    try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 也许你的答案是在return之前,但往更细地说,我 ...

  4. 数据的加密传输——单片机上实现TEA加密解密算法

    各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性.常用的加密解密算法比如DES.RSA等,受限于单片机的内存和运算速度,实 ...

  5. HTTP -> Asp.net (第一篇)

    当用户在浏览器输入一个URL地址后,浏览器会发送一个请求到服务器.这时候在服务器上第一个负责处理请求的是IIS.然后IIS再根据请求的URL扩展名将请求分发给不同的ISAPI处理. 流程如下: 1.I ...

  6. 狗屎的asp.net core 果然发生了重大的变更

    狗屎的asp.net core  果然发生了重大的变更 ....仔细看官方的文档,想骂娘....你发布版本的时候,能不能先想好先设计好再发布?朝三暮四...大撒笔....你老这样变来变去,谁还敢碰你啊 ...

  7. shell字符串

    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 单引号 str='this ...

  8. JS闭包的概念

    原文地址:http://zhidao.baidu.com/link?url=f81iaijX6nzY99Wz43v-p_qZEn4cCaomT4LD6NH5jVtI0yK2V76VJWefih51vA ...

  9. Google map v3 using simple tool file google.map.util.js v 1.0

    /** * GOOGLE地图开发使用工具 * @author BOONYACHENGDU@GMAIL.COM * @date 2013-08-23 * @notice 地图容器的(div)z-inde ...

  10. DM6437 C64X+ EDMA 疑惑总结记录

    总结一下DM6437中的EDMA的使用出现的问题,方便以后再开发定位问题. 1.EDMA Link 和 Chain的区别 link实现了DMA的自动重加载(非静态模式),需要两个param chain ...