Amzon MWS API开发之 上传数据
亚马逊上传数据,现有能操作的功能有很多:库存数量、跟踪号、价格、商品.......
我们可以设置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开发之 上传数据的更多相关文章
- Amzon MWS API开发之 请求报告
时间一晃而过又过了两周,博客园更新的速度确实有点慢,今天我要分享的是对请求报告的调用. 在文档中,相信大家也看了下面这个流程图吧? 相关流程,在文档中也有细说,我就不一一去Copy了:http://d ...
- Amzon MWS API开发之订单接口
Amazon订单接口是Amazon MWS 开发接口中的一大块,我们可以通过接口调用来获得订单数据. 在调用接口之前,首先我们要获得相关店铺商家的店铺密钥等信息.如下: 在此我将所有信息定义在一个类中 ...
- 微信的API都是通过https调用实现的,分为post方法调用和get方法调用。不需要上传数据的采用get方法(使用IntraWeb开发)
首先需要明确的是,微信的API都是通过https调用实现的,分为post方法调用和get方法调用.不需要上传数据的采用get方法(例如获取AccessToken),而需要向微信服务器提交数据的采用po ...
- Amazon MWS 上传数据 (一) 设置服务
Amazon 上传数据的流程为: 通过 SubmitFeed 操作.加密标头和所有必需的元数据(包括 FeedType 的值在内),来提交 XML 或文本型数据文件.正如亚马逊 MWS的所有提交内容一 ...
- Amazon MWS 上传数据 (三) 提交请求
前面介绍了设置服务和构造请求,现在介绍提交请求. 上传数据,查询上传操作的工作状态,和处理上传操作返回的报告操作使用的Amazon API 分别为:SubmitFeed(),FeedSubmissio ...
- Amazon MWS 上传数据 (二) 构造请求
上一篇文章提到了Amazon 上传数据有三个步骤,但是每个步骤都需要构造服务和构造请求,服务是一样的,请求各不相同:这个很容易理解,这三个步骤都需要和Amazon服务器交互,所以他们的服务构造是一样的 ...
- Resumable.js – 基于 HTML5 File API 的文件上传
Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...
- SharePoint REST API - 使用REST API和jQuery上传一个文件
博客地址:http://blog.csdn.net/FoxDave 本篇主要通过两个代码示例来展示如何应用REST API和jQuery上传文件到SharePoint. 示例会使用REST接口和j ...
- 使用pycharm开发代码上传到GitLab和GitHub
使用pycharm开发代码上传到GitLab和GitHub 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我这里主要是针对局域网的自减的GitLab服务器,python开发工程师如 ...
随机推荐
- Multi-Channel MAC for Ad Hoc Networks: Handling Multi-Channel Hidden Terminals Using A Single Transceiver
MAC协议 2004 这是一个单纯的Multi-Channel Ad Hoc场景,多信道,但不是DSA.没有PU,只是多信道利用问题,相对传统Ad Hoc,要解决的就是1)信道访问(如何使用多个信道) ...
- NFC应用(三)点对点(P2P)通信
点对点(P2P)模式允许两个NFC设备之间建立通信链接并交换数据,与读写器.卡模式不一样的就是,P2P模式下数据交互是双向的. P2P遵循ISO18092规范,建立链接后使用NDEF(NFC Data ...
- perl 爬取csdn
<pre name="code" class="python">use LWP::UserAgent; use POSIX; use HTML::T ...
- cf472C Design Tutorial: Make It Nondeterministic
C. Design Tutorial: Make It Nondeterministic time limit per test 2 seconds memory limit per test 256 ...
- cf471B MUH and Important Things
B. MUH and Important Things time limit per test 1 second memory limit per test 256 megabytes input s ...
- bzoj1675 [Usaco2005 Feb]Rigging the Bovine Election 竞选划区
Description It's election time. The farm is partitioned into a 5x5 grid of cow locations, each of wh ...
- MAC上python环境搭建
mac自带的有python,如果你需要查看版本,打开terminal输入以下命令: python --version 如果你需要安装新的python版本,有几种方法可以安装,一是去python官网下载 ...
- vhd镜像格式及vhd-util工具应用
概述 VHD 是微软虚拟磁盘文件格式,qemu和tapdisk2都能支持VHD镜像格式,不仅提供基本的虚拟机卷功能,还可提供磁盘快照.磁盘扩容等高级功能 vhd-util是个linux下的开源软件,通 ...
- What is NicEdit?
NicEdit - WYSIWYG Content Editor, Inline Rich Text Application What is NicEdit? NicEdit is a Light ...
- 关于uitableView的Group模式滑动偏移问题
问题: uitableView的group模式自带一个section的headerView,如果不调整,系统就会默认高度,在滑动时就会向下偏移一个单位的scetion高度,我们改变tableView的 ...