废话不多说,直接开干!
有个需求就是在线程中,获取数据 于是乎,线程只有匿名行数
请看文档代码!
//打开控制台 io.open() //定义一个函数 func = function(){ return 1,2,3; //函数有多个返回值 } re,re2 = rget(2,func() ) //从第二个参数开始返回, re==2,re2==3 io.print( re,re2 ) re,re2 = rget(-1,func() ) //从倒数第一个参数开始返回, re==3,re2==null io.print( re,re2 )其中 re,re2 = rget(2,func() )调用匿名函数,终于找到线程中可以调用方法!这个aardiow文档说明!
文档地址
直接上我的完整代码
import win.ui; import string; import inet.whttp; import console; import fsys.file; import fsys.dlg; import thread.works import io; import com; import com.excel; import console; import mysql.client; //多线程管理器 import thread.manage //创建线程管理器 manage = thread.manage(3) //console.log("正在连接数据库服务器..."); thread.invoke( function() while(! thread.get("db4free.net:end")){ io.stdout.write(">");sleep(100); } ) var dbMysql,err = mysql.client( server = "127.0.0.1"; //数据库服务器,可省略默认为localhost uid = "root";//用户名,可省略默认为root pwd = "root"; ); thread.set("db4free.net:end",true) //console.clearScreen (); if(!dbMysql){ console.log("连接数据库失败",err); console.pause(); return; } //选择数据库 dbMysql.selectDb("test") /*DSG{{*/ mainForm = win.form(text="小鸡助手 ";right=799;bottom=599) mainForm.add( btnInsert={cls="button";text="导入";left=600;top=24;right=704;bottom=56;z=4}; btn_select_file={cls="button";text="选择文件";left=464;top=24;right=584;bottom=56;z=6}; button={cls="button";text="获取数据";left=357;top=136;right=437;bottom=168;z=1}; button2={cls="button";text="添加关键词";left=208;top=134;right=312;bottom=166;z=7}; button3={cls="button";text="导出";left=475;top=136;right=555;bottom=168;z=8}; button4={cls="button";text="确定";left=458;top=86;right=538;bottom=115;z=12}; button5={cls="button";text="清除";left=596;top=84;right=679;bottom=117;z=13}; button6={cls="button";text="获取导出";left=583;top=135;right=703;bottom=170;z=14}; combobox={cls="combobox";left=69;top=90;right=172;bottom=116;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=9}; combobox2={cls="combobox";left=183;top=89;right=287;bottom=115;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=10}; combobox3={cls="combobox";left=297;top=89;right=404;bottom=115;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=11}; edit={cls="edit";text="螺蛳粉";left=88;top=139;right=179;bottom=167;edge=1;multiline=1;z=3}; edit2={cls="edit";left=16;top=24;right=424;bottom=56;edge=1;z=5}; listview={cls="listview";left=104;top=224;right=640;bottom=504;bgcolor=12632256;border=1;edge=1;vscroll=1;z=2} ) /*}}*/ mainForm.button6.oncommand = function(id,event){ //mainForm.msgbox( mainForm.button6.text ); } mainForm.button5.oncommand = function(id,event){ mainForm.listview.clear(); } mainForm.listview.insertColumn("序号",50) mainForm.listview.insertColumn("关键词",100) mainForm.listview.insertColumn("数量",100) mainForm.listview.insertColumn("第一评论",100) mainForm.listview.insertColumn("第二评论",100) mainForm.listview.insertColumn("第三评论",100) //mainForm.listview.insertColumn("价格1",100) var num=0; var filepath; function addItem(str){ num++; mainForm.listview.addItem( { text={num;str;"0"} }) } function getResult(kwd){ import inet.whttp import win import console var http = inet.whttp("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"); var url,s var count=mainForm.listview.count;//拿到listview数据条数 for(i=1;count;1){ kwd=mainForm.listview.getItemText(i,2);//拿到关键词 这列数据 url='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wtype=1&click=1&qrst=1&rt=1&stop=1&vt=2&wq='++kwd; s = http.get(url); i2,j2 = string.find(s ,"在京东找到了"); substr = string.sub(s,i2,i2+36) //console.log(i,j,substr,"件"++kwd++"的类") i2,j2,v = string.find(substr ,"(\d+)"); mainForm.listview.setItemText(kwd++v,i,3) mainForm.listview.setItemText(v,i,3) ii2,jj2,vv = string.find(s ,"search000014_log"); substrs = string.sub(s,ii2,ii2+100) i22,j22,vv = string.find(substrs ,"(\d+),"); //console.log(substrs) i23,j23,vv2 = string.find(substrs ,",(\d+),"); i33,j33,vv3 = string.find(substrs ,vv2++",(\d+),"); url1 ='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='+vv+'&callback=jQuery1982868&_=1592352931024' ss = http.get(url1); str = "//"+ss paten=".*CommentCount.*?(\d+)," var m,m2=string.match(str,paten) //console.log(m) patens=".*?SkuId.*?(\d+)," var mm,mm2=string.match(str,patens) url2 ='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='+vv2+'&callback=jQuery1982868&_=1592352931024' ss2 = http.get(url2); str2 = "//"+ss2 paten2=".*CommentCount.*?(\d+)," var mm222,m22=string.match(str2,paten) patens=".*?SkuId.*?(\d+)," var mmm,mm22=string.match(str2,patens) url3 ='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='+vv3+'&callback=jQuery1982868&_=1592352931024' ss3 = http.get(url3); str3 = "//"+ss3 paten2=".*CommentCount.*?(\d+)," var mm333,m33=string.match(str3,paten) //console.log(mm33) patens=".*?SkuId.*?(\d+)," var mmm3,mm33=string.match(str3,patens) mainForm.listview.setItemText(m,i,4) mainForm.listview.setItemText(mm222,i,5) mainForm.listview.setItemText(mm333,i,6) //csv++= kwd+','++v+'\r\n'; //累加数据到csv } } function getNumber(kwd,obj){ import console; import thread.works; import thread.command; //使用thread.command也是一样,要等待比较长时间才输出 var listener = thread.command(); listener.logs = function(txt){ console.log(txt); } console.log(tostring(time())++" start") var useagents={ "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko"; "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0" } useagents[5]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"; useagents[6]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"; useagents[3]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"; useagents[4]="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0"; var http = inet.whttp(useagents[3]) var url,s var count=mainForm.listview.count;//拿到listview数据条数 threadfun = function (arg){ import thread.command; //随机时间模拟网络请求 math.randomize(); var tn=math.random(100,2000); sleep(tn); //thread.command.logs( getResult); import inet.whttp import win import console kwd = tostring(arg) var http = inet.whttp("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"); var url,s kwd="螺蛳粉" url='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wtype=1&click=1&qrst=1&rt=1&stop=1&vt=2&wq='++kwd; s = http.get(url); i2,j2 = string.find(s ,"在京东找到了"); ii2,jj2,vvv = string.find(s ,"search000014_log"); substrs = string.sub(s,ii2,ii2+100) i22,j22,vv = string.find(substrs ,"(\d+),"); thread.command.logs(tostring(time())++'\t'++"螺蛳粉"++'\t'++vv); return 12,vv;//函数有多个返回值 //希望每次return都能立即通知到外部并输出 } var downTask = thread.works(5,threadfun,0); for(i=1;count;1){ arg=mainForm.listview.getItemText(i,2);//拿到关键词 这列数据 downTask.push(arg); } re,re2 = rget(1,threadfun() ) //从第二个参数开始返回, re==2,re2==3 mainForm.listview.setItemText(re2,1,4) //io.print( re,re2 ) } var csv="关键词,数量,第一评论,第二评论,第三评论"+'\r\n' mainForm.button.oncommand = function(id,event){ var kwd='连衣裙'; console.log(kwd) getNumber(kwd,obj) } mainForm.btn_select_file.oncommand = function(id,event){ filepath = fsys.dlg.open()//打开文件夹选取窗口,并返回所选择的文件夹的路径 mainForm.edit2.text=filepath } mainForm.btnInsert.oncommand = function(id,event){ fullpath =assert( io.exist( filepath ) ,"文件不存在" ) tempfile = io.open(fullpath) line = tempfile.read();//读取下一行 //console.log(line) //console.log(fullpath) var nu = 0; while( line ) { nu ++; bb=string.fromto(line,936,65001); ex = string.split(bb,","); //console.log(ex[1]) //console.log(table.unpack(ex)) //io.print(table.unpack(ex)); var box = {p1=ex[2];p2=ex[3];p3=ex[4];key=ex[1]}; if(ex[2] !='' &&ex[2]!='一级类目'){ addCombobox(ex[2]); if(ex[3] !='' &&ex[3]!='二级类目'){ addCombobox2(ex[3]); if(ex[4] != ''&&ex[4]!='三级类目'){ addCombobox3(ex[4]); } } } num++; mainForm.listview.addItem( { text={num;ex[1];"0"} }) line = tempfile.read();//读取下一行 } } mainForm.button2.oncommand = function(id,event){ addItem(mainForm.edit.text) } mainForm.button3.oncommand = function(id,event){ var http = inet.whttp("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"); var url,s var count=mainForm.listview.count;//拿到listview数据条数 for(i=1;count;1){ //test1=mainForm.listview.getItemText(i,1);//拿到测试1 这列数据 kwd=mainForm.listview.getItemText(i,2);//拿到关键词 这列数据 //console.log(kwd) url='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wtype=1&click=1&qrst=1&rt=1&stop=1&vt=2&wq='++kwd; s = http.get(url); i2,j2 = string.find(s ,"在京东找到了"); substr = string.sub(s,i2,i2+36) //console.log(i,j,substr,"件"++kwd++"的类") i2,j2,v = string.find(substr ,"(\d+)"); mainForm.listview.setItemText(v,i,3) ii2,jj2,vv = string.find(s ,"search000014_log"); substrs = string.sub(s,ii2,ii2+100) i22,j22,vv = string.find(substrs ,"(\d+),"); //console.log(substrs) i23,j23,vv2 = string.find(substrs ,",(\d+),"); i33,j33,vv3 = string.find(substrs ,vv2++",(\d+),"); url1 ='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='+vv+'&callback=jQuery1982868&_=1592352931024' ss = http.get(url1); str = "//"+ss paten=".*CommentCount.*?(\d+)," var m,m2=string.match(str,paten) //console.log(m) patens=".*?SkuId.*?(\d+)," var mm,mm2=string.match(str,patens) url2 ='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='+vv2+'&callback=jQuery1982868&_=1592352931024' ss2 = http.get(url2); str2 = "//"+ss2 paten2=".*CommentCount.*?(\d+)," var mm222,m22=string.match(str2,paten) patens=".*?SkuId.*?(\d+)," var mmm,mm22=string.match(str2,patens) url3 ='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='+vv3+'&callback=jQuery1982868&_=1592352931024' ss3 = http.get(url3); str3 = "//"+ss3 paten2=".*CommentCount.*?(\d+)," var mm333,m33=string.match(str3,paten) //console.log(mm33) patens=".*?SkuId.*?(\d+)," var mmm3,mm33=string.match(str3,patens) mainForm.listview.setItemText(m,i,4) mainForm.listview.setItemText(mm222,i,5) mainForm.listview.setItemText(mm333,i,6) csv++= kwd+','+v+','+m+','+mm222+','+mm333+'\r\n'; //累加数据到csv sleep(100) var filePath=fsys.getCurDir();//获取你操作的路径 if(filePath){ string.save(filePath+"/"+"test"+'.csv',csv) win.msgbox("导出到"++filePath+"test"+'.csv') } } } mainForm.combobox.oncommand = function(id,event){ //mainForm.combobox.clear(); var result = dbMysql.query("SELECT level1 FROM `cmf_role1` where 1 limit 1,7000"); for level1 in result.each(){ mainForm.combobox.add(level1) } mainForm.combobox2.clear(); } mainForm.combobox2.oncommand = function(id,event){ datas = mainForm.combobox.text; mainForm.combobox3.clear(); var result = dbMysql.query("SELECT level2 FROM `cmf_role1` where level1='"+datas+"' limit 1,7000"); for level2 in result.each(){ mainForm.combobox2.add(level2) } } mainForm.combobox3.oncommand = function(id,event){ datas2 = mainForm.combobox2.text; var result = dbMysql.query("SELECT level3 FROM `cmf_role1` where level2='"+datas2+"' limit 1,7000"); for level3 in result.each(){ mainForm.combobox3.add(level3) } } mainForm.button4.oncommand = function(id,event){ mainForm.listview.clear(); datas = mainForm.combobox.text; datas2 = mainForm.combobox2.text; datas3 = mainForm.combobox3.text; if(datas !="请选择"){ if(datas !="请选择"&&datas2!="请选择"&&datas3!="请选择"&&datas2!=""&&datas3!=""){ //console.log(123) //查询数据并返回记录集 var result = dbMysql.query("SELECT name FROM `cmf_role1` where level1='"+datas+"' and level2='"+datas2+"' and level3='"+datas3+"'"); for name in result.each(){ mainForm.listview.addItem( { text={num;name;"0"} }) } return } if(datas !="请选择"&&datas2!="请选择"&&datas2!=""){ //console.log(12) var result = dbMysql.query("SELECT name FROM `cmf_role1` where level1='"+datas+"' and level2='"+datas2+"'"); for name in result.each(){ mainForm.listview.addItem( { text={num;name;"0"} }) } return } var result = dbMysql.query("SELECT name FROM `cmf_role1` where level1='"+datas+"'"); //console.log(11) for name in result.each(){ mainForm.listview.addItem( { text={num;name;"0"} }) } } } function addCombobox(obj){ mainForm.combobox.add(obj); } function addCombobox2(obj){ mainForm.combobox2.add(obj); } function addCombobox3(obj){ mainForm.combobox3.add(obj); } //默认显示项设置 mainForm.combobox.add("请选择") mainForm.combobox.selectString("请选择")//查找并默认选中 mainForm.combobox2.add("请选择") mainForm.combobox2.selectString("请选择")//查找并默认选中 mainForm.combobox3.add("请选择") mainForm.combobox3.selectString("请选择")//查找并默认选中 //mainForm.enableDpiScaling(); mainForm.show(); return win.loopMessage();效果图
总结:刚接触aardio一周!虽然是被大众嘲笑抛弃语言,但是耐心研究还是有收获!资质愚钝,还需努力!
