aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 55633|回复: 8

web.rest 范例

[复制链接]

170

主题

2182

回帖

1万

积分

管理员

积分
13226
发表于 2013-11-17 00:13:13 | 显示全部楼层 |阅读模式
请参考入门教程:
《 玩转 web.rest,自动封装任意 HTTP 接口为本地函数 》

调用 HTTP 接口示例:
import console;
import web.rest.jsonClient;

var http = web.rest.jsonClient();
var jsonStore = http.api("https://extendsclass.com/api/json-storage/bin/{id}");

//增
var jsonData = jsonStore.post(
    name =
"jon.snow";
    age = 31;
)

//改
var result = jsonStore[jsonData.id].put(
    name =
"jon.snow2";
    age = 32;
)

//查
var result = jsonStore[jsonData.id].get();
console.dump(result)

//删,也可以用一个表指定多个占位符的替换值
var params ={
    id = jsonData.id;
}
var result = jsonStore[ params ].delete();

console.dump(result);
console.pause()

示例:
import console;
import web.rest.jsonClient;

// 创建 REST 客户端
var restClient = web.rest.jsonClient();

//声明一个 REST-RPC 接口,第一个参数指定URL描述,URL 模板参数请放在 {} 内
var restApi = restClient.api("http://eu.httpbin.org/anything/{program}/{lang}")

/*
下面调用接口函数,
在请求时下面代码中的接口名"language"替换接口URL描述中的变量{program}
接口名"aardio"则替换接口URL描述中的变量{lang}
最后生成的请求URL为 http://eu.httpbin.org/anything/language/aardio
*/

var result = restApi.language.aardio({
    name =
"用户名";
    data =
"其他数据";
});

//输出服务端最后返回的数据,服务端返回了所有请求信息
console.dumpJson(result); //result 已经被解析为 aardio 对象

//可以用下面的函数获取服务端的原始响应数据(如果导入了 console 会直接显示在控制台 )
//restClient.lastResponse();

console.pause();

lastResponse 用法示例:

import console;
import web.rest.jsonClient;

// 创建REST客户端
var restClient = web.rest.jsonClient();

//声明一个 REST-RPC 接口,第一个参数指定URL描述
var restApi = restClient.api("http://eu.httpbin.org/api/{program}/{lang}")

/*
下面调用接口函数,
在请求时下面代码中的接口名"language"替换接口URL描述中的变量{program}
接口名"aardio"则替换接口URL描述中的变量{lang}
最后生成的请求URL为 http://eu.httpbin.org/api/language/aardio
*/

var result = restApi.language.aardio()

console.log(
"请求的URL",restClient.lastRequestUrl )
restClient.lastResponse();
//输出服务端最后返回的数据

console.pause();

上传文件示例:

import web.rest.client;
var http = web.rest.client();
var restApi = http.api("https://fontello.com");

//使用文件表单上传文件,可以指定多个字段
var result = restApi.sendFile("上传文件路径");
//上面代码也可以写为 restApi.post.sendFile();

//也可以如下指定上传进度回调函数。
var result = restApi.sendFile( "上传文件路径"
    ,
function(sendData,sendSize,contentLength,remainSize){
        
/*
        sendData 为本次上传数据;
        sendSize 为本次上传字节数;
        contentLength 为要上传的总字节数;
        remainSize 为剩余字节数;
        */

    }
);

下载文件示例:
//下载文件
import console;
import web.rest.jsonLiteClient;
var http = web.rest.client();

var aardio = http.api("https://www.aardio.com");

/*
下载文件:
如果创建文件失败 receiveFile 函数会返回 null 及错误信息,否则返回对象自身。
*/

var ok = aardio.receiveFile("/.test.html").get();

/*
可选如下指定下载进度回调函数:
要切记 receiveFile 指定的下载参数仅对本次请求有效。
*/

aardio.receiveFile(
"/.test.html",function(recvData,recvSize,contentLength){
   
/*
    recvData 为当前下载数据。
    recvSize 为当前下载数据字节数。
    contentLength 为需要下载的总字节数。
    */

    console.log(,recvSize,contentLength)
}).get();

console.pause()

web.rest 也可以支持 multipart/form-data 编码上传文件,示例:

import web.rest.client;
var http = web.rest.client();
var restApi = http.api("https://fontello.com");

//使用文件表单上传文件,可以指定多个字段
var result = restApi.sendMultipartForm(
    file =
"@/test.json"; //上传文件路径前面必须加一个字符 @ ,其他字段不用加
});
//上面代码也可以写为 restApi.post.sendMultipartForm();

