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

我们可以设置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. 分西瓜(DFS)

    描述今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb ...

  2. BZOJ 1062 糖果雨

    http://www.lydsy.com/JudgeOnline/problem.php?id=1062 思路:找到平行四边形以后,变换坐标:y->y-kx,k为斜率,这样变成了矩形,然后只要二 ...

  3. POP3、SMTP、IMAP和Exchange都是个什么玩意?

    很多时候一直对POP3.SMTP.IMAP和Exchange等迷迷糊糊的.下面就整理说明一下: 当前常用的电子邮件协议有SMTP.POP3.IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别 ...

  4. 安卓手机用-----Exchange Activesync---同步Gmail日历联系人

    微软Exchange Activesync是一个跨平台的移动设备同步协议 支持很多手机操作系统,比如诺基亚的塞班.黑莓的palm.WindowsMobile.Iphone.安卓等.这些手机上都可以用这 ...

  5. ###Git 基础图解、分支图解、全面教程、常用命令###

    一.Git 基础图解 转自:http://www.cnblogs.com/yaozhongxiao/p/3811130.html Git 图解剖析 git中文件内容并没有真正存储在索引(.git/in ...

  6. java笔记之静态修饰附和单例设计模式

     第六天笔记 静态修饰符static: 一.static修饰成员变量: static用来修饰成员变量叫静态成员变量,没有static修饰的成员变量叫非静态成员变量 静态成员的访问方式: (1)   用 ...

  7. Selenium+Python浏览器调用:Firefox

    如何查看python selenium的API python -m pydoc -p  4567 说明: python -m pydoc表示打开pydoc模块,pydoc是查看python文档的首选工 ...

  8. 从决策树学习谈到贝叶斯分类算法、EM、HMM

    从决策树学习谈到贝叶斯分类算法.EM.HMM                (Machine Learning & Recommend Search交流新群:172114338) 引言 log ...

  9. Remove Duplicate Letters

    316. Remove Duplicate Letters Total Accepted: 2367 Total Submissions: 12388 Difficulty: Medium Given ...

  10. [Math]Divide Two Integers

    otal Accepted: 54356 Total Submissions: 357733 Difficulty: Medium Divide two integers without using ...