aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 30297|回复: 34

简单的淘宝API库

[复制链接]

53

主题

216

回帖

1708

积分

四级会员

积分
1708
发表于 2012-8-20 16:55:55 | 显示全部楼层 |阅读模式
本帖最后由 winner 于 2012-8-20 17:03 编辑

我粗略看了下淘宝官方TOP PHP SDK,
大部分内容都是对参数的封装/校验,
因为这玩意是自己用,也不需要官方SDK那么复杂,
所以就搞了个最简单的,足够用了..



用法

io.open();//打开控制台


import TopClient;

tc = TopClient();
tc.appkey =
"APPKEY";                       //这个需要自己申请
tc.secretKey = "secretKey";             //同上
tc.format = "json";                         //返回数据格式,不设置的话,默认返回json


method =
"taobao.user.get"              //请求的API,官方文档如下
                                                        //http://api.taobao.com/apitools/apiTools.htm?catId=1&apiName=taobao.user.get
parameter = {                                   //参数
    ['fields'] = "user_id,uid,nick,sex,buyer_credit,seller_credit,location,created,last_visit,birthday,type,status";
    [
'nick'] = "柠檬绿茶";
}
//session = "sfdshdgshdgliuengias..."       //这个是可选的,有的API需要,有的不需要

var re = tc.exec(method,tab,session)            //发送请求..


execute("pause") //按任意键继续
io.close();//关闭控制台




库文件TopClient.aau

class TopClient{
   
ctor(default){
        
import string.md5;
        
import inet.whttp;
        
import inet.url;
        
        
this.whttp = inet.whttp();
    }
   
    appkey =
"11111111";

    secretKey =
"222222222222";

    gatewayUrl =
"http://gw.api.taobao.com/router/rest";

    format =
"json";

    signMethod =
"md5";

    apiVersion =
"2.0";

    sdkVersion =
"top-sdk-aardio-2012-08-14";
   
   
   
//发送请求
    exec = function(method,apiParams, session = null){
        
//组装系统参数
        sysParams = {};
        sysParams[
"app_key"] = this.appkey;
        sysParams[
"v"] = this.apiVersion;
        sysParams[
"format"] = this.format;
        sysParams[
"sign_method"] = this.signMethod;
        sysParams[
"method"] = method;
        sysParams[
"timestamp"] =  tostring(..time(,"%Y-%m-%d %H:%M:%S"));
        sysParams[
"partner_id"] = this.sdkVersion;
        
if (null != session){
            sysParams[
"session"] = session;
        }
        
//业务参数
        apiParams= apiParams
        
//签名
        sysParams["sign"] = this.generateSign(..table.concat(sysParams,apiParams))
        
//合并参数
        params = ..table.concat(sysParams,apiParams);
        
//组装请求URL
        requestUrl = this.gatewayUrl ++ "?"
        
for(k,v in  params ){
            
//..io.print(k,v)
            requestUrl += k++ "=" ++ inet.url.encode(v,true) ++ "&"
        }
        requestUrl = ..string.trim(requestUrl,
"&")
        
//发起请求
        resp = this.whttp.get(requestUrl)
        
if(resp){
            resp = ..string.fromto(resp)
            
return resp;
        }
else{
            
return false;
        }
    }
   
   
//======================================
    //生成签名
    generateSign = function(params){
        stringToBeSigned =
"";
        stringToBeSigned +=
this.secretKey;
        
for k,v in this.kpairs(params){
            stringToBeSigned += k++v;
        }
        stringToBeSigned +=
this.secretKey;
        stringToBeSigned = ..string.fromto(stringToBeSigned,0,65001)   
//转为utf8编码
        return ..string.md5(stringToBeSigned)
    }
   
   
//======================================
    //键名排序
    kpairs = function(tab,f){
        
//kpairs被调用时创建闭包
        var tarr = {}
        
//字典中的数据复制到一个数组中然后进行排序
        for k in tab
            ..table.push(tarr, k);
            ..table.sort(tarr, f);
//调用默认的排序函数f对字典中的键进行排序
        var i = 0 //迭代器计数器.(在闭包中保存值)
        return function () { //迭代函数
            i = i + 1
            
if(not tarr[ i ])
               
return null
            
else
               
return tarr[ i ], tab[tarr[ i ]]
        }
    }
}


评分

参与人数 4 +100 +121 收起 理由
qb19055 + 1 很给力!
cjc0045 + 60 赞一个!
look + 100 赞一个!
coder + 60 赞一个!

查看全部评分

7

主题

17

回帖

193

积分

一级会员

积分
193
发表于 2012-8-20 17:41:21 | 显示全部楼层
太好了。

117

主题

1103

回帖

6572

积分

六级会员

积分
6572
发表于 2012-8-20 17:55:45 | 显示全部楼层
感谢分享

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2012-8-20 19:05:01 | 显示全部楼层
这个不错啊 多谢分享,我要仔细看看,学习下

75

主题

767

回帖

5045

积分

六级会员

The only one

积分
5045
发表于 2012-8-20 20:19:24 | 显示全部楼层
谢谢分享!

3

主题

41

回帖

393

积分

二级会员

积分
393
发表于 2012-8-20 20:29:35 | 显示全部楼层
受教了。

29

主题

55

回帖

525

积分

三级会员

积分
525
发表于 2012-8-20 22:59:32 | 显示全部楼层
怎么运行不了啊
有源文件吗

0

主题

6

回帖

46

积分

新手入门

积分
46
发表于 2012-8-21 10:30:32 | 显示全部楼层
学习了,感谢

11

主题

32

回帖

338

积分

