├── .github └── FUNDING.yml ├── Desktop App └── README.MD ├── docs ├── README.md ├── _coverpage.md ├── _sidebar.md ├── index.html ├── 关于.md ├── 关于我.md ├── 安装.md ├── 接口文档.md ├── 支持网盘.md ├── 添加支持网盘.md ├── 端口修改.md ├── 解析.md ├── 运行.md ├── 配置修改.md └── 飞猫云.md ├── favicon.ico ├── java └── README.MD ├── nodejs ├── _data ├── app.js ├── config │ ├── cookie.json │ ├── server.json │ └── wp.json ├── model │ ├── 1988wp.js │ ├── 567pan.js │ ├── 77file.js │ ├── dudujb.js │ ├── dufile.js │ ├── expfile.js │ ├── feimaoyun.js │ ├── kufile.js │ ├── lanzou.js │ ├── ownfile.js │ ├── rosefile.js │ ├── xfpan.js │ ├── xingyaoyun.js │ ├── xueqiuyun.js │ ├── xunniu.js │ └── yifile.js ├── package.json ├── util │ ├── StrUtil.js │ ├── connect.js │ ├── request.js │ ├── resolve.js │ └── version.js └── yarn.lock └── vue ├── .date ├── README.md ├── favicon.ico ├── http ├── _data └── api │ └── resolve.php ├── index.html └── static └── wp.min.css /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: ["https://www.ilzya.com/donate.html"]# Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /Desktop App/README.MD: -------------------------------------------------------------------------------- 1 | 进行中 2 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # NetDiskResolve 2 | 3 | Node版本的网盘下载辅助 4 | 5 | > PC端下载工具 6 | 7 | [查看PC端下载工具](https://www.ilzya.com/archives/4/) 8 | 9 | **集成** 10 | 11 | - Aria 下载 12 | - IDM 下载 13 | - 迅雷下载 14 | 15 | > 前端代码 16 | 17 | ` /Vue ` 18 | 19 | >后端代码 20 | 21 | ` /nodejs ` 22 | 23 | 项目已完全开源 24 | 25 | 相关文档:https://lzyab.github.io/netdiskresolve 26 | 27 | 国内相关文档:http://docs.ilzya.com/#/%E6%94%AF%E6%8C%81%E7%BD%91%E7%9B%98 28 | 29 | 30 | > 联系我 31 | 32 | 33 | QQ:2044186427 34 | 35 | 博客:[空城里](https://www.ilzya.com) 36 | 37 | 皮皮虾:lzyAB 38 | 39 | -------------------------------------------------------------------------------- /docs/_coverpage.md: -------------------------------------------------------------------------------- 1 | logo 2 | 3 | # 网盘下载文档 4 | 5 | > 使用Vue+Node.js 6 | 7 | * 前端框架:Vue 8 | * UI类库:Element UI 9 | * 后端:Node.js 10 | 11 | [GitHub](https://github.com/lzyAB/netdiskresolve) 12 | [博客](https://www.ilzya.com) 13 | [Get Started](#NetDiskResolve) -------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | - [NetDiskResolve](#README) 2 | - [安装](安装.md) 3 | - [运行](运行.md) 4 | - [支持网盘](支持网盘.md) 5 | - [接口文档](接口文档.md) 6 | - [解析](解析.md) 7 | - [配置修改](配置修改.md) 8 | - [端口修改](端口修改.md) 9 | - [飞猫云](飞猫云.md) 10 | - [添加支持网盘](添加支持网盘.md) 11 | 12 | - [关于](关于.md) 13 | - [关于我](关于我.md) -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /docs/关于.md: -------------------------------------------------------------------------------- 1 | ## 关于 2 | 3 | > 这里是关于作者的一些信息 -------------------------------------------------------------------------------- /docs/关于我.md: -------------------------------------------------------------------------------- 1 | ## 关于我 2 | 3 | > 4 | 5 | - Name :lzyAB 6 | - BLOG :[空城里 www.ilzya.com](https://www.ilzya.com) 7 | - Code L : ` Java ` ` Pyhon ` ` JavaScript ` 8 | - 支持我:[支持我](https://www.ilzya.com/donate.html) -------------------------------------------------------------------------------- /docs/安装.md: -------------------------------------------------------------------------------- 1 | ## 安装 2 | 3 | 4 | ``` git 5 | git clone https://github.com/lzyAB/netdiskresolve.git 6 | ``` 7 | 8 | ## 依赖 9 | 10 | > 后端需要下载必须的依赖 ` /nodejs ` 目录 11 | 12 | ``` shell 13 | yarn 14 | ``` -------------------------------------------------------------------------------- /docs/接口文档.md: -------------------------------------------------------------------------------- 1 | ## 接口文档 2 | 3 | > 提供后台所支持的接口文档及SDK实例 -------------------------------------------------------------------------------- /docs/支持网盘.md: -------------------------------------------------------------------------------- 1 | ## 支持网盘 2 | 3 | > 以下是整理后所测试成功过的网盘,可能部分会失效 4 | 5 | |
网盘名称
|
支持域名
| 6 | |:----:|:----:| 7 | |飞猫云|` www.feimaoyun.com ` ` www.feemoo.com ` ` www.fmpan.com` | 8 | |77file|` www.77file.com `| 9 | |讯牛网盘|` www.xun-niu.com `| 10 | |567盘|` www.567yunpan.com `| 11 | |DuFile网盘|` dufile.com `| 12 | |ExpFile|` www.expfile.com `| 13 | |雪球云盘|` www.xueqiupan.com `| 14 | |先锋网盘|` www.xfpan.cc `| 15 | |OwnFile|` ownfile.net `| 16 | |贵族网盘|` www.dudujb.com `| 17 | |YIFile|` www.yifile.com `| 18 | |1988网盘|` www.1988wp.com `| 19 | |Rose云盘|` rosefile.net `| 20 | |星耀云盘|` www.xingyaopan.com `| 21 | |库云|` www.kufile.net ` ` www.onstclouds.com `| 22 | 23 | -------------------------------------------------------------------------------- /docs/添加支持网盘.md: -------------------------------------------------------------------------------- 1 | ## 添加支持网盘 2 | 3 | > 每个网盘都对应一个数字编号,例如 ` 飞猫云 ` 对应 0 4 | 5 | **如何添加?** 6 | 7 | 配置文件以json方式存储在 ` /config/wp.json ` 中 8 | 9 | 例如需要增加飞猫云的一个域名为:` www.fmyun.com ` 10 | 11 | 那么你需要在配置文件中加入 ` "www.fmyun.com":0 ` 12 | 13 | ` key ` 对应需要添加的域名,` value ` 对应网盘对应的数字编号 14 | 15 | 如果配置文件中没有存在该网盘,数字编号按配置文件已存在的最大数字+1存储 16 | -------------------------------------------------------------------------------- /docs/端口修改.md: -------------------------------------------------------------------------------- 1 | ## 端口修改 2 | 3 | > 端口是以json文件保存在 ` /config/server.json ` 中 4 | 5 | 6 | 打开 ` /config/server.json ` 文件,找到port项,修改为你想要的端口号,默认1306 -------------------------------------------------------------------------------- /docs/解析.md: -------------------------------------------------------------------------------- 1 | ## 解析 2 | 3 | **接口地址** ` /resolve ` 4 | 5 | **请求方式** ` POST ` 6 | 7 | **请求参数** 8 | 9 | | 参数 | 值 | 10 | |-----|-----| 11 | | url | 要解析的文件地址 | 12 | 13 | **调用例子(Ajax)** 14 | 15 | ```JavaScript 16 | $.ajax({ 17 | url: '/resolve', 18 | type: 'POST', 19 | data: { 20 | "url": ""//文件地址 21 | }, 22 | success:(res)=>{ 23 | alert(res); 24 | if(res.data.code == '0'){ 25 | //解析成功 26 | }else{ 27 | //解析失败 28 | } 29 | } 30 | }) 31 | ``` 32 | 33 | **返回结果** 34 | 35 | ```json 36 | { 37 | "code": 0, 38 | "fileid": "1520468", 39 | "filename": "ProgramCat", 40 | "filesize": "20.17 M", 41 | "durl": "下载地址", 42 | "message": "解析成功" 43 | } 44 | ``` -------------------------------------------------------------------------------- /docs/运行.md: -------------------------------------------------------------------------------- 1 | ## 运行 2 | 3 | ```shell 4 | node app 5 | ``` 6 | 7 | 服务默认端口为1306,如需要更改请到 ` /nodejs/config/server.json ` 修改 8 | 9 | ```json 10 | { 11 | "server":1306, //服务端口 12 | "log-server":false //输出请求参数 13 | } 14 | ``` -------------------------------------------------------------------------------- /docs/配置修改.md: -------------------------------------------------------------------------------- 1 | ## 配置修改 2 | 3 | > 修改完配置需要重启node服务 4 | 5 | 修改后端端口号,识别网盘,飞猫云COOKIE -------------------------------------------------------------------------------- /docs/飞猫云.md: -------------------------------------------------------------------------------- 1 | ## 飞猫云配置 2 | 3 | 想要解析飞猫云文件就需要登录飞猫云账号 4 | 5 | 1. 首先到飞猫云官网:www.feimaoyun.com 登录账号 6 | 2. 然后打开开发者控制台 7 | 3. 输入document.cookie 8 | 4. 复制输出的cookie 9 | 5. 粘贴到 ` /config/cookie.json ` 1 中 10 | 11 | > 飞猫云账号可能会掉线,可能1个月掉一次,掉线后需要重复以上步骤 -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LauZzL/netdiskresolve/c3bd45e7280e3533746ad7676f34bfa23da3ef9a/favicon.ico -------------------------------------------------------------------------------- /java/README.MD: -------------------------------------------------------------------------------- 1 | stop 2 | -------------------------------------------------------------------------------- /nodejs/_data: -------------------------------------------------------------------------------- 1 | 20220416 2 | -------------------------------------------------------------------------------- /nodejs/app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * blog:https://www.ilzya.com 3 | * author:lzyAB 4 | * update:2022-4-16 5 | */ 6 | 7 | 8 | const server = require('./config/server') 9 | 10 | const port = server['port'] //端口 11 | 12 | //引入express模块 13 | const express = require('express') 14 | 15 | 16 | 17 | 18 | const resolve = require('./util/resolve') 19 | const version = require('./util/version') 20 | const connect = require('./util/connect') 21 | 22 | 23 | var bodyParser = require("body-parser"); 24 | 25 | //创建app对象 26 | const app = express() 27 | 28 | 29 | app.use(bodyParser.json()) 30 | app.use(bodyParser.urlencoded({ extended: true })) 31 | 32 | //该地址是用来NetDiskResolve PC端下载工具使用 33 | app.post('/connect', connect) 34 | 35 | app.post('/resolve', resolve) 36 | 37 | //该地址是用来NetDiskResolve PC端下载工具使用 38 | app.post('/version', version) 39 | 40 | 41 | //4.启动服务监听端口 42 | app.listen(port,()=>{ 43 | console.log("run port:" + port) 44 | }) -------------------------------------------------------------------------------- /nodejs/config/cookie.json: -------------------------------------------------------------------------------- 1 | { 2 | "1":"", 3 | "10":"PHPSESSID=1g9l37mv8bkulmk76tspbj13v7; _ga=GA1.2.1944358622.1649943546; _gid=GA1.2.630952406.1649943546; money_id=3; tz=2; view_stat=1" 4 | } -------------------------------------------------------------------------------- /nodejs/config/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "port":1306, 3 | "log-server":false, 4 | "v":"1.0.0", 5 | "isrun":true, 6 | "norunmessage":"这里是关闭接口提示的信息,isrun为false才会显示" 7 | } -------------------------------------------------------------------------------- /nodejs/config/wp.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "www.feimaoyun.com":0, 4 | "www.feemoo.com":0, 5 | "www.fmpan.com":0, 6 | "www.77file.com":1, 7 | "www.xun-niu.com":2, 8 | "www.xunniupan.com":2, 9 | "www.567yunpan.com":3, 10 | "dufile.com":4, 11 | "www.expfile.com":5, 12 | "www.xueqiupan.com":6, 13 | "www.xfpan.cc":7, 14 | "ownfile.net":8, 15 | "www.dudujb.com":9, 16 | "www.yifile.com":10, 17 | "www.1988wp.com":11, 18 | "rosefile.net":12, 19 | "www.xingyaopan.com":13, 20 | "www.kufile.net":14, 21 | "www.onstclouds.com":14 22 | } -------------------------------------------------------------------------------- /nodejs/model/1988wp.js: -------------------------------------------------------------------------------- 1 | const request = require('../util/request') 2 | const str = require('../util/StrUtil') 3 | 4 | 5 | /** 6 | * 1988网盘解析 7 | * @param {*} req 8 | * @param {*} res 9 | */ 10 | module.exports = (req,res) => { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"align='absbottom' border='0' /> ","").toString() 23 | filesize = str.subStringMulti(result,'文件大小: ','').toString() 24 | fileid = str.subStringMulti(result,"action=dolike&file_id=","'").toString() 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('http://www.1988wp.com/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,' { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"

