搜索
查看: 2814|回复: 9

[web] 获取百度网盘下载链接( 已更新不使用浏览器控件 )

[复制链接]

186

主题

2542

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13975
发表于 2018-5-21 15:52:41 | 显示全部楼层 |阅读模式
下面不用浏览器控件,直接获取下载页面的JS对象yunData,关键代码如下:
import console;
import web.rest.jsonLiteClient;

var http = web.rest.jsonLiteClient();
var pan = http.api("
https://pan.baidu.com/s/1iqFKXt5AockD_TdJV1TTsw",,"yunData\.(setData%())");
var yunData = pan.get();

console.dumpJson(yunData);
console.pause(
true);

( 为了简化代码,在新版 web.rest中直接支持了用模式匹配提取服务器返回数据,运行这里的代码前请先更新 aardio  )

改进后的代码如下:
import win.ui;
/*DSG{{*/
var winform = win.form(text="获取百度云下载连接";right=791;bottom=263)
winform.add(
btnCode={cls=
"button";text="提交验证码";left=600;top=128;right=728;bottom=168;z=6};
button={cls=
"button";text="获取下载链接";left=600;top=24;right=744;bottom=56;z=4};
editCode={cls=
"edit";left=392;top=128;right=568;bottom=168;edge=1;multiline=1;z=3};
editResult={cls=
"edit";left=72;top=224;right=752;bottom=248;edge=1;z=8};
editUrl={cls=
"edit";text="https://pan.baidu.com/s/1iqFKXt5AockD_TdJV1TTsw";left=64;top=24;right=592;bottom=56;edge=1;multiline=1;z=5};
groupbox={cls=
"groupbox";text="获取次数超过限制,或者验证码错误,请重新提交验证码";left=56;top=80;right=752;bottom=200;edge=1;z=7};
plusCode={cls=
"plus";left=88;top=112;right=336;bottom=184;z=2};
static={cls=
"static";text="static";left=496;top=592;right=688;bottom=640;transparent=1;z=1}
)
/*}}*/

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

getShareDownloadUrl =
function(url,vcodeInput,vcodeStr){

   
var baiduPan = http.api(url,,"yunData\.(setData%())");
   
var yunData  = baiduPan.get();
   
if(!yunData){
        winform.msgbox(
"该分享链接已失效");
        
return;
    }

   
var shareDownload = http.api("https://pan.baidu.com/api/sharedownload?sign="
        + yunData.sign +
"&timestamp=" + yunData.timestamp );
   
var result = shareDownload.post(
        encrypt = 0;
        product =
"share";
        fid_list = table.map(yunData.file_list.list,
lambda(v) v.fs_id );
        primaryid = yunData.shareid;
        uk = yunData.uk;
        vcode_input = vcodeInput;
        vcode_str = vcodeStr;
    )
   
   
if( result.errno == -20 ){
        
var vcode  = http.get("https://pan.baidu.com/api/getvcode?prod=pan");
        winform.plusCode.background = vcode.img
        winform.groupbox.hide =
false;
        winform.editCode.baiduVcodeStr = vcode.vcode;
    }
   
   
if(!result.errno) winform.editResult.text = result.list[1].dlink;
}

winform.button.oncommand =
function(id,event){
    winform.button.disabledText =
"正在获取..."
    getShareDownloadUrl( winform.editUrl.text );
    winform.button.disabledText =
null;
}

winform.btnCode.oncommand =
function(id,event){
    winform.groupbox.hide =
true;
   
    winform.button.disabledText =
"正在获取..."
    getShareDownloadUrl( winform.editUrl.text,winform.editCode.text, winform.editCode.baiduVcodeStr );
    winform.button.disabledText =
null;
}

winform.groupbox.group();
winform.groupbox.hide =
true;

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

回复

使用道具 举报

186

主题

2542

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13975
 楼主| 发表于 2018-5-23 11:23:53 | 显示全部楼层

通过浏览器控件获取百度下载链接

import win.ui;
/*DSG{{*/
var winform = win.form(text="获取百度云下载连接";right=791;bottom=263)
winform.add(
btnCode={cls=
"button";text="提交验证码";left=600;top=128;right=728;bottom=168;z=6};
button={cls=
"button";text="获取下载链接";left=600;top=24;right=744;bottom=56;z=4};
editCode={cls=
"edit";left=392;top=128;right=568;bottom=168;edge=1;multiline=1;z=3};
editResult={cls=
"edit";left=72;top=224;right=752;bottom=248;edge=1;z=8};
editUrl={cls=
"edit";text="
https://pan.baidu.com/s/1iqFKXt5AockD_TdJV1TTsw";left=64;top=24;right=592;bottom=56;edge=1;multiline=1;z=5};
groupbox={cls=
"groupbox";text="获取次数超过限制,或者验证码错误,请重新提交验证码";left=56;top=80;right=752;bottom=200;edge=1;z=7};
plusCode={cls=
"plus";left=88;top=112;right=336;bottom=184;z=2};
static={cls=
"static";text="static";left=496;top=592;right=688;bottom=640;transparent=1;z=1}
)
/*}}*/

winform.groupbox.group();
winform.groupbox.hide =
true;

import web.kit.form;//可以换成web.form或web.blink.form
var wb = web.kit.form(winform.static)

import web.rest.jsonLiteClient;
var http = web.rest.jsonLiteClient();
getShareDownloadUrl =
function(url,vcodeInput,vcodeStr){
    wb.go(url);
    wb.wait();  
   
   
var yunData = wb.script.yunData;
   
var shareDownload = http.api("https://pan.baidu.com/api/sharedownload?sign="+yunData.SIGN+"&timestamp="+yunData.TIMESTAMP);
   
   
var result = shareDownload.post(
        encrypt = 0;
        product =
"share";
        fid_list =
"[" + yunData.FS_ID + "]";
        primaryid = yunData.SHARE_ID;
        uk = yunData.SHARE_UK;
        vcode_input = vcodeInput;
        vcode_str = vcodeStr;
    )
   
   
if( result.errno == -20 ){
        
var vcode  = http.get("https://pan.baidu.com/api/getvcode?prod=pan");
        winform.plusCode.background = vcode.img
        winform.groupbox.hide =
false;
        winform.editCode.baiduVcodeStr = vcode.vcode;
    }
   
   
if(!result.errno) winform.editResult.text = result.list[1].dlink;
}

winform.button.oncommand =
function(id,event){
    getShareDownloadUrl( winform.editUrl.text );
}

winform.btnCode.oncommand =
function(id,event){
    winform.groupbox.hide =
true;
    getShareDownloadUrl( winform.editUrl.text,winform.editCode.text, winform.editCode.baiduVcodeStr );  
}

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

回复

使用道具 举报

2

主题

57

帖子

1433

积分

新手入门

积分
1433
发表于 2018-5-21 16:48:04 | 显示全部楼层
测试了,非常给力,谢谢Jacen!!
-------------------------------------------------------
回复

使用道具 举报

6

主题

100

帖子

709

积分

三级会员

Rank: 4

积分
709
发表于 2018-5-21 20:33:54 | 显示全部楼层
收下。
看起来很不错的样子。可以使用下载软件下载了。
不用遇到大文件就要调用客户端。
真好。
回复

使用道具 举报

15

主题

39

帖子

248

积分

二级会员

Rank: 3Rank: 3

积分
248
发表于 2018-5-21 21:06:00 | 显示全部楼层
膜拜Jacen膜拜Jacen膜拜Jacen
-------------------------------------------------------
回复

使用道具 举报

39

主题

174

帖子

1021

积分

荣誉会员

吃白菜的鸟

Rank: 8Rank: 8

积分
1021
发表于 2018-5-21 21:10:29 | 显示全部楼层
厉害厉害了。哇咔咔,谢谢Jacen
!
回复

使用道具 举报

6

主题

15

帖子

148

积分

一级会员

Rank: 2

积分
148
发表于 2018-5-21 22:42:43 | 显示全部楼层


运行错误,没看明白咋回事,求教
回复

使用道具 举报

186

主题

2542

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13975
 楼主| 发表于 2018-5-22 15:11:32 | 显示全部楼层
dsp2138 发表于 2018-5-21 22:42
运行错误,没看明白咋回事,求教

你哪句话 “没看明白”呢 ?!
这个错误信息是说取 javascript 的 yunData 为 null。

范例源码并没有测试所有系统环境,
大家遇到报错的情况,反馈问题时最好提供一些基本的信息,例如操作系统、IE版本。

也可以尝试自己查找排除一些简单问题,
例如 web.form使用的是IE内核,直接用你的IE都打不开百度盘下载页面,当然这个程序就用不了。


百度盘下载页面不支持低版本IE,你可以换成任何其他浏览器控件都可以,
直接把上面代码中的 web.form 替换为 web.kit.form, web.blink.form 或者 web.cefx 都可以,其他代码不用改。
回复

使用道具 举报

8

主题

45

帖子

276

积分

二级会员

Rank: 3Rank: 3

积分
276
发表于 2018-5-23 12:43:01 | 显示全部楼层
老早以前就写过一个类似的玩意,绕过登录环节,通过cookie访问自己的网盘目录并获取网盘内文件的下载链接。只是后来百度这限制那限制,就放那没怎么管了,刚才试了下,居然还能用,不过里面获取的链接失效了,但应该可以根据版主给出的代码修改下就可以了,有兴趣的同学可以看看。。。


  1. /*parseThread{{*/
  2. parseThread = function(){
  3.         import inet.whttp
  4.         import web.json
  5.         import win
  6.         import thread.command
  7.        
  8.         //JSVM
  9.         import web.script
  10.         var jscode = /**
  11. //yunData.js
  12. function s(j, r) {
  13.         var a = [];
  14.         var p = [];
  15.         var o = "";
  16.         var v = j.length;
  17.         for (var q = 0; q < 256; q++) {
  18.                 a[q] = j.substr((q % v), 1).charCodeAt(0);
  19.                 p[q] = q
  20.         }
  21.         for (var u = q = 0; q < 256; q++) {
  22.                 u = (u + p[q] + a[q]) % 256;
  23.                 var t = p[q];
  24.                 p[q] = p[u];
  25.                 p[u] = t
  26.         }
  27.         for (var i = u = q = 0; q < r.length; q++) {
  28.                 i = (i + 1) % 256;
  29.                 u = (u + p[ i ]) % 256;
  30.                 var t = p[ i ];
  31.                 p[ i ] = p[u];
  32.                 p[u] = t;
  33.                 k = p[((p[ i ] + p[u]) % 256)];
  34.                 o += String.fromCharCode(r.charCodeAt(q) ^ k)
  35.         }
  36.         return o
  37. };
  38. function base64Encode(t) {
  39.         var r, e, a, n, o, i, s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  40.         for (a = t.length, e = 0, r = ""; a > e;) {
  41.                 if (n = 255 & t.charCodeAt(e++), e == a) {
  42.                         r += s.charAt(n >> 2),
  43.                         r += s.charAt((3 & n) << 4),
  44.                         r += "==";
  45.                         break
  46.                 }
  47.                 if (o = t.charCodeAt(e++), e == a) {
  48.                         r += s.charAt(n >> 2),
  49.                         r += s.charAt((3 & n) << 4 | (240 & o) >> 4),
  50.                         r += s.charAt((15 & o) << 2),
  51.                         r += "=";
  52.                         break
  53.                 }
  54.                 i = t.charCodeAt(e++),
  55.                 r += s.charAt(n >> 2),
  56.                 r += s.charAt((3 & n) << 4 | (240 & o) >> 4),
  57.                 r += s.charAt((15 & o) << 2 | (192 & i) >> 6),
  58.                 r += s.charAt(63 & i)
  59.         }
  60.         return r
  61. }
  62. **/
  63.         var jsvm = web.script()
  64.         jsvm.AddCode(jscode)

  65.         var http = inet.whttp()
  66.         var cookie = ""
  67.         var yunData = {}
  68.         getSign = function( path ){
  69.                 var tmp = "https://pan.baidu.com/disk/home?#list/path=%s&vmode=list"
  70.                 tmp = ..string.format( tmp, inet.url.encode(path) )
  71.                 tmp = http.get( tmp, cookie )
  72.                 if(tmp) tmp = ..string.match(tmp,"\scontext[\s=]+(%{})")
  73.                 if(tmp) yunData = web.json.parse(tmp)
  74.                 if(tmp) tmp = jsvm.run("s", yunData.sign3, yunData.sign1 )
  75.                 if(tmp) yunData.sign = inet.url.encode( jsvm.run("base64Encode", tmp) )
  76.                 return yunData.sign
  77.         }
  78.         getList = function( path ){
  79.                 var tmp = "https://pan.baidu.com/api/list?order=name&desc=0&showempty=0&web=1&page=1&num=100&dir=%s&web=1&app_id=250528&clienttype=0"
  80.                 tmp = ..string.format( tmp, inet.url.encode(path) )
  81.                 tmp = http.get( tmp, cookie )
  82.                 if(tmp) tmp = ..string.replace(tmp,"(\Wfs_id[\s\:'""]+)(\d+)","\1""\2""")
  83.                 if(tmp) tmp = web.json.parse( tmp )
  84.                 return tmp
  85.         }
  86.         getDlink = function( fs_id ){
  87.                 var tmp = "https://pan.baidu.com/api/download?sign=%s&timestamp=%s&fidlist=%%5B%s%%5D"
  88.                 tmp = ..string.format(tmp, yunData.sign, yunData.timestamp, fs_id)
  89.                 tmp = http.get(tmp, cookie)
  90.                 if(tmp) tmp = web.json.parse(tmp)
  91.                 return tmp
  92.         }
  93.        
  94.         var thcmd = {}
  95.         var thcmdPost = thread.command.post
  96.         thcmd.getList = function( p, v ){
  97.                 var tmp
  98.                 if(#cookie){
  99.                         thcmdPost("mainThread", "error", "请稍候……" )
  100.                         p = #p ? p : "/"
  101.                         tmp = getList(p)
  102.                         if(tmp) thcmdPost("mainThread", "getList", tmp, p )
  103.                         else thcmdPost("mainThread", "error", "getList错误@2: 获取数据失败,unknow?" )
  104.                         return;
  105.                 }
  106.                 if(p = "cookie"){
  107.                         thcmdPost("mainThread", "error", "请稍候……" )
  108.                         cookie = v
  109.                         tmp = yunData.sign ? yunData.sign : getSign("/")
  110.                         if(tmp) tmp = getList("/")
  111.                         if(tmp) thcmdPost("mainThread", "getList", tmp, "/" )
  112.                         else{
  113.                                 cookie = null
  114.                                 thcmdPost("mainThread", "error", "getList错误@1: 获取数据失败,Cookie不正确或者已失效?" )
  115.                         }
  116.                         return
  117.                 }
  118.                 thread.command.post("mainThread","cookie")
  119.         }
  120.         thcmd.getDlink = function(p){
  121.                 thcmdPost("mainThread", "error", "请稍候……" )
  122.                 var tmp = getDlink(p).dlink[1].dlink
  123.                 if(tmp) thcmdPost("mainThread", "getDlink", tmp )
  124.                 else thcmdPost("mainThread", "error", "getDlink错误@1: 获取下载链接" )
  125.         }

  126.         var command = thread.command()
  127.         command[ "parseThread" ] = function(strcmd, ...){
  128.                 thcmd[ strcmd ](...)
  129.         }
  130.         win.loopMessage()
  131. }
  132. ..thread.create( parseThread )
  133. /*}}*/

  134. import win.ui
  135. import win.image
  136. import process
  137. import win.ui.shadow
  138. import thread.command
  139. /*DSG{{*/
  140. var winform = win.form(text="百度网盘";right=759;bottom=469;acceptfiles=1;bgcolor=7036747;border="none")
  141. winform.add(
  142. asEdit={cls="richedit";left=2;top=406;right=758;bottom=467;bgcolor=12639424;border=1;db=1;dl=1;dr=1;dt=1;link=1;multiline=1;vscroll=1;wrap=1;z=3};
  143. button={cls="button";text="根目录&&初始化";left=659;top=32;right=758;bottom=59;bgcolor=7036747;z=2};
  144. edit={cls="edit";left=4;top=33;right=656;bottom=58;color=255;edge=1;multiline=1;z=4};
  145. lvFile={cls="listview";left=2;top=60;right=758;bottom=405;edge=1;fullRow=1;gridLines=1;tabstop=1;z=1}
  146. )
  147. /*}}*/


  148. winform.add(
  149. tBar={cls="custom";left=0;top=0;right=winform.width;bottom=30;bgcolor=0xc37100;z=2};
  150. )
  151. //初始化listview控件
  152. winform.lvFile.insertColumn("#",520);
  153. winform.lvFile.insertColumn("#",80);
  154. winform.lvFile.adjust = function(cx,cy){
  155.     winform.lvFile.fillParent(1);
  156. }
  157. //消除listview刷新数据时闪烁
  158. listview_nf = function(lv/*listview对象*/){
  159.         lv.setExtended(0x10000/*_LVS_EX_DOUBLEBUFFER*/) //启用双缓冲
  160.         lv.wndproc = function(hwnd,message,wParam,lParam){
  161.                 if(message == 0x14 ){ return 0 }
  162.         }
  163. }
  164. listview_nf(winform.lvFile)
  165. //添加阴影窗口
  166. win.ui.shadow(winform)

  167. ttbar = winform.tBar
  168. ttbar.add(
  169. btnClose={cls="plus";left=ttbar.right-24;top=3;right=ttbar.right-4;bottom=27;dr=1;dt=1;notify=1;z=2};
  170. title={cls="static";text="百度网盘解析 by 土冒 自用版";left=5;top=3;right=ttbar.right-25;bottom=27;notify=1;bgcolor=0x3b5998;transparent=1;center=1;color=0xeadfd8;dl=1;dr=1;dt=1;font=LOGFONT( name='微软雅黑';h=-16;weight=700 );z=3}
  171. )
  172. //关闭按钮样式
  173. m_close = {active='\x89PNG\r\n\x1A\n\0\0\0\rIHDR\0\0\0\x1E\0\0\0$\x08\x02\0\0\0\x11\xB3\x1D>\0\0\0\x19tEXtSoftware\0Adobe ImageReadyq\xC9e<\0\0\x03"iTXtXML:com.adobe.xmp\0\0\0\0\0<?xpacket begin="\xEF\xBB\xBF" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS6 (Windows)" xmpMM:InstanceID="xmp.iid:96D605A4693711E3BD18D4C89AEC6796" xmpMM:DocumentID="xmp.did:96D605A5693711E3BD18D4C89AEC6796"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:96D605A2693711E3BD18D4C89AEC6796" stRef:documentID="xmp.did:96D605A3693711E3BD18D4C89AEC6796"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>\x10\x14x\x18\0\0\0\xD2IDATx\xDAb|\x19\x1A\xC1@\x1B\xC0\xC4@30j\xF4\xA8\xD1\xA3FS\xD3h\xB1U\xCB\x81\x88T)\xC2F\x8B\xACX\xFA\x0F\x0C\x80\x0C\xE2\xA5\x882\xFAMD\xF4_\x18\x10\\\xBA\x08.\x0Ed\xC3\xC5\x81j\xC8\x0C\x90\xF7\xD1q\x7F`\x80w\xE1<\xA0\x08\x90\x84\x8B\0e\xF1\xE8e$\xA6P\xE5\x9A7\x1BS\xF0[R*\x15R\x08\xD0\x94\xDF\xA8\x80\xA0\xB9@\xC0BdJ\x02z\x9F&\xE9\xFA\xEF\xC4\xBE?\xA8\0(B\x05\xA3\x7F\xF4t\xC2\xC3\x819\xBF\x08\xCE\x06\x8ASd\xF4\xD7\xCE6x:\xE3()\x07\x8A\0I\xB8\x08P\x96L\xA3?\xB66\xC1C\x80\xBB\xBC\n.\x0Ed\xC3\xC5\x81j\xC81\x9A\xBF\xBA\x0E\xE2: \x83x)\xD2\xD2\xF5h\xA1:j\xF4\xA8\xD1\xA3F\xD3\xDFh\x80\0\x03\0v\xD4\xCC\x81_\xEB\xAA\\\0\0\0\0IEND\xAEB`\x82';
  174.         default='\x89PNG\r\n\x1A\n\0\0\0\rIHDR\0\0\0\x1E\0\0\0$\x08\x06\0\0\0\x9E\xD1\x8Ai\0\0\0\x19tEXtSoftware\0Adobe ImageReadyq\xC9e<\0\0\x03"iTXtXML:com.adobe.xmp\0\0\0\0\0<?xpacket begin="\xEF\xBB\xBF" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS6 (Windows)" xmpMM:InstanceID="xmp.iid:7FFB6EC2693711E391F3DC1F7BB7FD03" xmpMM:DocumentID="xmp.did:7FFB6EC3693711E391F3DC1F7BB7FD03"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:7FFB6EC0693711E391F3DC1F7BB7FD03" stRef:documentID="xmp.did:7FFB6EC1693711E391F3DC1F7BB7FD03"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>\xDF\xF468\0\0\0\xC5IDATx\xDA\xEC\x95\xB1\n\xC3 \x10@sR\x07!\x8BcF\x07\xC1\xFF\xFF\x1A!\x83\x90\xC51\x8B\xE0\x10\xD16\x85@\xA5\r\x18MZ\n\'8\xE8\xBD\xF3qx"\xA4\x94\xBA_\x0C@1\x8AQ\x8Cb\x14_!\xDE@hd\xCA\xC51\xC6\x0C"\x84@\rSU\xF1\xB2,\x19H)\x85\x92\xD8)w\xEC\xBD\xCF`\xC6\x18|\xDA\xBB\xA4\xB9\x9Cs\xBB\t}\xDF\xC3\xA5]=\xCF\xF3[\x12\xE7\x1C\x8E\x9Cq\xABy\n!\x84\xEF\xBFck\xEDn\xC20\x0C\xC5U\x93#\xD2i\x9A\xD2\xA3\x83\xBBm\xAE\xA2\xD7\xF5\x1A?\xBDbcL\x06\n!\xA0$\xD6$\x1E\xC71\x83\xA4\x94P\xC3TU\xAC\xB5~\x82J)ha\xF0wB1\x8AQ\x8C\xE2\xFF\x11\xDF\x05\x18\0\xF3}\xBF\xF3\xC1\xEA\x10l\0\0\0\0IEND\xAEB`\x82'
  175. }
  176. ttbar.btnClose.skin(
  177.         background = {
  178.                 hover = m_close.active;
  179.                 default = m_close.default
  180.         }
  181. )
  182. ttbar.btnClose.oncommand = function(id,event){
  183.         winform.close()
  184. }
  185. //添加下面的代码以支持鼠标拖动窗体
  186. ttbar.wndproc = function(hwnd,msg,wParam,lParam){
  187.         if(msg == 0x201) winform.hitCaption()
  188. }
  189. ttbar.title.wndproc = function(hwnd,msg,wParam,lParam){
  190.         if(msg == 0x201) winform.hitCaption()
  191. }
  192. winform.wndproc = function(hwnd,msg,wParam,lParam){
  193.         if(msg == 0x201) winform.hitCaption()
  194. }

  195. import win.ui.menu
  196. winform.asEdit.wndproc = function(hwnd,msg,wParam,lParam){
  197.         if(msg == 0x204/*_WM_RBUTTONDOWN*/) owner.popMenu()
  198. }
  199. winform.asEdit.onlink = function(msg,title){
  200.         if(msg == 0x202) process.execute( title )
  201. }
  202. var editText,editMark = "Cookie:"
  203. winform.edit.text = editText
  204. winform.edit.wndproc = function(hwnd,msg,wParam,lParam){
  205.         if(msg == 0x7/*0x282*/ && !editMark && owner.text == editText){
  206.                 editMark = 1
  207.                 owner.text = ""
  208.                 owner.color = 0
  209.         }
  210.         elseif(msg == 0x8/*0x281*/ && editMark && !#owner.text){
  211.                 editMark = 0
  212.                 owner.text = editText
  213.                 owner.color = 0xff
  214.         }
  215. }

  216. //格式化文件大小信息
  217. szFmt = function( n ){
  218.         n = tonumber(n)
  219.         if( n < 1000 ) n = n ++ '字节'
  220.         elseif( n < 1024*1000 ) n = ..math.round(n/1024*100)/100 ++ 'KB'
  221.         elseif( n < 1024*1024*1000 ) n = ..math.round(n/1024/1024*100)/100 ++ 'MB'
  222.         else n = ..math.round(n/1024/1024/1024*100)/100 ++ 'GB'
  223.         return n
  224. }
  225. var thcmd,yunList = {}
  226. var thcmdPost = thread.command.post
  227. winform.button.oncommand = function(id,event){
  228.         thcmdPost( "parseThread","getList" )
  229. }
  230. winform.lvFile.wndproc = function(hwnd,msg,wParam,lParam){
  231.         if(msg == 0x203){
  232.                 var n = winform.lvFile.selIndex
  233.                 if(!n) return;
  234.                 if(yunList[n].isdir){
  235.                         thcmdPost( "parseThread","getList", yunList[n].path )
  236.                 }
  237.                 else {
  238.                         thcmdPost( "parseThread","getDlink", yunList[n].fs_id )
  239.                 }
  240.         }
  241. }

  242. thcmd.cookie = function(){
  243.         var cookie = winform.edit.text
  244.         if(#cookie>#editText){
  245.                 thcmdPost( "parseThread", "getList", "cookie", cookie )
  246.         }else{
  247.                 winform.asEdit.text = "cookie不能为空"
  248.         }
  249. }
  250. thcmd.error = function(p){
  251.         winform.asEdit.text = p
  252. }
  253. var cf = win.ui.ctrl.CHARFORMAT2()
  254. cf.textColor = 0x0000ff
  255. thcmd.getList = function(p,v){
  256.         yunList = p.list
  257.         if(!yunList) return;
  258.        
  259.         winform.lvFile.clear()
  260.         for(i=1;#yunList;1){
  261.                 var isdir = yunList[ i ].isdir ? "文件夹" : szFmt(yunList[ i ].size)
  262.                 winform.lvFile.addItem( {yunList[ i ].server_filename;isdir} )
  263.         }
  264.         winform.asEdit.text = "路径:根目录" + v
  265.         winform.asEdit.setsel(4,-1)
  266.         winform.asEdit.setSelCharformat(cf)
  267.         winform.asEdit.deselect()
  268. }
  269. thcmd.getDlink = function(p){
  270.         winform.asEdit.text = p
  271. }

  272. var command = thread.command()
  273. command[ "mainThread" ] = function(strcmd, ...){
  274.         thcmd[ strcmd ](...)
  275. }

  276. //io.open()
  277. winform.asEdit.text = '说明:需在浏览器登录网盘,手动获取登录成功后完整的Cookie\r\nCookie可以在各主流浏览器的开发者工具里很方便获取到'

  278. winform.asEdit.setsel(1,2)
  279. winform.asEdit.setSelCharformat(cf)
  280. winform.asEdit.deselect()

  281. winform.show()
  282. win.loopMessage();
复制代码
回复

使用道具 举报

2

主题

77

帖子

549

积分

三级会员

Rank: 4

积分
549
发表于 2018-5-27 13:17:35 | 显示全部楼层
已测试,很好用,可以调用迅雷下载了



                                       
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-9-26 02:34 , Processed in 0.093750 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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