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

我们可以设置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 just a hook(线段树,区间修改)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. WPF安装部署小结

    开机启动 右击"MySetup">>"视图">>"注册表",在"HKEY_LOCAL-MACHINE&qu ...

  3. 常用两种数据交换格式之XML和JSON的比较

    目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...

  4. List 随机排序

    List<T> l = new List<T>(); l = l.Select(a => new { a, newID = Guid.NewGuid() }).Order ...

  5. java 下拉框级联及相关(转)

    ActionLintsner都实现此接口,其它监听器可以监听的事件都可以被它捕获 public interface ActionListener extends EventListenerThe li ...

  6. Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O

    Linux系统的I/O也就是一般所说的低级I/O--操作系统提供的基本IO服务,与os绑定,特定于Linux平台.而标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头 ...

  7. arm linux中添加开机启动

    微处理器:S5PV210操作系统:linux3.0.8 前言:    在产品中,基本上都要屏蔽arm开发板中linux系统的对外通信,只应该通过产品的相关APP做相关操作.    因此需要把该APP添 ...

  8. 几个js的linq实现

    几个js的linq实现 linqjs.codeplex.com jslinq.codeplex.com javascriptiqueryable.codeplex.com fromjs.codeple ...

  9. JavaScript prototype.js提升JavaScript开发效率

    参考链接:http://www.yiibai.com/prototype/ Prototype提供主要方法类别: Prototype概述 Prototype实用功能 Prototype实用方法 Pro ...

  10. java.lang.UnsatisfiedLinkError: no XXX in java.library.path

    其中涉及的测试源码如下: For those who didn't install Javawith default settings, a systematic way for solving JN ...