//也可以如下指定上传进度回调函数。
var result = restApi.sendMultipartForm( {
        file =
"@/test.json";
    },
function(sendData,sendSize,contentLength,remainSize){
        
/*
        sendData 为本次上传数据;
        sendSize 为本次上传字节数;
        contentLength 为要上传的总字节数;
        remainSize 为剩余字节数;
        */

    }
);




29

主题

658

回帖

4138

积分

超级版主

积分
4138
发表于 2016-4-16 23:34:54 | 显示全部楼层
import crypt;
import web.rest.jsonLiteClient;

var restClient = web.rest.jsonLiteClient();  

//如果所有请求都要添加的相同HTTP头,在这里指定
restClient.addHeaders = {
    [
"Test"] = "test"
}

/*
如果每次请求都要修改HTTP头,可以写到这个事件里.

*/

restClient.beforeRequestHeaders =
function(params){

   
var apiKey = "";
   
var secretKey = "";
   
var authorization = {
        [
"apiKey"] = apiKey;
        [
"time"] = tonumber(time());
    }
   
    authorization[
"sign"] = crypt.md5(apiKey ++ secretKey ++ authorization.time)
   
   
//通过返回值设置本次请求的HTTP头, Content-Type不需要指定(会自动指定)
    return {
        [
"Authorization"] = crypt.encodeBin(web.json.stringify(authorization))
    };
}

var jsonData = restClient.post("http://eu.httpbin.org/post",{
    用户名 =
"用户名";
    密码 =
"密码";
} )

import console;
console.dumpJson(jsonData)
console.pause(
true);

170

主题

2182

回帖

1万

积分

管理员

积分
13226
 楼主| 发表于 2017-11-9 15:43:50 | 显示全部楼层
补一个multipart/form-data表单提交的例子:
http://bbs.aardio.com/forum.php?mod=viewthread&tid=13629
import console;
import web.rest.client;
import string.html;

var http = web.rest.client();
http.api(
"https://oa.tongda2000.com/logincheck.php").post(
     UNAME=
"lijia";
     encode_type=1;
);

http.sendMultipartForm( {
        TO_ID =
"912";
        TO_NAME =
"王征";
        SUBJECT =
"测试邮件标题!";
        SEND_FLAG = 1;
        SMS_REMIND =
"on";
        FROM_WEBMAIL =
"abc@263.net";
        TD_HTML_EDITOR_CONTENT=
/*测试邮件内容*/
    }
    ,
function(str,sendSize,contentLength){
        console.log(
"正在向服务器提交数据",math.size64(sendSize).format() );
    }
);

var html = http.api("https://oa.tongda2000.com/general/email/new/submit.php").post()
console.log( string.html.toText(html) );
console.pause(
true);


170

主题

2182

回帖

1万

积分

管理员

积分
13226
 楼主| 发表于 2020-1-21 14:57:21 | 显示全部楼层
import console;
import web.rest.jsonClient;

var http = web.rest.jsonClient();

//打开https://www.jsonstore.io免费获取自动分配的API地址
var jsonstore = http.api(
"https://www.jsonstore.io/e5fd2bdf0e6b3ba3fe4aa61eebd11740cf2fe10e7fad1b5d2fb77c876498baf5");

//增,以POST方法请求网址 https://www.jsonstore.io/e5fd2bd ... 7c876498baf5/user/1
var result = jsonstore.user[1].post(
    name =
"jon.snow";
    age = 31;
)

//改,以PUT方法请求网址 https://www.jsonstore.io/e5fd2bd ... 6498baf5/user/1/age
var result = jsonstore.user[1].age.put(32);

//查
var result = jsonstore.user[1].get();

//删
var result = jsonstore.user[1].delete();
console.dump(result,http.lastRequestUrl);

//也可以在网址中使用大括号指定占位符
var jsonstore = http.api("https://www.jsonstore.io/{id}/{name}");

//API对象的成员名会被自动按顺序替换为URL占位符(忽略占位符的名字)
var result = jsonstore["e5fd2bdf0e6b3ba3fe4aa61eebd11740cf2fe10e7fad1b5d2fb77c876498baf5"].user.get()
//以GET方法请求网址 https://www.jsonstore.io/e5fd2bd ... b77c876498baf5/user

//也可以用一个表指定多个占位符的替换值
var data ={
    id =
"e5fd2bdf0e6b3ba3fe4aa61eebd11740cf2fe10e7fad1b5d2fb77c876498baf5";
    name =
"user";
}
var result = jsonstore[ data ] .get()

console.dump(result)
console.pause()


170

主题

2182

回帖

1万

积分

