获取蓝奏云有密码和无密码分享的直连地址

By admin at 2020-09-15 • 0人收藏 • 2920人看过

感谢:xauto 分享代码

image.png

import web.json;
import string.html;
import web.rest.client;

namespace lanzou;

class client {
    ctor(...) {
        this = ..web.rest.client(...);
        this.addHeaders = {
            ["origin"] = "https://www.lanzous.com";
            ["Accept-Language"] = "zh-CN,zh;q=0.8";
            ["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36 Edg/79.0.309.51";
        }
    };

    getUrl = function(url, pwd = "") {
        var data;
        this.parseResponseResult = λ(s)..string.html(s);
        // 请求下载页面 
        var htmlDoc = this.get(url)
        if (!# pwd) {
            // 先拿到iframe地址
            var iframe = htmlDoc.queryEles(tagName = "iframe");
            var url = "https://www.lanzoux.com" + iframe[1].src;
            // 获取 ajax 请求 data
            var html = this.get(url)
            var script = html.queryEles(tagName = "script");
            var txt = script[2][1].text;
            data = ..web.json.parse(..string.match(txt, "<^\/>data\s\:\s(%{})"));
        } else {
            //获取 ajax 请求 sign
            var script = htmlDoc.queryEles(tagName = "script");
            var txt = script[3][1].text;
            var sign = ..string.match(txt, "sign\=(.+)\&");
            // 自己构造 ajax 请求 data
            data = { action = "downprocess"; sign = sign; p = pwd };
        }
        // 请求 ajax 获取跳转地址
        this.parseResponseResult = λ(s)..web.json.parse(s);
        var ajax = this.post("https://www.lanzous.com/ajaxm.php", data)
        var url = ajax.dom + '/file/' + ajax.url

        // 请求跳转地址获取302重定向地址
        this.parseResponseResult = λ() this._http.location();
        return this.get(url)
    }
}

//测试代码
(function(){
    import console;
    console.setTitle("Lanzou client test!");
    
    var nopl = "https://www.lanzoux.com/iRwihgmkl0j";
    var purl = "https://www.lanzoux.com/i2XAqgmkl1a"
    var pwd = "AArdio";
    
    var lanzou = client()
    
    console.printf('无密码分享链接:\n%s\n', lanzou.getUrl(nopl))
    console.printf('有密码分享链接:\n%s', lanzou.getUrl(purl, pwd))
    
    console.pause(true);
})()


3 个回复 | 最后更新于 2020-10-04
2020-10-01   #1

无密码分享sign写到ajaxdata变量里面去了,直接匹配data会获取不到url 直接匹配sign构造data就好了!

//data = ..web.json.parse( ..string.match( txt, "<^\/>data\s\:\s(%{})" ) )
var ajaxdata = ..string.match(txt, "ajaxdata\s\=\s(%'')");

data = {
    action = "downprocess";
    sign = ..string.trim(ajaxdata, "'");
    ves = 1;
};


2020-10-04   #2

回复#1 @codex :

谢谢分享

2020-10-04   #3
namespace lanzou;

class client {
    ctor(...) {
        this = client(...);
        this.addHeaders = {
            ["origin"] = _host;
            ["Accept-Language"] = "zh-CN,zh;q=0.8";
            ["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36 Edg/79.0.309.51";
        }
    };

    getUrl = function(url, pwd) {
        var data = { action = "downprocess" };
        this.parseResponseResult = λ(s) s;
        if (!pwd) {
            data.sign = this.api(url, "GET", function(ret) {
                var src = match(ret, `\d{2}\"\ssrc\=\"(.+)\"\sf`);
                if (src) return this.api(_host + src, "GET", `data\s\=\s\'(.+)\';`)()
            })()
            data.ves = 1;
        } else {
            data.sign = this.api(url, "GET", `sign\=(.+)\&p`)()
            data.p = pwd;
        }
        this.parseResponseResult = λ(s) parse(s);
        var ajax = this.post(_host + "ajaxm.php", data)
        return this._http.location(ajax.dom + '/file/' + ajax.url); 
    };

    getList = function(url, pwd) {
        this.parseResponseResult = λ(s) s;
        var data = this.api(url, "GET", function(ret) {
            var data = parse(match(ret, `<^\/>data\s\:\s(%{})`))
            var getValue = λ(s) trim(match(ret, s + "\s\=\s(%'')"), "'")
            data.t = getValue(data.t)
            data.k = getValue(data.k)
            data.pg = 1
            return data;
        })();
        if (pwd) data.pwd = pwd
        this.parseResponseResult = λ(s) parse(s);
        return this.post(_host + "filemoreajax.php", data)
    };

    getId = function(id) {
        var url = _host + id;
        return this.getUrl(url);
    };

    getShare = function(url, pwd) {
        if (!indexOf(url, "http")) return this.getId(url);
        if (!!indexOf(url, "/i")) return this.getUrl(url, pwd);
        if (!!indexOf(url, "/b")) return this.getList(url, pwd);
    }

}

namespace client {
    import web.json;
    import web.rest.client;

    trim = ..string.trim;
    match = ..string.match;
    parse = web.json.parse;
    client = web.rest.client;
    indexOf = ..string.indexOf;
    _host = "https://www.lanzous.com/"
}

/**intellisense()
lanzou.client = 蓝奏云客户端支持库
lanzou.client() = 创建蓝奏云客户端\n!lanc.
!lanc.getUrl(.(url, pwd) = 获取蓝奏云分享直连
!lanc.getList(.(url, pwd) = 获取蓝奏云分享文件夹列表
!lanc.getId(.(id) = 通过 id 获取蓝奏云分享直连
!lanc.getShare(.(url, pwd) = 通过分享链接、Id获取蓝奏云分享直连或文件列表
end intellisense**/

//测试代码
(function() {
    import console;
    console.setTitle("Lanzou client test!");

    var nopl = "https://www.lanzoux.com/iRwihgmkl0j";
    var purl = "https://www.lanzoux.com/i2XAqgmkl1a"
    var pwd = "AArdio";

    var lanzou = client()

    console.printf('无密码分享链接:\n%s\n', lanzou.getShare(nopl))
    console.printf('有密码分享链接:\n%s', lanzou.getShare(purl, pwd))

    var list = lanzou.getShare("https://www.lanzous.com/b594057/", "5sfr");
    console.dumpJson(list)

    console.log(lanzou.getShare(list.text[1].id))

    console.pause(true);
})()


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...