二级会员

积分
338
发表于 2012-8-24 12:13:39 | 显示全部楼层
怎么用呀,呵

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2012-9-1 20:57:45 | 显示全部楼层
请教一下 这个是不是哪边需要做个修改,怎么取不到数据啊 已设置appkey和secretKey

53

主题

216

回帖

1708

积分

四级会员

积分
1708
 楼主| 发表于 2012-9-1 22:57:43 | 显示全部楼层
jyb21 发表于 2012-9-1 20:57
请教一下 这个是不是哪边需要做个修改,怎么取不到数据啊 已设置appkey和secretKey

我这正常

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2012-9-2 11:56:01 | 显示全部楼层
本帖最后由 jyb21 于 2012-9-2 11:57 编辑
winner 发表于 2012-9-1 22:57
我这正常
  1. tc = TopClient();
  2. tc.appkey = "APPKEY";                       //这个需要自己申请
  3. tc.secretKey = "secretKey";             //同上
复制代码
用法示例里和库文件里都有这个设置,是两个文件都要设置一下吗。我都设置了。但是没有打印输出内容出来
  1. var re = tc.exec(method,tab,session)
  2. 这一句里的tab是要改成parameter吗?因为tab上文没有定义啊,会出错。
复制代码
谢谢

53

主题

216

回帖

1708

积分

四级会员

积分
1708
 楼主| 发表于 2012-9-2 14:31:19 | 显示全部楼层
jyb21 发表于 2012-9-2 11:56
用法示例里和库文件里都有这个设置,是两个文件都要设置一下吗。我都设置了。但是没有打印输出内容出来谢谢 ...

把你写的发上来,调用部分

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2012-9-2 16:49:47 | 显示全部楼层
本帖最后由 jyb21 于 2012-9-2 20:14 编辑
winner 发表于 2012-9-2 14:31
把你写的发上来,调用部分

用的就是你的调用示例

io.open();//打开控制台


import TopClient;

tc = TopClient();
tc.appkey =
"12176444";                 //这个需要自己申请
tc.secretKey = "4dccb22e0de91fbaeb9f356cdc698189";              //同上
tc.format = "json";                     //返回数据格式,不设置的话,默认返回json


method =
"taobao.user.get"              //请求的API,官方文档如下
                                        //http://api.taobao.com/apitools/apiTools.htm?catId=1&apiName=taobao.user.get
parameter = {                           //参数
    ['fields'] = "user_id,uid,nick,sex,buyer_credit,seller_credit,location,created,last_visit,birthday,type,status,alipay_no,alipay_account,alipay_account,email,consumer_protection,alipay_bind";
    [
'nick'] = "柠檬绿茶";
}
//session = "sfdshdgshdgliuengias..."   //这个是可选的,有的API需要,有的不需要

var re = tc.exec(method,parameter,session)  //发送请求..

for(k,v in  re ){
    io.print(k,v)
   
//requestUrl += k++ "=" ++ inet.url.encode(v,true) ++ "&"
}
execute("pause") //按任意键继续
io.close();//关闭控制台

53

主题

216

回帖

1708

积分

四级会员

积分
1708
 楼主| 发表于 2012-9-2 19:07:16 | 显示全部楼层
本帖最后由 winner 于 2012-9-3 10:12 编辑
jyb21 发表于 2012-9-2 16:49
用的就是你的调用示例

io.open();//打开控制台

import TopClient;

io.open()
tc = TopClient();
tc.appkey =
"1111";                 //这个需要自己申请,
http://my.open.taobao.com/app/app_list.htm
tc.secretKey = "22222222";              //同上
tc.format = "json";                     //返回数据格式,不设置的话,默认返回json


method =
"taobao.user.get"              //请求的API,官方文档如下
                                        //http://api.taobao.com/apitools/apiTools.htm?catId=1&apiName=taobao.user.get
parameter = {                           //参数
    ['fields'] = "user_id,uid,nick,sex,buyer_credit,seller_credit,location,created,last_visit,birthday,type,status,alipay_no,alipay_account,alipay_account,email,consumer_protection,alipay_bind";
    [
'nick'] = "柠檬绿茶";
}
//session = "sfdshdgshdgliuengias..."   //这个是可选的,有的API需要,有的不需要

var re = tc.exec(method,parameter,session)  //发送请求..

import web.json
var tab = web.json.parse(re)
for(k,v in tab.user_get_response.user){
    io.print(k,v)

}

http://api.taobao.com/apidoc/api.htm?path=categoryId:1-apiId:1
返回的是json 要自己解析

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2012-9-2 20:08:59 | 显示全部楼层
本帖最后由 jyb21 于 2012-9-2 20:16 编辑
winner 发表于 2012-9-2 19:07
import TopClient;

io.open()

这样可以调出数据了。多谢这样调用挺好玩的,我再了解下,帮忙帮我的appkey和secretKey隐一下。

14

主题

41

回帖

530

积分

培训班

积分
530
发表于 2012-9-3 16:54:16 | 显示全部楼层
我需要去弄个阿里巴巴的

0

主题

11

回帖

99

积分

一级会员

积分
99
发表于 2012-9-3 18:14:52 | 显示全部楼层
感谢分享

48

主题

542

回帖

3328

积分

五级会员

积分
3328
发表于 2012-9-9 20:18:12 | 显示全部楼层
忽然想到要是这个上到淘宝官方的sdk上去 ;再有谁做个新浪微博的sdk,这两大平台的影响力非常大,估计做程序开发的都会了解到aardio了。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-4-16 21:38 , Processed in 0.065729 second(s), 25 queries .

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表