管理员

积分
13226
 楼主| 发表于 2020-1-21 14:58:07 | 显示全部楼层
import win.ui;
/*DSG{{*/
var winform = win.form(text="获取取京东商品评论";right=1189;bottom=593)
winform.add(
edit={cls=
"edit";left=10;top=6;right=1179;bottom=575;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1}
)
/*}}*/

import web.rest.jsonLiteClient;
var http = web.rest.jsonLiteClient()

http.referer =
"https://item.jd.com/"
var jdClub = http.api("https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv13283")

var data = jdClub.get(
    productId=
"100004253893"; // 商品编号
    sortType=6; // 5表示推荐排序,6为按时间排序
    isShadowSku=0; // 仅显示当前商品评论
    score=3; // 好评
    page=1; // 分页索引
    pageSize=10;
    fold=1;
    rid=0;
)

winform.edit.print(data);

winform.show()
win.loopMessage();

170

主题

2182

回帖

1万

积分

管理员

积分
13226
 楼主| 发表于 2020-1-21 15:08:34 | 显示全部楼层
aardio几句代码实现 WebDriver 协议客户端
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22543

获取百度网盘下载链接( 已更新不使用浏览器控件 )
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22506


自动抓取下载链接、调用百度网盘批量离线下载(已更新)
http://bbs.aardio.com/forum.php?mod=viewthread&tid=31060


百度自然语言接口调用演示(免费不限调用次数)
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22479


百度开放平台API调用
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22093


QQ登录查询小工具源码
http://bbs.aardio.com/forum.php?mod=viewthread&tid=13525


【分享】初步实现钉钉和公司WEB系统集成后扫码登陆
http://bbs.aardio.com/forum.php?mod=viewthread&tid=13773


解析格式化HTML演示
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22516


Chrome远程调试接口调用演示
http://bbs.aardio.com/forum.php?mod=viewthread&tid=21977


分享下科大讯飞在线朗读文字
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22242


熊猫直播平台弹幕获取
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22220


Google搜索助手
http://bbs.aardio.com/forum.php?mod=viewthread&tid=12950


一次分析下载广场舞视频的过程附源码......
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22550


百度短网址生成源码
http://bbs.aardio.com/forum.php?mod=viewthread&tid=10511


域名备案批量查询
http://bbs.aardio.com/forum.php?mod=viewthread&tid=9729


快盘调用接口
http://bbs.aardio.com/forum.php?mod=viewthread&tid=8059


如何通过HTTP地址读写服务器上的phpstudy数据
http://bbs.aardio.com/forum.php?mod=viewthread&tid=13693

170

主题

2182

回帖

1万

积分

管理员

积分
13226
 楼主| 发表于 2020-1-21 15:09:23 | 显示全部楼层
import win.ui;
/*DSG{{*/
var winform = win.form(text="百度API测试";right=747;bottom=463)
winform.add(
button={cls=
"button";text="文字识别";left=596;top=411;right=731;bottom=449;db=1;dr=1;z=3};
edit={cls=
"edit";left=16;top=18;right=731;bottom=379;autohscroll=false;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=1};
editUrl={cls=
"edit";left=16;top=415;right=591;bottom=447;align="right";db=1;dl=1;dr=1;edge=1;z=2};
static={cls=
"static";text="请输入图像文件路径(可直接拖放文件到窗口上):";left=21;top=392;right=234;bottom=407;db=1;dl=1;transparent=1;z=4}
)
/*}}*/

winform.button.oncommand =
function(id,event){
   
     winform.button.disabledText =
"正在识别中"
   
    thread.invoke(
        
function(winform){
            
            
import baidu.client;
            
var http =  baidu.client();
            
            
/*
            支持下面三种写法:
            
            http.setAuth( 这里直接写access_token )
            http.setAuth( 这里写一个可以获取access_token的网址 )
            http.setAuth( "你自己的API Key","你自己的Secret Key" )
            )
            */

            http.setAuth(
"http://api.aardio.com/v10/test/test-baidu.aardio")
               
            
//OCR识别接口
            var ocr = http.api("https://aip.baidubce.com/rest/2.0/ocr/v1/");
            
var result = ocr.accurate_basic(
                image = winform.editUrl.text;
            )
            
            
for i,v in table.eachIndex(result.words_result){
                winform.edit.appendText(v.words)
            }  
            
            winform.button.disabledText =
null;
        },winform
    )
}

winform.onDropFiles =
function(files){
    winform.editUrl.text = files[1]
}

winform.show()
win.loopMessage();

170

主题

2182

回帖

1万

积分

管理员

