博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
淘宝API开发系列---淘宝API的测试及使用2
阅读量:7194 次
发布时间:2019-06-29

本文共 4100 字,大约阅读时间需要 13 分钟。

继续前面一篇随笔《》,来继续介绍淘宝API的具体代码开发部分,上篇主要是介绍淘宝SDK开发的一些流程及必备的信息,以及掌握如何学会利用API文档、淘宝API测试工具来获取我们所需的数据,其中我一般倾向于获取Json数据,然后进行分析,其中Json数据可以通过JsonView工具()进行格式化显示,方便我们了解和区分各个属性的信息。另外淘宝的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来进行数据显示,不过代码方面可能要多一些。

 

转载地址:http://oqvkm.baihongyu.com/

你可能感兴趣的文章
Python中怎么进行单元测试
查看>>
Laravel之哈希/常用函数/分页
查看>>
spring 事务传播说明
查看>>
Codeforces 442A
查看>>
Please enable network time synchronisation in system settings
查看>>
Android Actionbar Tab 导航模式
查看>>
python+matplotlib+web.py
查看>>
springboot 使用maven 打包 报 (请使用 -source 7 或更高版本以启用 diamond 运算符) 错误解决办法...
查看>>
洛谷 P2290 [HNOI2004]树的计数(bzoj[1211])
查看>>
Linux系统管理
查看>>
virtualbox 相关操作
查看>>
git 和 github 的基本使用
查看>>
流水灯
查看>>
Dubbo系列(2)_RPC介绍
查看>>
mysql取字段名注意事项!!!!千万不能和关键字同名
查看>>
crontab
查看>>
c#程序中的AssemblyInfo.cs
查看>>
HDU_1532_最大流
查看>>
LC.235.Lowest Common Ancestor of a Binary Search Tree
查看>>
树洞(贪心)
查看>>