当前位置: 首页 > news >正文

淘宝API开发系列---淘宝API的测试及使用2

继续前面一篇随笔《淘宝API开发系列---淘宝API的测试及使用》,来继续介绍淘宝API的具体代码开发部分,上篇主要是介绍淘宝SDK开发的一些流程及必备的信息,以及掌握如何学会利用API文档、淘宝API测试工具来获取我们所需的数据,其中我一般倾向于获取Json数据,然后进行分析,其中Json数据可以通过JsonView工具(http://jsonviewer.codeplex.com/)进行格式化显示,方便我们了解和区分各个属性的信息。另外淘宝的SDK里面,封装了很多对象,我们通过数据就可以获取到相关的信息了,不过注意的就是,我们每个接口调用,都要传入Fields的属性,如果我们没有指定相应的属性字段,那么接口返回的数据,就没有这项的,淘宝SDK的对象属性就会为空。

 

 通过以上的工具,我们就能可视化属性的信息了,对接口数据的理解就更加清晰,首先我们来看看我测试例子的运行效果如下所示。

 

 其中上面例子的代码如下所示。

         private  void TestUserGet()
        {
             // 单独用户的信息
            Console.WriteLine( " 单独用户的信息 ");
            UserGetRequest req =  new UserGetRequest();  // 实例化具体API对应的Request类
            req.Fields =  " user_id,nick,created,buyer_credit,type,sex ";
            req.Nick =  " wuhuacong ";
            UserGetResponse rsp = myclient.Execute(req); // 执行API请求并将该类转换为response对象
            Console.WriteLine(rsp.Body);
             if (rsp.User !=  null)
            {
                 // Console.WriteLine(rsp.User.Nick);
                
// Console.WriteLine(ObjectToString(rsp.User));
                List<User> list =  new List<User>();
                list.Add(rsp.User);
                 this.winGridView1.DisplayColumns = req.Fields.Replace( " _ """); // 对应字段的属性没有“_”字符的
                 this.winGridView1.DataSource = list;
            }
        }

         private  void TestItemGet()
        {
             // 单独商品的信息
            Console.WriteLine( " 单独商品的信息 ");
            ItemGetRequest req =  new ItemGetRequest();
            req.Fields =  " num_iid,title,nick,pic_path,cid,price,type,location.city,delist_time,post_fee ";
            req.NumIid =  3838293428L;
            ItemGetResponse itemRsp = myclient.Execute(req);
             if (itemRsp !=  null && itemRsp.Item !=  null)
            {
                 // Console.WriteLine(itemRsp.Item.Nick);
                
// Console.WriteLine(ObjectToString(itemRsp.Item));
                List<Item> list =  new List<Item>();
                list.Add(itemRsp.Item);
                 this.winGridView1.DisplayColumns = req.Fields.Replace( " _ """); // 对应字段的属性没有“_”字符的
                 this.winGridView1.DataSource = list;
            }
        }

         private  void TestItemSearch()
        {
             // 查询商品信息(不含类别)
            Console.WriteLine( " 查询商品信息(不含类别) ");
            ItemsGetRequest req =  new ItemsGetRequest();
            req.Fields =  " num_iid,title,nick,pic_url,cid,price,type,delist_time,post_fee,score,volume "; // ,location.city,location.state";
            req.Q =  " 笔记本 ";
             // itemReq.Cid = "14";
            req.OrderBy =  " volume:desc ";
            req.PageNo =  1;
            req.PageSize =  40;

             // 显示列表信息
            ItemsGetResponse itemRsp = myclient.Execute(req);
             if (itemRsp !=  null)
            {
                 // Console.WriteLine(itemRsp.TotalResults);
                
// foreach (Item item in itemRsp.Items)
                
// {
                
//     Console.WriteLine(ObjectToString(item));
                
// }
                 this.winGridView1.DisplayColumns = req.Fields.Replace( " _ """); // 对应字段的属性没有“_”字符的
                 this.winGridView1.DataSource = itemRsp.Items;
            }

        } 

对于需要获取用户私密信息,如买入卖出等重要信息,还需要获取用户的SessionKey的,我们可以通过下面接口函数,弹出登录窗口,然后登录后,定位到对应的App应用页面,然后页面加载的时候,获取到对应的SessionKey、

 

 

 

 

         ///   <summary>
        
///  判断是否顺利获取SessionKey
        
///   </summary>
        
///   <returns></returns>
         private  string GetAuthorizeCode( string appKey)
        {
             string authorizeCode =  "";
            FrmAuthorized dlg =  new FrmAuthorized();
            dlg.AppKey = appkey;
             if (dlg.ShowDialog() == DialogResult.OK)
            {
                authorizeCode = dlg.AuthrizeCode;
            }
             if ( string.IsNullOrEmpty(authorizeCode))  return  null;

             string sessionKeyUrl =  string.Format(TOP_AUTH_URL, authorizeCode);
            HttpHelper helper =  new HttpHelper();
             string html = helper.GetHtml(sessionKeyUrl);
             // 格式
            
// top_appkey=1142&top_parameters=xxx&top_session=xxx&top_sign=xxx&encode=utf-8
             string reg =  " .*?&top_session=(?<session>.*?)&top_sign ";
             string sessionKey = CRegex.GetText(html, reg,  1);
             return sessionKey;

        } 

 最后我们看看其中获取已买记录的接口实现如下所示。

         private  void TestBuyInfo()
        {
             if ( string.IsNullOrEmpty(sessionKey))
            {
                sessionKey = GetAuthorizeCode( this.appkey);
            }

             // 买入交易
            Console.WriteLine( " 买入交易 ");
            TradesBoughtGetRequest req =  new TradesBoughtGetRequest();
             // req.Fields = "tid,title,price,type,num_iid,seller_nick,buyer_nick,status";
            req.Fields =  " tid,title,price,type,num_iid,seller_nick,buyer_nick,status,receiver_state,receiver_city,receiver_district,receiver_address ";
            req.PageNo =  1L;
            req.PageSize =  40L;
            TradesBoughtGetResponse rsp = myclient.Execute(req, sessionKey);
             if (rsp !=  null)
            {
                 // Console.WriteLine(rsp.Trades.Count);
                
// if (rsp.Trades.Count > 0)
                
// {
                
//     foreach (Trade item in rsp.Trades)
                
//     {
                
//         Console.WriteLine(ObjectToString(item));
                
//     }
                
// }
                 this.winGridView1.DisplayColumns = req.Fields.Replace( " _ """); // 对应字段的属性没有“_”字符的
                 this.winGridView1.DataSource = rsp.Trades;
            }

        } 

 以上利用了我的Winform分页控件进行数据展示,因此代码要简化一些,当然,也可以用DataGridView来进行数据显示,不过代码方面可能要多一些。

 

转载于:https://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html

相关文章:

  • CC++多系统集成需要注意的问题
  • IBM申请通过分析代码递交判断程序员优劣
  • java中的Main方法..
  • Android腾讯微薄客户端开发十:博主广播篇
  • 我做项目这些年的经验
  • First Blood
  • jQuery插件 blockUI
  • JPA注解
  • 多线程编程
  • 分享20佳极具创意的网站导航菜单设计案例
  • Linux多进程_消息通信_设计思想交流(转)
  • 第一章:第二课 选择器-结构性伪类选择器[五]
  • nyoj 16 - 矩形嵌套
  • Excel导入导出
  • 基础常用JS
  • 【技术性】Search知识
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Django 博客开发教程 8 - 博客文章详情页
  • EventListener原理
  • HashMap剖析之内部结构
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript中的对象个人分享
  • maya建模与骨骼动画快速实现人工鱼
  • mongo索引构建
  • Python语法速览与机器学习开发环境搭建
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Twitter赢在开放,三年创造奇迹
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 从PHP迁移至Golang - 基础篇
  • 从零开始学习部署
  • 第2章 网络文档
  • 力扣(LeetCode)22
  • 删除表内多余的重复数据
  • 一道闭包题引发的思考
  • FaaS 的简单实践
  • 数据可视化之下发图实践
  • ​水经微图Web1.5.0版即将上线
  • #define,static,const,三种常量的区别
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • ( 10 )MySQL中的外键
  • (06)Hive——正则表达式
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (九)One-Wire总线-DS18B20
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三)Honghu Cloud云架构一定时调度平台
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)大型网站架构演变和知识体系
  • (转载)hibernate缓存
  • (转载)OpenStack Hacker养成指南
  • *上位机的定义
  • ... 是什么 ?... 有什么用处?