积分
13226
 楼主| 发表于 2020-1-21 15:09:56 | 显示全部楼层
import win.ui;
/*DSG{{*/
winform = win.form(text=
"百度文本转语音接口(无限制免费调用)";right=553;bottom=334)
winform.add(
button={cls=
"button";text="语音合成";left=393;top=285;right=540;bottom=321;z=1};
cbPer={cls=
"combobox";left=398;top=248;right=534;bottom=272;edge=1;items={};mode="dropdownlist";z=4};
edit={cls=
"edit";text='真的"666"';left=17;top=24;right=377;bottom=311;autohscroll=false;edge=1;multiline=1;vscroll=1;z=3};
groupbox={cls=
"groupbox";text="预转换的文字";left=7;top=1;right=387;bottom=322;edge=1;z=2}
)
/*}}*/

var wmPlay = com.CreateObject("WMPlayer.OCX");
winform.button.oncommand =
function(id,event){
   
   
var http = baidu.speech();
   
   
/*
    支持下面三种写法:
    http.setAuth( 这里直接写access_token )
    http.setAuth( 这里写一个可以获取access_token的网址 )
    http.setAuth( "hkMI2fBTaKHDLolNxkPw7ylQ","tbUgpyqX9MiCE0LKozGFaGRoLS7xZHqs" )
    )
    */

    http.setAuth(
"hkMI2fBTaKHDLolNxkPw7ylQ","tbUgpyqX9MiCE0LKozGFaGRoLS7xZHqs" )
   
   
var mp3Url,err = http.text2audio(
        tex = winform.edit.text;
        per = winform.cbPer.selText;
    )
            
    wmPlay.Url =  mp3Url;
    wmPlay.controls.play();
}

import baidu.speech;
winform.cbPer.items = baidu.speech.voices;

winform.show();
win.loopMessage();

170

主题

2182

回帖

1万

积分

管理员

积分
13226
 楼主| 发表于 2020-1-21 15:10:49 | 显示全部楼层
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text="英语语法解析工具 ( 点击语法树节点自动选中源文本, 文本框右键菜单增加翻译、朗读、搜索等 )";right=890;bottom=811;parent=...)
winform.add(
btnParse={cls=
"button";text="解析语法";left=735;top=97;right=853;bottom=143;dr=1;dt=1;font=LOGFONT(name='FontAwesome');z=3};
editMessage={cls=
"richedit";left=14;top=89;right=721;bottom=151;dl=1;dr=1;dt=1;edge=1;font=LOGFONT(h=-16);hidesel=false;hscroll=1;multiline=1;vscroll=1;z=4};
editText={cls=
"richedit";text="I want to go home";left=14;top=6;right=871;bottom=66;dl=1;dr=1;dt=1;edge=1;font=LOGFONT(h=-16);hidesel=false;hscroll=1;multiline=1;vscroll=1;z=2};
lbTranslate={cls=
"static";left=13;top=68;right=879;bottom=86;dl=1;dr=1;dt=1;transparent=1;z=6};
treeview={cls=
"treeview";left=17;top=184;right=874;bottom=804;asel=false;bgcolor=15793151;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;infoTip=1;vscroll=1;z=1};
wmplayer={cls=
"static";text="wmplayer";left=6;top=822;right=216;bottom=856;db=1;dl=1;transparent=1;z=5}
)
/*}}*/

import web.json;
winform.treeview.onnotify =
function(id,code,ptr){
   
if( code == 0xFFFFFE3D/*_TVN_SELCHANGEDW*/ ){
        
var hItem = winform.treeview.getSelection();
        
if(hItem){
            winform.editMessage.text = winform.treeview.getItemText(hItem)
            
var data  = winform.treeview.getItemData(hItem);
            
            
if(type(data)!=type.table){
                hItem = winform.treeview.getParentItem(hItem)
                data  = hItem ? winform.treeview.getItemData(hItem);
            }
               
            
if(type(data)==type.table){  
               
if(data.index && data.pos && data.token){
                    
var text = winform.editText.text;
                    
var index = 0;
                    
for i,j in string.gmatch(text ,"()\w+()") {
                        index++;
                        
if(index==data.index){
                            winform.editText.setsel(i,j-1)
                           
break ;
                        }
                    }
                    
                }
            }
        }
    }
   
elseif(code = 0xFFFFFFFB/*_NM_RCLICK*/){
        
var hItem,tvht = winform.treeview.hitTest();
        winform.treeview.setSelected(hItem);
        
        
var menu = win.ui.popmenu(winform)
        menu.add(
"删除",
            
function(){
                winform.treeview.delItem(hItem)
            }
        )
        menu.popup(x,y,
true);
    }
}

