zoukankan      html  css  js  c++  java
  • Amzon MWS API开发之 请求报告

              时间一晃而过又过了两周,博客园更新的速度确实有点慢,今天我要分享的是对请求报告的调用。

        在文档中,相信大家也看了下面这个流程图吧?

        相关流程,在文档中也有细说,我就不一一去Copy了:http://docs.developer.amazonservices.com/zh_CN/reports/Reports_Overview.html

       接着我们说ReportTypes 枚举,请求报告类型有很多种,我们可以可以使用 ReportTypes 枚举,来指定报告类型,从而获取我们想要得到的相关数据。

        ReportTypes枚举有以下分类:

            

        具体大家可以参考以下详细文档:

        http://docs.developer.amazonservices.com/zh_CN/reports/Reports_ReportType.html

        获取相关的报告也分两种形式,有的报告通过:RequestReport 操作,有的是通过ManageReportSchedule或者GetReportList的API接口来获取。

        接下来就以GetReportList为例

      1    public class ReportClient
      2     {
      3 
      4         private ReportClient() { }
      5 
      6 
      7         public ReportClient(string reportType)
      8         {
      9             this.ReportType = reportType;
     10         }
     11 
     12         public string ReportType { get; set; }
     13 
     14         /// <summary>
     15         /// 获得账户信息
     16         /// </summary>
     17         private static AccountConfig Account
     18         {
     19             get
     20             {
     21                 return AccountConfig.Instance;
     22             }
     23         }
     24 
     25 
     26 
     27         private MarketplaceWebServiceConfig GetConfig()
     28         {
     29             var config = new MarketplaceWebServiceConfig();
     30             config.ServiceURL = Account.ServiceUrl;    
     31             return config;
     32         }
     33 
     34         private MarketplaceWebServiceClient GetClient()
     35         {
     36             var config = this.GetConfig();
     37             var client = new MarketplaceWebServiceClient(Account.AccessKeyId, Account.SecretAccessKey, Account.AppName, Account.AppVersion, config);
     38             return client;
     39         }
     40 
     41         public void GetReportList()
     42         {
     43             var reportList = GetReportListInfo();
     44             foreach (var item in reportList)
     45             {
     46                 GetReport(item);
     47             }
     48 
     49         }
     50 
     51 
     52         private List<string> GetReportListInfo()
     53         {
     54             List<string> reportIdList = new List<string>();
     55             var client = GetClient();
     56             var request = new GetReportListRequest();
     57             request.Acknowledged = false;
     58             request.Merchant = Account.MerchantId;
     59             request.ReportTypeList = new TypeList();
     60             request.ReportTypeList.Type = new List<string>() { ReportType };
     61             request.Marketplace = Account.MarketplaceId;
     62             request.AvailableFromDate = new DateTime(2014, 7, 15, 0, 0, 0);
     63             request.AvailableToDate = new DateTime(2014, 7, 31, 0, 0, 0);
     64 
     65             var response = client.GetReportList(request);
     66             var result = response.GetReportListResult;
     67             result.ReportInfo.ForEach(u => reportIdList.Add(u.ReportId));
     68 
     69             return reportIdList;
     70         }
     71 
     72 
     73         /// <summary>
     74         /// 获得请求报告: 未测试
     75         /// </summary>
     76         /// <param name="client"></param>
     77         /// <param name="reportId"></param>
     78         /// <returns></returns>
     79         public void GetReport(string reportId)
     80         {
     81             var client = this.GetClient();
     82             var request = new GetReportRequest();
     83             request.Merchant = Account.MerchantId;
     84             request.ReportId = reportId;
     85           
     86             string fileName = GetFilePath();
     87             request.Report = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite);
     88             GetReportResponse response = client.GetReport(request);
     89             request.Report.Close();
     90             var result = response.GetReportResult;
     91             if (!result.IsSetContentMD5())
     92                 return;
     93         }
     94 
     95 
     96         private string GetFilePath()
     97         {
     98             return PathInfo.ReportPath + Account.AppName + "__" + DateTime.Now.ToFileTime() + ".txt";
     99         }
    100 
    101     }
    View Code

        大家要知道报告有一个特别之处,不是你想要什么时候的数据,他就会给你什么时候的数据,亚马逊服务器会根据一段时间生成,如果没有生成,你也只能获取之前生成了的报告数据。正所谓,不是你想要,我就给你,你得看我的心情。呵呵。

               根据调用以上代码就能下载到报告了,能生成一个个你需要的文件。

        当然我们可能需要的还不止这样,这样只给我一些文本文件,岂能满足于我做开发?只有把这些数据导入到我的数据库中,我才能心安理得,酣睡长眠呢。

        接下来,我们要做的就是解析这些文本文件了,当然,你怎么解析都行,看你自己了。为了暂时想不出怎么解析或者说没怎么研究过的朋友,我献上我的小小法子。

     1   public List<AmazonFee> GetContent(string fileName)
     2         {
     3             //打开下载好了的文件
     4             FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
     5             StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8);
     6             string content = sr.ReadLine();   //获得头行,也就是所有字段名称
     7             string[] fields = content.Split('	');
     8             List<string> fileList = new List<string>(fields);
     9 
    10             //接下来,我们记录字段对应所在的列的索引
    11             int settlementIndex = fileList.IndexOf("settlement-id");
    12             int orderId = fileList.IndexOf("order-id");
    13             int shipmentId = fileList.IndexOf("shipment-id");
    14             int postedDataIndex = fileList.IndexOf("posted-date");
    15             int orderItemIndex = fileList.IndexOf("orderItemCode");
    16             int skuIndex = fileList.IndexOf("sku");
    17             int quantityIndex = fileList.IndexOf("quantity-purchased");
    18 
    19             int priceTypeIndex = fileList.IndexOf("price-type");
    20             int priceAmountIndex = fileList.IndexOf("price-amount");
    21             content = sr.ReadLine();       //读取下一行文字,注意,这行就开始是数据了。
    22            
    23             List<AmazonFee> afList = new List<AmazonFee>();
    24             while (!string.IsNullOrEmpty(content))
    25             {
    26                 content = sr.ReadLine();   
    27                 if (!string.IsNullOrEmpty(content))
    28                 {
    29                     string[] values = content.Split('	');   //每个字段间都有“	”间隔
    30 
    31                     AmazonFee af = new AmazonFee();
    32                     af.AmazonOrderID = values[orderId];       
    33                     af.AmazonShop = Account.AppName;
    34                     af.SKU = values[skuIndex];
    35                     af.Quantity = values[quantityIndex];
    36                     af.ShipmentId = values[shipmentId];
    37                     af.Amount = values[priceAmountIndex];
    38                     afList.Add(af);    //获得值
    39                 }
    40             }
    41             return afList;
    42         }

          本文很简单,因为本人也是亚马逊MWS的菜鸟一名,刚接触40天,很多东西也不是很懂,不过希望感兴趣的朋友,大家一起交流学习。

  • 相关阅读:
    str_replace函数的使用规则和案例详解
    phpqrcode.php 生成二维码图片用于推广
    常用的正则表达式验证
    Java:原生javaWeb下载pdf文件
    设计模式:七大原则
    Spring Boot:整合Hikari+Oracle+p6spy
    Spring Boot:开启全局事务
    Java8:按照对象的属性,对List集合分组
    SpringMVC统一异常处理
    JSR303校验的基本使用和结合AOP使用
  • 原文地址:https://www.cnblogs.com/yangda/p/3895618.html
Copyright © 2011-2022 走看看