Amzon MWS API开发之 上传数据
2014-09-09 19:17
357 查看
亚马逊上传数据,现有能操作的功能有很多:库存数量、跟踪号、价格、商品.......
我们可以设置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:
我们可以设置FeedType值,根据需要,再上传对应的xml文件即可。
下面可以看看FeedType类型
这次我们拿同步价格为例子,首先我们来熟悉一下Amazon MWS 提供的上传接口实现流程。
详细流程可访问:http://docs.developer.amazonservices.com/zh_CN/feeds/Feeds_Overview.html
[b]上传流程:[/b]
在此,简要说明一下大致的步骤和流程:第一步:建立请求
通过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 = 0; 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(2 * 60 * 1000); //! 休息一会。 } } } 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开发之订单接口
- Amzon MWS API开发之订单接口
- 亚马逊 MWS上传数据 API部分的相关内容 amazon api 文档
- Amzon MWS API开发之 请求报告
- Amzon MWS API开发之订单接口
- 微信的API都是通过https调用实现的,分为post方法调用和get方法调用。不需要上传数据的采用get方法(使用IntraWeb开发)
- Amzon MWS API开发之 请求报告
- 【iOS开发-99】POST四种数据提交方式以及NSURLSession上传任务的一些知识
- 项目开发实战 jQuery+php+mysql实现数据上传功能
- 项目开发实战 jQuery+php+mysql实现数据上传功能(补充!!!)
- PDA开发数据由本地上传至DB
- 手机端服务器开发Spring MVC上传头像,并返回JSON数据
- aaronyang的百度地图API之LBS云与.NET开发 Javascript API 2.0【把数据存到LBS云2/2】
- ArcGIS API for iOS开发教程(五)数据查询
- ios开发之网络数据的下载与上传
- PDA开发数据由本地上传至DB
- ArcSDE C-API 开发:读取属性数据
- AF ios开发之网络数据的下载与上传
- ArcSDE C-API 开发:读取属性数据