var parser = function(winform){
    winform.btnParse.disabledText = {
'\uF254';'\uF251';'\uF252';'\uF253';'\uF250'}
   
   
import youdao.fanyi;
   
var fanyi = youdao.fanyi();
    winform.lbTranslate.text = fanyi.translate(winform.editText.text)[[
"translateResult"]][[1]][[1]][["tgt"]];

   
import parseyMcParseface;
   
var deepAi = parseyMcParseface.deepAi();   
   
   
var result = deepAi.parseymcparseface(sentence=winform.editText.text)
    winform.treeview.parseData = result;
   
    result = table.mapDeep(result,
function(v,k,result){
        
if(k=="pos"){
            
var en,zh = parseyMcParseface.pos.tag.en[v],parseyMcParseface.pos.tag.zh[v]
            
if(en&&zh){
               
return zh[1] + " " + en[1]  
            }
        }
        
if(k=="label"){
            
var en,zh = parseyMcParseface.pos.label.en[v],parseyMcParseface.pos.label.zh[v]
            
if(en&&zh){
               
return v + " " + zh[1] + " " + en[1]  
            }  
        }
        
if(k=="dep"){
            
return parseyMcParseface.dep.zh[k][1];
        }
        
        
return v;
    })
   
   
if(result && result.output){
        winform.treeview.insertTable(result.output[1])
        winform.treeview.afterParse();      
    }   
   
else {
        winform.editMessage.text =
"遇到错误,试试输入单句,不要提交大段英文"
    }
   
    winform.btnParse.disabledText =
null;
}

import parseyMcParseface;
winform.treeview.afterParse =
function(){
    winform.treeview.enum(
        
function(hItem,parent){
            
var str = winform.treeview.getItemText(hItem);
            
var zh,en = parseyMcParseface.dep.zh[str],parseyMcParseface.dep.en[str]
            
if(zh && en){
                winform.treeview.setItemText(hItem,str +
": " + zh[1] + " " + en[1]);
            }
        }
    )
   
    winform.treeview.expandAll()   
}
   
winform.btnParse.oncommand =
function(id,event){
    thread.invoke(parser,winform)
}

import process;
import inet.url;
var editMenu = {
    {
/*---分隔线---*/ };
    {
"翻译/朗读";
        
function(id){
            
var word = winform.editText.selText;
            
if(!#word){
                word = winform.editText.text;
            }
            
            
import youdao.fanyi;
            
var fanyi = youdao.fanyi();
            
var result = fanyi.translate(word)[["translateResult"]][[1]][[1]];
            
if(result){
                winform.wmplayer._object.url =
"http://fanyi.baidu.com/gettts?lan=en&text="
                    + inet.url.encode(word)
                    +
"&spd=3&source=web"
                winform.lbTranslate.text = string.concat(result[[
"tgt"]]," (",result[["src"]],")");
            }
            
else {
                winform.lbTranslate.text =
"翻译接口错误"
            }
            
            fanyi.http.close()
        }
    };
    {
/*---分隔线---*/ };
    {
"Google翻译";
        
function(id){
            
var word = winform.editText.selText;
            
if(!#word){
                word = winform.editText.text;
            }
            
            
var url = "https://translate.google.cn/#en/zh-CN/" + inet.url.encode(word);
            process.openUrl(url);
        }
    };
    {
"百度翻译";
        
function(id){
            
var word = winform.editText.selText;
            
if(!#word){
                word = winform.editText.text;
            }
            
            
var url = "https://translate.google.cn/#en/zh-CN/" + inet.url.encode(word);
            process.openUrl(url);
        }
    };
    {
/*---分隔线---*/ };
    {
"Google搜索";
        
function(id){
            
var word = winform.editText.selText;
            
if(!#word){
                word = winform.editText.text;
            }
            
            
var url = "https://www.google.com/search?q=" + inet.url.encode(word);
            process.openUrl(url);
        }
    };
    {
"百度搜索";
        
function(id){
            
var word = winform.editText.selText;
            
if(!#word){
                word = winform.editText.text;
            }
            
            
var url = "https://www.baidu.com/s?ie=utf-&wd=" + inet.url.encode(word);
            process.openUrl(url);
        }
    };
}

winform.editText.enablePopMenu(editMenu);
winform.editMessage.enablePopMenu(editMenu);
winform.wmplayer = winform.wmplayer.createEmbed(
"WMPlayer.OCX");

winform.show()
win.loopMessage();

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-5-19 16:45 , Processed in 0.066436 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

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