","

").toString() 23 | filesize = str.subStringMulti(result,'文件大小:',',').toString() 24 | fileid = str.subStringMulti(result,"down2-",".html").toString() 25 | console.log(fileid) 26 | if(fileid == ''){ 27 | res.send({ 28 | code:-1, 29 | message:"未解析出文件id" 30 | }) 31 | return 32 | } 33 | request.request('https://www.567yunpan.com/ajax.php','POST','action=load_down_addr10&file_id='+fileid,header).then((result)=>{ 34 | durl = str.subStringMulti(result,' { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"border='0' />","

").toString() 23 | filesize = str.subStringMulti(result,'id="file_size">','').toString() 24 | fileid = str.subStringMulti(result,"dolike&file_id=","'").toString() 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('https://www.77file.com/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,' { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"文件名: ","").toString() 23 | filesize = str.subStringMulti(result,'文件大小: ','  ').toString() 24 | fileid = str.subStringMulti(result,"\nadd_ref(",");").toString().replace("(","").replace(")","") 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('https://www.dudujb.com/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,' { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url, 15 | "cookie":"UM_distinctid=17cc97574669e0-045f6d04827332-57b193e-144000-17cc9757467d82; __gads=ID=36a46bfbec24e231-22562bb0f2cc006d:T=1635516326:RT=1635516326:S=ALNI_Mav4HbndsCv5Y_nEzlrJpBiiDL4Cw; CNZZDATA2710406=cnzz_eid%3D1836248859-1635463650-%26ntime%3D1645776825; PHPSESSID=aeg4hsg5qf52fatfbh27mq5og5; PU=sas00" 16 | } 17 | 18 | let url = req.body.url 19 | 20 | let filename,filesize,fileid,durl,fmdown 21 | 22 | request.request(url,'GET','',header).then((result)=>{ 23 | filename = str.subStringMulti(result,"文件下载  ","").toString() 24 | filesize = str.subStringMulti(result,'文件大小:','').toString() 25 | fileid = str.subStringMulti(result,'{ 34 | console.log(result) 35 | durl = str.subStringMulti(result,'"login_ok"> { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"文件名:","").toString() 23 | filesize = "不支持获取该盘地址,不影响正常下载" //无 24 | fileid = str.subStr(result,"down-",".html\" class=\"down_btn btn btn-success\"") 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('http://www.expfile.com/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,'cd.php?','\"').toString() 34 | if(durl == ''){ 35 | res.send({ 36 | code:-1, 37 | message:"未解析出durl" 38 | }) 39 | return 40 | } 41 | res.send({ 42 | "code":0, 43 | "fileid":fileid, 44 | "filename":filename, 45 | "filesize":filesize, 46 | "durl":"http://www.expfile.com/" + "cd.php" + durl, 47 | "message":"解析成功" 48 | }) 49 | return 50 | 51 | }) 52 | 53 | 54 | }) 55 | 56 | 57 | } -------------------------------------------------------------------------------- /nodejs/model/feimaoyun.js: -------------------------------------------------------------------------------- 1 | const request = require('../util/request') 2 | const cookie = require('../config/cookie') 3 | 4 | 5 | /** 6 | * 飞猫云解析 7 | * @param {*} req 8 | * @param {*} res 9 | */ 10 | module.exports = (req,res) => { 11 | 12 | //请求头,需要到 ../config/cookie key[1] 设置cookie 13 | let header = { 14 | "cookie":cookie['1'] 15 | } 16 | 17 | 18 | let url = req.body.url 19 | let code = url.slice(-8) 20 | let filename,filesize,fileid,durl,fmdown 21 | 22 | request.request('https://www.feimaoyun.com/index.php/down/detail','POST',"code="+code).then((result)=>{ 23 | if(result.status == 0){ 24 | res.send({ 25 | code:-1, 26 | message:result.msg 27 | }) 28 | return 29 | } 30 | 31 | filename = result.data.file_name 32 | filesize = result.data.file_size 33 | fileid = result.data.file_id 34 | 35 | 36 | request.request('https://www.feimaoyun.com/index.php/down/getsecurl','POST',"code="+code,header).then((result)=>{ 37 | if(result.status == 0){ 38 | res.send({ 39 | code:-1, 40 | message:result.msg 41 | }) 42 | return 43 | } 44 | 45 | 46 | fmdown = result.data.slice(-72) 47 | 48 | 49 | request.request('https://www.feimaoyun.com/index.php/down/getfileurl','POST','code='+ fmdown + '&geetest_challenge=70f3e436c20193f06913cc793962b6373m&geetest_validate=ba99bd99fc40c4b8fd37b20d85792a47&geetest_seccode=ba99bd99fc40c4b8fd37b20d85792a47%7Cjordan',header).then((result)=>{ 50 | if(result.status == 0){ 51 | res.send({ 52 | code:-1, 53 | message:result.msg 54 | }) 55 | return 56 | } 57 | 58 | fmdown = result.data.slice(-72) 59 | 60 | 61 | request.request('https://www.feimaoyun.com/index.php/down/tdownv2','POST','code=' + fmdown + '&sc=1536*864&hd=0',header).then((result)=>{ 62 | if(result.status != 1){ 63 | res.send({ 64 | code:-1, 65 | message:result.msg 66 | }) 67 | return 68 | } 69 | 70 | res.send({ 71 | "code":0, 72 | "fileid":fileid, 73 | "filename":filename, 74 | "filesize":filesize, 75 | "durl":result.data.url, 76 | "message":"解析成功" 77 | }) 78 | return 79 | 80 | }) 81 | 82 | 83 | 84 | 85 | 86 | }) 87 | 88 | 89 | 90 | 91 | }) 92 | 93 | 94 | }) 95 | } 96 | -------------------------------------------------------------------------------- /nodejs/model/kufile.js: -------------------------------------------------------------------------------- 1 | const request = require('../util/request') 2 | const str = require('../util/StrUtil') 3 | 4 | 5 | /** 6 | * kufile解析 7 | * @param {*} req 8 | * @param {*} res 9 | */ 10 | module.exports = (req,res) => { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,'
','
').toString() 23 | filesize = str.subStringMulti(result,'
  • 文件大小:','
  • ').toString() 24 | fileid = str.subStringMulti(result,"\nadd_ref(","\);\n").toString().replace("(","").replace(")","") 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('http://www.kufile.net/ajax.php','POST','action=load_down_file_user&file_id='+fileid+"&ms=undefined*undefined&sc=1536*864",header).then((result)=>{ 33 | durl = result.replace("true|","") 34 | if(durl == ''){ 35 | res.send({ 36 | code:-1, 37 | message:"未解析出durl" 38 | }) 39 | return 40 | } 41 | res.send({ 42 | "code":0, 43 | "fileid":fileid, 44 | "filename":filename, 45 | "filesize":filesize, 46 | "durl":"http://www.kufile.net/"+durl, 47 | "message":"解析成功" 48 | }) 49 | return 50 | 51 | }) 52 | 53 | 54 | }) 55 | 56 | 57 | } -------------------------------------------------------------------------------- /nodejs/model/lanzou.js: -------------------------------------------------------------------------------- 1 | const request = require('../util/request') 2 | const str = require('../util/StrUtil') 3 | 4 | 5 | 6 | 7 | /** 8 | * 蓝奏云解析 9 | * @param {*} req 10 | * @param {*} res 11 | */ 12 | module.exports = (req,res) => { 13 | 14 | let header = { 15 | 16 | } 17 | 18 | 19 | let url = req.body.url 20 | let pwd = req.body.pwd 21 | 22 | 23 | 24 | 25 | let filename,filesize,fileid,fn,zturl,pwdsign 26 | 27 | 28 | /** 29 | * 密码解析 30 | */ 31 | if(pwd != '' && pwd != null && pwd != undefined){ 32 | 33 | request.request(url,'GET').then(resp => { 34 | 35 | pwdsign = str.subStringMulti(resp,"&sign=","&").toString() 36 | 37 | filesize = str.subStringMulti(resp,'">大小:','').toString() 38 | 39 | if(pwdsign == ''){ 40 | res.send({ 41 | code:-1, 42 | message:'获取sign失败,请检查文件是否存在.' 43 | }) 44 | return 45 | } 46 | 47 | request.request("https://wwc.lanzoub.com/ajaxm.php","POST","action=downprocess&sign="+pwdsign+"&p="+pwd,{"referer":url}).then(resp => { 48 | 49 | if(resp.zt != 1){ 50 | res.send({ 51 | code:-1, 52 | message:resp.inf 53 | }) 54 | return 55 | } 56 | filename = resp.inf 57 | zturl = resp.dom + '/file/' + resp.url 58 | 59 | res.send({ 60 | "code":0, 61 | "fileid":fileid, 62 | "filename":filename, 63 | "filesize":filesize, 64 | "durl":zturl, 65 | "message":"解析成功" 66 | }) 67 | 68 | return 69 | }) 70 | }) 71 | 72 | 73 | return 74 | 75 | } 76 | 77 | 78 | 79 | 80 | /** 81 | * 无密码解析 82 | */ 83 | 84 | request.request(url,'GET').then((result)=>{ 85 | 86 | fn = str.subStringMulti(result,"/fn?","\"")[3].toString() 87 | 88 | if(fn == ''){ 89 | res.send({ 90 | code:-1, 91 | message:'无法获取fn,请检查文件是否存在或是否需要密码访问.' 92 | }) 93 | return 94 | } 95 | 96 | 97 | filename = str.subStringMulti(result,"56px 0px 20px 0px;\">","").toString() 98 | filesize = str.subStringMulti(result,'文件大小:','
    ').toString() 99 | fileid = 'null' 100 | 101 | let sendurl = 'https://wwc.lanzoub.com/fn' + fn 102 | 103 | 104 | request.request(sendurl,'GET').then((result)=>{ 105 | 106 | let ajaxdata = str.subStringMulti(result,'data = \'','\';').toString() 107 | let signkey = str.subStringMulti(result,'websignkey = \'','\';').toString() 108 | let sign = str.subStringMulti(result,'\'sign\':\'','\',').toString() 109 | 110 | 111 | 112 | if(ajaxdata == '' || signkey == '' || sign == ''){ 113 | res.send({ 114 | code:-1, 115 | message:'请检查文件是否存在或是否需要密码访问,若一切正常请到 https://www.ilzya.com/archives/4 提交更新' 116 | }) 117 | return 118 | } 119 | 120 | 121 | 122 | request.request('https://wwc.lanzoub.com/ajaxm.php','POST','action=downprocess&signs='+ajaxdata+'&sign='+sign+'&ves=1&websign=&websignkey='+signkey,{"referer":sendurl}).then((result)=>{ 123 | 124 | 125 | if(result.zt == 0){ 126 | res.send({ 127 | code:-1, 128 | message:result.inf 129 | }) 130 | return 131 | } 132 | 133 | zturl = result.dom + '/file/' + result.url 134 | 135 | res.send({ 136 | "code":0, 137 | "fileid":fileid, 138 | "filename":filename, 139 | "filesize":filesize, 140 | "durl":zturl, 141 | "message":"解析成功" 142 | }) 143 | return 144 | 145 | }) 146 | }) 147 | 148 | 149 | }) 150 | } 151 | -------------------------------------------------------------------------------- /nodejs/model/ownfile.js: -------------------------------------------------------------------------------- 1 | const request = require('../util/request') 2 | const str = require('../util/StrUtil') 3 | 4 | 5 | /** 6 | * ownfile解析 7 | * @param {*} req 8 | * @param {*} res 9 | */ 10 | module.exports = (req,res) => { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"進入","下載頁面").toString() 23 | filesize = str.subStringMulti(result,'文件大小:',',由網盤用戶').toString() 24 | fileid = str.subStringMulti(result,"action=dolike&file_id=","'").toString() 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('https://ownfile.net/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,'
    { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"

    ","

    ").toString() 23 | filesize = str.subStringMulti(result,' ','').toString() 24 | fileid = str.subStringMulti(result,"// is open ref count\nadd_ref(",");").toString().replace("(","").replace(")","") 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('https://rosefile.net/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,'
    { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"' border='0' />","").toString() 23 | filesize = "不支持获取该盘文件大小,不影响正常下载" //无 24 | fileid = str.subStringMulti(result,"\nadd_ref(",");").toString().replace("(","").replace(")","") 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('http://www.xfpan.cc/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,'cd.php?','\"').toString() 34 | if(durl == ''){ 35 | res.send({ 36 | code:-1, 37 | message:"未解析出durl" 38 | }) 39 | return 40 | } 41 | res.send({ 42 | "code":0, 43 | "fileid":fileid, 44 | "filename":filename, 45 | "filesize":filesize, 46 | "durl":"http://www.xfpan.cc/cd.php"+durl, 47 | "message":"解析成功" 48 | }) 49 | return 50 | 51 | }) 52 | 53 | 54 | }) 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /nodejs/model/xingyaoyun.js: -------------------------------------------------------------------------------- 1 | const request = require('../util/request') 2 | const str = require('../util/StrUtil') 3 | 4 | 5 | /** 6 | * 星耀云解析 7 | * @param {*} req 8 | * @param {*} res 9 | */ 10 | module.exports = (req,res) => { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result," 文件下载 : ","").toString() 23 | filesize = "不支持获取该盘地址,不影响正常下载" //无 24 | fileid = str.subStringMulti(result,"\nadd_ref(","\);\n").toString().replace("(","").replace(")","") 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('http://www.xingyaopan.com/ajax.php','POST','action=load_down_addr5&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,' { 11 | 12 | let header = { 13 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 14 | "referer":req.body.url 15 | } 16 | 17 | let url = req.body.url 18 | 19 | let filename,filesize,fileid,durl,fmdown 20 | 21 | request.request(url,'GET','',header).then((result)=>{ 22 | filename = str.subStringMulti(result,"进入","下载页面").toString() 23 | filesize = str.subStringMulti(result,'文件大小:',',由网盘用户').toString() 24 | fileid = str.subStringMulti(result,"down2-",".html").toString() 25 | if(fileid == ''){ 26 | res.send({ 27 | code:-1, 28 | message:"未解析出文件id" 29 | }) 30 | return 31 | } 32 | request.request('http://www.xueqiupan.com/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 33 | durl = str.subStringMulti(result,'http:','\"').toString() 34 | if(durl == ''){ 35 | res.send({ 36 | code:-1, 37 | message:"未解析出durl" 38 | }) 39 | return 40 | } 41 | res.send({ 42 | "code":0, 43 | "fileid":fileid, 44 | "filename":filename, 45 | "filesize":filesize, 46 | "durl":"http:"+durl, 47 | "message":"解析成功" 48 | }) 49 | return 50 | 51 | }) 52 | 53 | 54 | }) 55 | 56 | 57 | } -------------------------------------------------------------------------------- /nodejs/model/xunniu.js: -------------------------------------------------------------------------------- 1 | const request = require('../util/request') 2 | const str = require('../util/StrUtil') 3 | 4 | module.exports = (req,res) => { 5 | let header = { 6 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 7 | "referer":req.body.url 8 | } 9 | 10 | 11 | let url = req.body.url 12 | 13 | let filename,filesize,fileid,durl,fmdown 14 | 15 | request.request(url,'GET','',header).then((result)=>{ 16 | filename = str.subStringMulti(result,"

    ","

    ").toString() 17 | filesize = str.subStringMulti(result,'文件大小:">',',').toString() 18 | fileid = str.subStringMulti(result,"action=dolike&file_id=","'").toString() 19 | if(fileid == ''){ 20 | res.send({ 21 | code:-1, 22 | message:"未解析出文件id" 23 | }) 24 | return 25 | } 26 | request.request('http://www.xunniupan.com/ajax.php','POST','action=load_down_addr1&file_id='+fileid,header).then((result)=>{ 27 | durl = str.subStringMulti(result,'
    { 12 | 13 | let header = { 14 | "user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36", 15 | "referer":req.body.url, 16 | "cookie":cookie[10] 17 | } 18 | 19 | let url = req.body.url 20 | 21 | let filename,filesize,fileid,durl,fmdown 22 | 23 | request.request(url,'GET','',header).then((result)=>{ 24 | filename = str.subStringMulti(result,'title="bd_logo1_31bdc765.png">',"").toString() 25 | filesize = str.subStringMulti(result,'d="FileSize">','').toString() 26 | fileid = str.subStringMulti(result,"data : 'file_id=","'").toString() 27 | console.log(fileid) 28 | if(fileid == ''){ 29 | res.send({ 30 | code:-1, 31 | message:"未解析出文件id" 32 | }) 33 | return 34 | } 35 | request.request('https://www.yifile.com/ajax.php','POST','action=yifile_down&file_id='+fileid+"&verycode=jm7j",header).then((result)=>{ 36 | console.log(result) 37 | durl = result.replace("true|","") 38 | if(durl == ''){ 39 | res.send({ 40 | code:-1, 41 | message:"未解析出durl" 42 | }) 43 | return 44 | } 45 | res.send({ 46 | "code":0, 47 | "fileid":fileid, 48 | "filename":filename, 49 | "filesize":filesize, 50 | "durl":durl, 51 | "message":"解析成功" 52 | }) 53 | return 54 | 55 | }) 56 | 57 | 58 | }) 59 | 60 | 61 | } -------------------------------------------------------------------------------- /nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "netdiskresolve", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "author": "lzyAB", 6 | "license": "MIT", 7 | "dependencies": { 8 | "axios": "^0.26.1", 9 | "express": "^4.17.3" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /nodejs/util/StrUtil.js: -------------------------------------------------------------------------------- 1 | function subStringMulti(text, begin, end) { 2 | var regex; 3 | if (end == '\\n') 4 | regex = new RegExp(begin + '(.+)', "g"); 5 | else 6 | regex = new RegExp(begin + '([\\s\\S]+?)' + end, "g"); 7 | try { 8 | var result; 9 | var blocks = []; 10 | while ((result = regex.exec(text)) != null) { 11 | blocks.push(result[1].trim()); 12 | } 13 | return blocks; 14 | // return text.match(regex); 15 | } catch (err) { 16 | return null; 17 | } 18 | }; 19 | 20 | 21 | function getStr(str, start, end) { 22 | let res = str.match(new RegExp(`${start}(.*?)${end}`)) 23 | return res ? res[1] : null 24 | } 25 | 26 | function subStr(str,start,end1){ 27 | 28 | var indexOf =str.indexOf(start); 29 | if(indexOf!=-1)var indexOf = indexOf + start.length; 30 | 31 | var lastIndexOf = str.lastIndexOf(end1); 32 | if(lastIndexOf!=-1) 33 | return str.substr(indexOf,lastIndexOf - indexOf) 34 | } 35 | 36 | module.exports = { 37 | subStringMulti, 38 | subStr, 39 | getStr 40 | } -------------------------------------------------------------------------------- /nodejs/util/connect.js: -------------------------------------------------------------------------------- 1 | const server = require('../config/server') 2 | 3 | module.exports = (req, res) => { 4 | res.send({ 5 | code:0, 6 | isrun:server['isrun'], 7 | message:"success" 8 | }) 9 | } -------------------------------------------------------------------------------- /nodejs/util/request.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | 3 | 4 | module.exports = { 5 | request:function(url,method,data,header){ 6 | return new Promise((resolve, reject) => { 7 | if(method === 'GET'){ 8 | axios.get(url).then((response) => { 9 | resolve(response.data); 10 | }).catch((err) => { 11 | reject(err); 12 | }); 13 | }else if(method === 'POST'){ 14 | axios.post(url,data,{headers:header}).then((response) => { 15 | resolve(response.data); 16 | }) 17 | } 18 | 19 | }) 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /nodejs/util/resolve.js: -------------------------------------------------------------------------------- 1 | //加载wpjson 2 | const wpjson = require('../config/wp') 3 | const server = require('../config/server') 4 | 5 | 6 | const feimaoyun = require('../model/feimaoyun') 7 | const _77file = require('../model/77file') 8 | const xunniu = require('../model/xunniu') 9 | const _567 = require('../model/567pan') 10 | const dufile = require('../model/dufile') 11 | const expfile = require('../model/expfile') 12 | const xueqiuyun = require('../model/xueqiuyun') 13 | const xfpan = require('../model/xfpan') 14 | const ownfile = require('../model/ownfile') 15 | const dudujb = require('../model/dudujb') 16 | const yifile = require('../model/yifile') 17 | const _1988wp = require('../model/1988wp') 18 | const rosefile = require('../model/rosefile') 19 | const xingyaoyun = require('../model/xingyaoyun') 20 | const kufile = require('../model/kufile') 21 | const lanzou = require('../model/lanzou') 22 | 23 | 24 | module.exports = (req,res) =>{ 25 | if(server['log-server']==true) 26 | console.log("接收解析数据 => "+ req.body.url) 27 | if(server['isrun']==false){ 28 | res.send({ 29 | code:-1, 30 | message:server['norunmessage'] 31 | }) 32 | return 33 | }else{ 34 | let urlReg = /[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/; 35 | console.log(req.body.url); 36 | let domain=urlReg.exec(req.body.url); 37 | 38 | //蓝奏云 39 | if(domain[0].indexOf("lanzou") != -1){ 40 | lanzou(req,res) 41 | return; 42 | } 43 | 44 | 45 | 46 | switch(wpjson[domain[0]]){ 47 | case 0: 48 | feimaoyun(req,res) 49 | break; 50 | case 1: 51 | _77file(req,res) 52 | break; 53 | case 2: 54 | xunniu(req,res) 55 | break; 56 | case 3: 57 | _567(req,res) 58 | break; 59 | case 4: 60 | dufile(req,res) 61 | break; 62 | case 5: 63 | expfile(req,res) 64 | break; 65 | case 6: 66 | xueqiuyun(req,res) 67 | break; 68 | case 7: 69 | xfpan(req,res) 70 | break; 71 | case 8: 72 | ownfile(req,res) 73 | break; 74 | case 9: 75 | dudujb(req,res) 76 | break; 77 | case 10: 78 | yifile(req,res) 79 | break; 80 | case 11: 81 | _1988wp(req,res) 82 | break; 83 | case 12: 84 | rosefile(req,res) 85 | break; 86 | case 13: 87 | xingyaoyun(req,res) 88 | break; 89 | case 14: 90 | kufile(req,res) 91 | break; 92 | 93 | 94 | default: 95 | res.send({ 96 | code:-1, 97 | message:"未识别出所属网盘,如果文档中有收录,请查看域名是否匹配" 98 | }) 99 | break; 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /nodejs/util/version.js: -------------------------------------------------------------------------------- 1 | const server = require('../config/server') 2 | 3 | module.exports = (req, res) => { 4 | res.send({ 5 | code:0, 6 | v:server['v'], 7 | message:"success" 8 | }) 9 | } -------------------------------------------------------------------------------- /nodejs/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | accepts@~1.3.8: 6 | version "1.3.8" 7 | resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 8 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 9 | dependencies: 10 | mime-types "~2.1.34" 11 | negotiator "0.6.3" 12 | 13 | array-flatten@1.1.1: 14 | version "1.1.1" 15 | resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 16 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 17 | 18 | axios@^0.26.1: 19 | version "0.26.1" 20 | resolved "https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" 21 | integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== 22 | dependencies: 23 | follow-redirects "^1.14.8" 24 | 25 | body-parser@1.19.2: 26 | version "1.19.2" 27 | resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" 28 | integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== 29 | dependencies: 30 | bytes "3.1.2" 31 | content-type "~1.0.4" 32 | debug "2.6.9" 33 | depd "~1.1.2" 34 | http-errors "1.8.1" 35 | iconv-lite "0.4.24" 36 | on-finished "~2.3.0" 37 | qs "6.9.7" 38 | raw-body "2.4.3" 39 | type-is "~1.6.18" 40 | 41 | bytes@3.1.2: 42 | version "3.1.2" 43 | resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 44 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 45 | 46 | content-disposition@0.5.4: 47 | version "0.5.4" 48 | resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 49 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 50 | dependencies: 51 | safe-buffer "5.2.1" 52 | 53 | content-type@~1.0.4: 54 | version "1.0.4" 55 | resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 56 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 57 | 58 | cookie-signature@1.0.6: 59 | version "1.0.6" 60 | resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 61 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 62 | 63 | cookie@0.4.2: 64 | version "0.4.2" 65 | resolved "https://registry.npmmirror.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" 66 | integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== 67 | 68 | debug@2.6.9: 69 | version "2.6.9" 70 | resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 71 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 72 | dependencies: 73 | ms "2.0.0" 74 | 75 | depd@~1.1.2: 76 | version "1.1.2" 77 | resolved "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 78 | integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== 79 | 80 | destroy@~1.0.4: 81 | version "1.0.4" 82 | resolved "https://registry.npmmirror.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 83 | integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== 84 | 85 | ee-first@1.1.1: 86 | version "1.1.1" 87 | resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 88 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 89 | 90 | encodeurl@~1.0.2: 91 | version "1.0.2" 92 | resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 93 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 94 | 95 | escape-html@~1.0.3: 96 | version "1.0.3" 97 | resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 98 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 99 | 100 | etag@~1.8.1: 101 | version "1.8.1" 102 | resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 103 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 104 | 105 | express@^4.17.3: 106 | version "4.17.3" 107 | resolved "https://registry.npmmirror.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" 108 | integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== 109 | dependencies: 110 | accepts "~1.3.8" 111 | array-flatten "1.1.1" 112 | body-parser "1.19.2" 113 | content-disposition "0.5.4" 114 | content-type "~1.0.4" 115 | cookie "0.4.2" 116 | cookie-signature "1.0.6" 117 | debug "2.6.9" 118 | depd "~1.1.2" 119 | encodeurl "~1.0.2" 120 | escape-html "~1.0.3" 121 | etag "~1.8.1" 122 | finalhandler "~1.1.2" 123 | fresh "0.5.2" 124 | merge-descriptors "1.0.1" 125 | methods "~1.1.2" 126 | on-finished "~2.3.0" 127 | parseurl "~1.3.3" 128 | path-to-regexp "0.1.7" 129 | proxy-addr "~2.0.7" 130 | qs "6.9.7" 131 | range-parser "~1.2.1" 132 | safe-buffer "5.2.1" 133 | send "0.17.2" 134 | serve-static "1.14.2" 135 | setprototypeof "1.2.0" 136 | statuses "~1.5.0" 137 | type-is "~1.6.18" 138 | utils-merge "1.0.1" 139 | vary "~1.1.2" 140 | 141 | finalhandler@~1.1.2: 142 | version "1.1.2" 143 | resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 144 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 145 | dependencies: 146 | debug "2.6.9" 147 | encodeurl "~1.0.2" 148 | escape-html "~1.0.3" 149 | on-finished "~2.3.0" 150 | parseurl "~1.3.3" 151 | statuses "~1.5.0" 152 | unpipe "~1.0.0" 153 | 154 | follow-redirects@^1.14.8: 155 | version "1.14.9" 156 | resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" 157 | integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== 158 | 159 | forwarded@0.2.0: 160 | version "0.2.0" 161 | resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 162 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 163 | 164 | fresh@0.5.2: 165 | version "0.5.2" 166 | resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 167 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 168 | 169 | http-errors@1.8.1: 170 | version "1.8.1" 171 | resolved "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" 172 | integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== 173 | dependencies: 174 | depd "~1.1.2" 175 | inherits "2.0.4" 176 | setprototypeof "1.2.0" 177 | statuses ">= 1.5.0 < 2" 178 | toidentifier "1.0.1" 179 | 180 | iconv-lite@0.4.24: 181 | version "0.4.24" 182 | resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 183 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 184 | dependencies: 185 | safer-buffer ">= 2.1.2 < 3" 186 | 187 | inherits@2.0.4: 188 | version "2.0.4" 189 | resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 190 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 191 | 192 | ipaddr.js@1.9.1: 193 | version "1.9.1" 194 | resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 195 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 196 | 197 | media-typer@0.3.0: 198 | version "0.3.0" 199 | resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 200 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 201 | 202 | merge-descriptors@1.0.1: 203 | version "1.0.1" 204 | resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 205 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== 206 | 207 | methods@~1.1.2: 208 | version "1.1.2" 209 | resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 210 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 211 | 212 | mime-db@1.52.0: 213 | version "1.52.0" 214 | resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 215 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 216 | 217 | mime-types@~2.1.24, mime-types@~2.1.34: 218 | version "2.1.35" 219 | resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 220 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 221 | dependencies: 222 | mime-db "1.52.0" 223 | 224 | mime@1.6.0: 225 | version "1.6.0" 226 | resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 227 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 228 | 229 | ms@2.0.0: 230 | version "2.0.0" 231 | resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 232 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 233 | 234 | ms@2.1.3: 235 | version "2.1.3" 236 | resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 237 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 238 | 239 | negotiator@0.6.3: 240 | version "0.6.3" 241 | resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 242 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 243 | 244 | on-finished@~2.3.0: 245 | version "2.3.0" 246 | resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 247 | integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== 248 | dependencies: 249 | ee-first "1.1.1" 250 | 251 | parseurl@~1.3.3: 252 | version "1.3.3" 253 | resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 254 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 255 | 256 | path-to-regexp@0.1.7: 257 | version "0.1.7" 258 | resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 259 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 260 | 261 | proxy-addr@~2.0.7: 262 | version "2.0.7" 263 | resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 264 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 265 | dependencies: 266 | forwarded "0.2.0" 267 | ipaddr.js "1.9.1" 268 | 269 | qs@6.9.7: 270 | version "6.9.7" 271 | resolved "https://registry.npmmirror.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" 272 | integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== 273 | 274 | range-parser@~1.2.1: 275 | version "1.2.1" 276 | resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 277 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 278 | 279 | raw-body@2.4.3: 280 | version "2.4.3" 281 | resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" 282 | integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== 283 | dependencies: 284 | bytes "3.1.2" 285 | http-errors "1.8.1" 286 | iconv-lite "0.4.24" 287 | unpipe "1.0.0" 288 | 289 | safe-buffer@5.2.1: 290 | version "5.2.1" 291 | resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 292 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 293 | 294 | "safer-buffer@>= 2.1.2 < 3": 295 | version "2.1.2" 296 | resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 297 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 298 | 299 | send@0.17.2: 300 | version "0.17.2" 301 | resolved "https://registry.npmmirror.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" 302 | integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== 303 | dependencies: 304 | debug "2.6.9" 305 | depd "~1.1.2" 306 | destroy "~1.0.4" 307 | encodeurl "~1.0.2" 308 | escape-html "~1.0.3" 309 | etag "~1.8.1" 310 | fresh "0.5.2" 311 | http-errors "1.8.1" 312 | mime "1.6.0" 313 | ms "2.1.3" 314 | on-finished "~2.3.0" 315 | range-parser "~1.2.1" 316 | statuses "~1.5.0" 317 | 318 | serve-static@1.14.2: 319 | version "1.14.2" 320 | resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" 321 | integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== 322 | dependencies: 323 | encodeurl "~1.0.2" 324 | escape-html "~1.0.3" 325 | parseurl "~1.3.3" 326 | send "0.17.2" 327 | 328 | setprototypeof@1.2.0: 329 | version "1.2.0" 330 | resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 331 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 332 | 333 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 334 | version "1.5.0" 335 | resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 336 | integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== 337 | 338 | toidentifier@1.0.1: 339 | version "1.0.1" 340 | resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 341 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 342 | 343 | type-is@~1.6.18: 344 | version "1.6.18" 345 | resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 346 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 347 | dependencies: 348 | media-typer "0.3.0" 349 | mime-types "~2.1.24" 350 | 351 | unpipe@1.0.0, unpipe@~1.0.0: 352 | version "1.0.0" 353 | resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 354 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 355 | 356 | utils-merge@1.0.1: 357 | version "1.0.1" 358 | resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 359 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 360 | 361 | vary@~1.1.2: 362 | version "1.1.2" 363 | resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 364 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 365 | -------------------------------------------------------------------------------- /vue/.date: -------------------------------------------------------------------------------- 1 | 20220416 2 | -------------------------------------------------------------------------------- /vue/README.md: -------------------------------------------------------------------------------- 1 | # 网赚网盘解析WEB端 2 | 3 | ------- 4 | 5 | ## 前言 6 | 7 | 对接了公用API,支持20+种网赚网盘解析,详情查看:[博客](https://www.ilzya.com/archives/4/) 8 | 9 | ## 安装 10 | 11 | 1. clone项目 ` clone https://github.com/lzyAB/netdiskresolve.git` 12 | 2. 上传至服务器 (服务器需要支持PHP5.*版本) 13 | 3. 解压到服务器 14 | 4. 访问index.html 15 | 16 | ## 演示 17 | 18 | ![](https://s1.ax1x.com/2022/04/09/LPRsZq.png) 19 | 20 | ## 关于我 21 | 22 | 联系博主:[call](https://jq.qq.com/?_wv=1027&k=9VuiaL86) 23 | 24 | 博客:[空城里](https://www.ilzya.com/) 25 | -------------------------------------------------------------------------------- /vue/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LauZzL/netdiskresolve/c3bd45e7280e3533746ad7676f34bfa23da3ef9a/vue/favicon.ico -------------------------------------------------------------------------------- /vue/http/_data: -------------------------------------------------------------------------------- 1 | 95963DC8B442A27F52B2F7B2558A322E 2 | -------------------------------------------------------------------------------- /vue/http/api/resolve.php: -------------------------------------------------------------------------------- 1 | 57 | -------------------------------------------------------------------------------- /vue/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 空城里-网赚网盘解析 9 | 10 | 11 | 12 | 13 | 14 | 15 |
    16 | 17 | 18 |
    19 | 20 | 22 | 首页 24 | 博客 25 | 26 | 交流群 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 解析 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 53 | 59 | 60 | 63 | {{file.name}} 64 | 65 | 66 | 69 | {{file.id}} 70 | 71 | 72 | 75 | {{file.size}} 76 | 77 | 78 | 81 | null 82 | 83 | 84 | 85 | 86 | 87 | 88 | 100 | 101 | 102 |
    103 |
    104 |
    105 |
    106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 265 | 266 | 267 | -------------------------------------------------------------------------------- /vue/static/wp.min.css: -------------------------------------------------------------------------------- 1 | html,body{ 2 | margin: 0; 3 | padding: 0; 4 | height: 100%; 5 | width: 100%; 6 | overflow: hidden; 7 | } 8 | .el-menu-demo .el-menu-item{ 9 | border-bottom-color:#ffffff!important; 10 | font-size: 16px; 11 | 12 | } 13 | .el-icon-caret-top{ 14 | position: absolute; 15 | bottom: -8px; 16 | left: 34%; 17 | color: #1F51A9!important; 18 | } 19 | .el-form { 20 | position: relative; 21 | margin-top: 20px; 22 | align-items: center; 23 | } 24 | #link{ 25 | width: 333px; 26 | } 27 | 28 | .footer { 29 | position: fixed; 30 | text-align: center; 31 | line-height: 35px; 32 | bottom:0px; 33 | } 34 | --------------------------------------------------------------------------------