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

我们可以设置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. 子shell的$$

    http://blog.csdn.net/firefoxbug/article/details/7426109

  2. Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)

    *Delphi之通过代码示例学习XML解析.StringReplace的用法 这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <? ...

  3. Asp.net管道 (第二篇)

    从请求进入ASP.NET工作者进程,直至它到达最终的处理程序之前要经过一系列的步骤和过程,这个步骤和过程称为ASP.NET处理管道. Asp.net的处理管道流程如下: 语言描述如下: Asp.net ...

  4. perl 爬取某理财网站产品信息

    use LWP::UserAgent; use utf8; use DBI; $user="root"; $passwd="xxxxx"; $dbh=" ...

  5. C语言的本质(35)——共享库

    库用于将相似函数打包在一个单元中.然后这些单元就可为其他开发人员所共享,并因此有了模块化编程这种说法- 即,从模块中构建程序.Linux支持两种类型的库,每一种库都有各自的优缺点.静态库包含在编译时静 ...

  6. 自定义View的封装

    通过上一个博文的自定义View的编写后,发现代码其实挺复杂的,所有这里通过对代码进一步的优化,即用到了java的一个重要的特点:封装.通过对父类的方法进行封装,然后在子类继承后实现相应的函数即可,达到 ...

  7. hdu 5627 Clarke and MST(最大 生成树)

    Problem Description Clarke is a patient with multiple personality disorder. One day he turned into a ...

  8. Java程序员面试题集(86-115)

    摘 要:下面的内容包括Struts 2和Hibernate的常见面试题,虽然Struts 2在2013年6月曝出高危漏洞后已经显得江河日下,而Spring MVC的异军突起更加加速了Struts 2的 ...

  9. Follow-up letter to information seeking meeting, e-mail version

      Subject: (logical to recipient!) Thank you for meeting Tuesday, Nov. 23 November 26, 20XY Mr. Jame ...

  10. Json.Net序列化和反序列化设置

    首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一 ...