Greasy Fork is available in English.

百度网盘SVIP解析高速下载-星链加速🔥🔥

百度网盘SVIP解析高速下载,公益脚本,帮助真正有需求的朋友,随缘每天解析5-10次!!

// ==UserScript==
// @name         百度网盘SVIP解析高速下载-星链加速🔥🔥
// @namespace    http://tampermonkey.net/
// @version     1.07
// @description  百度网盘SVIP解析高速下载,公益脚本,帮助真正有需求的朋友,随缘每天解析5-10次!!
// @author       You
// @match        http://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @license            MIT
// @icon              https://nd-static.bdstatic.com/m-static/v20-main/home/img/icon-home-new.b4083345.png
// @match             *://pan.baidu.com/*
// @match             *://yun.baidu.com/*
// @match             *://pan.baidu.com/disk/home*
// @match             *://yun.baidu.com/disk/home*
// @match             *://pan.baidu.com/disk/main*
// @match             *://yun.baidu.com/disk/main*
// @match             *://pan.baidu.com/s/*
// @match             *://yun.baidu.com/s/*
// @match             *://pan.baidu.com/share/*
// @match             *://yun.baidu.com/share/*
// @connect           baidu.com
// @connect           aifenxiang.net.cn
// @connect           127.0.0.1
// @grant             GM_cookie
// @grant             GM_addStyle
// @grant             GM_getResourceText
// @require           https://lib.baomitu.com/layui/2.9.3/layui.min.js
// @require           https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js
// @require           https://unpkg.com/sweetalert/dist/sweetalert.min.js
// @resource          layuiCSS https://lib.baomitu.com/layui/2.9.3/css/layui.css
// ==/UserScript==

(function () {
  'use strict';
  //swal("Hello world!");
  const layuicss = GM_getResourceText('layuiCSS');
  GM_addStyle(layuicss);
  const config = {
    main_url: 'https://aifenxiang.net.cn:8081',
    //main_url: 'http://127.0.0.1:8081',
    bd_password: '1234',
    title_name: '星链加速',
  };

  function getToken(x, y, num) {
    num ??= y.length;
    let a = [],
      b = x.reduce(
        (d, t) => (y.includes(t.name) && d.push([t.name, t.value]), d),
        []
      );
    return (
      new Map(b).forEach((v, k) => {
        a.push(`${k}=${v}`);
      }),
      num > a.length ? '' : a.join('; ')
    );
  }

  layui.use(['layer'], async function () {
    var layer = layui.layer,
      $ = layui.$;
    var form = layui.form;
    if (location.href.startsWith('https://pan.baidu.com/s/')) {
      //分享界面加按钮
      $('.x-button-box').prepend(
        '<a class="g-button" id="downbtn_share" style="background-color: #6800ff;color: #fff;border:none;"  href="javascript:;" ><span class="g-button-right"><em style="top:0;" class="icon icon-download" title=""></em><lable class="text" style="width: auto;">' +
          config.title_name +
          '</lable></span></a>'
      );
    } else {
      // 其他界面加按钮
      if ($('.tcuLAu').is('*')) {
        //旧版
        $('.tcuLAu').prepend(
          '<span class="g-dropdown-button"><a id="downbtn_main"  style=" margin-right: 10px;color: #fff;background-color: #fc5531;border:none;" id="downbtn_main" class="g-button" ><span class="g-button-right"><em style="top:0;" class="icon icon-download" ></em><lable class="text" style="width: auto;">' +
            config.title_name +
            '</lable></span></a></span>'
        );
      } else {
        //新版
        $('.wp-s-agile-tool-bar__header.is-header-tool').prepend(
          '<div class="wp-s-agile-tool-bar__h-group"><button style=" margin-right: 10px;color: #fff;background-color: #fc5531;border:none;" id="downbtn_main" class="u-button nd-file-list-toolbar-action-item" ><i style="top:0;" class="iconfont icon-download"></i> <lable>' +
            config.title_name +
            '</lable></button></div>'
        );
      }
    }

    $('#downbtn_share').click(function () {
      swal({
        title: '提示',
        text: '请先保存到自己的网盘后,从网盘里解析!',
        icon: 'warning',
      });
      return false;
    });
    $('#downbtn_main').click(function () {
      let select = selectList();
      let selected = Object.keys(select);
      if (selected.length == 0) {
        swal({
          text: '请先选择一个文件',
          icon: 'warning',
        });
        return false;
      } else if (selected.length > 1) {
        swal({
          text: '目前仅支持单个文件解析',
          icon: 'warning',
        });
        return false;
      } else if (select[selected[0]].isdir == 1) {
        swal({
          text: '目前不支持文件夹解析',
          icon: 'warning',
        });
        return false;
      }

      let fileInfo = select[selected[0]];

      let myDiv = document.createElement('div');
      let createDiv = `
        <div>
        <img src="https://bd.shzxkq.com/xcx.jpg" style="width:240px;height:240px;">
        </div>
        <div>
         <input style="border:1px solid #ccc; width:60%;height:40px;text-indent:20px;" type="text" autocomplete="off" placeholder="请输入验证码" id="wpCode"/>
        </div>

        `;
      myDiv.innerHTML = createDiv;

      const openLayer = layer.open({
        type: 1, // page 层类型
        area: ['450px', '500px'],
        title: '扫一扫获取验证码',
        shade: 0.6, // 遮罩透明度
        shadeClose: true, // 点击遮罩区域,关闭弹层
        anim: 0, // 0-6 的动画形式,-1 不开启
        content: `
          <div class="layui-form" lay-filter="filter-test-layer" style="width:350px;margin: 16px auto 0;">
            <div class="demo-login-container">
             <div class="layui-form-item">
              <img style="width:240px;height:240px; margin:auto;display:block;" src="https://lidognqialiyun.oss-cn-beijing.aliyuncs.com/qrcode_for_gh_f879022f50fa_258%20.jpg">
              </div>
              <div class="layui-form-item">
                <div class="layui-row">
                  <div class="layui-input-wrap">
                      <div class="layui-input-prefix">
                        <i class="layui-icon layui-icon-vercode"></i>
                      </div>
                      <input type="text" name="code" value="" lay-verify="required" placeholder="请输入验证码" lay-reqtext="请输入验证码" autocomplete="off" class="layui-input" lay-affix="clear">
                    </div>
                    <div style="margin-top:10px;">只为帮助真正有需求的朋友,随缘每天解析5-10次</div>
                    <div>受网络波动影响可能解析不出来,重试几次即可!!</div>
                    <div>如果重试几次仍是无法解析请关闭弹窗重新解析!!</div>
                </div>
              </div>
                <button style="display:none;" id="try-send" class="layui-btn layui-btn-fluid">重试</button>
               <button id="parse" class="layui-btn layui-btn-fluid" lay-submit lay-filter="demo-login">解析</button>
            </div>
          </div>
            `,
        success: function () {
          // 对弹层中的表单进行初始化渲染
          form.render();
          // 表单提交事件
          form.on('submit(demo-login)', async function (data) {
            let field = data.field; // 获取表单字段值
            let canDown = await testDownLoad();

            if (!canDown) {
              layer.close(openLayer);
              swal({
                text: '请先安装下载器并打开运行,下载地址:https://wwf.lanzouq.com/b05f548wf 密码:hb1i',
                icon: 'warning',
              });

              fetch(config.main_url + '/wp/del/code', {
                method: 'POST',
                headers: {
                  'Content-Type': 'application/json',
                },
                body: JSON.stringify({ code: field.code }),
              });

              return;
            }

            fetch(config.main_url + '/wp/getCodeNum', {
              method: 'POST',
              headers: {
                'Content-Type': 'application/json',
              },
              body: JSON.stringify({ code: field.code }),
            })
              .then((resp) => resp.json())
              .then((res) => {
                if (res.code == 200) {
                  config.code = field.code;
                  if (res.data == 100) {
                    layer.msg('解析中', {
                      icon: 6,
                      time: 3000, // 3秒后自动关闭
                    });
                    share_one_baidu(openLayer, field.code);
                  } else if (res.data == 80) {
                    layer.msg('解析中', {
                      icon: 6,
                      time: 3000, // 3秒后自动关闭
                    });

                    setTimeout(() => {
                      layer.alert('解析通道比较拥堵,请重试!', {
                        title: '提示',
                      });
                    }, 3000);
                  } else if(res.data == 60){
                      layer.msg('解析中', {
                          icon: 6,
                          time: 3000, // 3秒后自动关闭
                      });
                      setTimeout(() => {
                          layer.alert('今日解析次数已达上限,请明天再来!', {
                              title: '提示',
                          });
                      }, 3000);
                  } else if (res.data == 50) {
                      layer.alert('您输入的验证码不正确,请重新获取!', {
                          title: '提示',
                      });
                  } else {
                      layer.alert('您输入的验证码不正确,请重新获取!', {
                          title: '提示',
                      });
                }
              }});
          });
        },
      });

         $('#try-send').click(function () {
             console.log("重新下载。。。。。。。。");
             const item = {server_filename:config.server_filename};
             sendToMotrix(item);
         }
                                 )
    });
  });
  function selectList() {
    var select = {};
    var option = [];

    try {
      option =
        require('system-core:context/context.js').instanceForSystem.list.getSelected();
    } catch (e) {
      option = document.querySelector('.wp-s-core-pan').__vue__.selectedList;
    }
    option.forEach((element) => {
      select[element.fs_id] = element;
    });
    return select;
  }

  function share_one_baidu(openLayer, code) {
    let select = Object.keys(selectList());
    let bdstoken = '';
    let data_json = {};
    try {
      data_json = $('html')
        .html()
        .match(/(?<=locals\.mset\()(.*?)(?=\);)/)[0];
      data_json = JSON.parse(data_json);
      config.username = data_json.username;
      bdstoken = data_json.bdstoken;
    } catch (e) {
      data_json = $('html')
        .html()
        .match(/(?<=window\.locals\s=\s)(.*?)(?=;)/)[0];
      data_json = JSON.parse(data_json);
      config.username = data_json.userInfo.username;
      bdstoken = data_json.userInfo.bdstoken;
    }

    config.data_json = data_json;

    const param = {
      bdstoken: bdstoken,
      period: 1,
      pwd: config.bd_password,
      eflag_disable: true,
      channel_list: '%5B%5D',
      schannel: 4,
      fid_list: JSON.stringify(select),
    };

    $.ajax({
      type: 'GET',
      url: 'https://pan.baidu.com/share/set',
      async: true,
      data: {
        bdstoken: bdstoken,
        period: 1,
        pwd: config.bd_password,
        eflag_disable: true,
        channel_list: '%5B%5D',
        schannel: 4,
        fid_list: JSON.stringify(select),
      },
      dataType: 'json',
      success: function (res) {
        if (res.show_msg.indexOf('禁止') > -1) {
          swal({
            text: '该文件禁止分享',
            icon: 'error',
          });
          return false;
        } else {
          let shorturl = '';
          try {
            shorturl = res.link.split('/').pop();
          } catch (error) {
            swal({
              text: '初始化准备失败',
              icon: 'error',
            });
            return false;
          }

          get_down_list(shorturl, config.bd_password, openLayer, code);
        }
      },
      error: function (res) {
        swal({
          text: '初始化准备请求访问失败',
          icon: 'error',
        });
      },
    });
  }

    async function get_down_list(shorturl, password,openLayer,code) {

        let ajax_data = { shorturl: shorturl, pwd: password,dir : 1,root: 1 }

        fetch(config.main_url + "/wp/parseCopyLink",{
            method:"POST",
            headers:{
                "Content-Type": "application/json",
            },
            body: JSON.stringify(ajax_data),
        })
            .then(resp=>resp.json())
            .then((res)=>{
            if (res.code == 200) {
                const size = parseInt(res.data.data.list[0].size);
                if (!code.includes('svip')) {
                    if(size > 6698669056){
                        layer.close(openLayer);
                        swal({
                            text: "文件太大了,插件暂不支持下载,请联系作者开通权限!",
                            icon: "warning",
                        });
                        return false;

                    }
                 }
                const params = {
                    shareid:res.data.data.shareid,
                    from:res.data.data.uk,
                    sekey:res.data.data.seckey,
                    fsId:res.data.data.list[0].fs_id,
                    path:`/`+res.data.data.list[0].server_filename

                };

                fetch(config.main_url + "/wp/dlink",{
                    method:"POST",
                    headers:{
                        "Content-Type": "application/json",
                    },
                    body: JSON.stringify(params),
                })
                    .then(resp=>resp.json())
                    .then((data)=>{
                    if (data.code == 200) {
                        //layer.close(openLayer);

                        if(data.data.urls.length && data.data.urls[0].url){
                            config.url = data.data.urls[0].url;
                            config.server_filename = res.data.data.list[0].server_filename
                            $('#try-send').show();
                            $('#parse').hide();
                            const item = {server_filename:config.server_filename};
                            sendToMotrix(item);
                        }else{
                            layer.alert('解析遇到问题了,请刷新重试即可!!');

                        }
                       

                    }else{
                        layer.close(openLayer);
                        swal({
                            text: "解析遇到问题了,请刷新重试即可!!",
                            icon: "warning",
                        });

                    }
                })
                return false;


            }
        })

    }


    function sendToMotrix(item){
        //发送到下载器
        let options = {
            'user-agent': 'LogStatistic',
            'X-forwarded-for':'1.94.42.208',
            opt: item.server_filename.trim(),
        };

        let json = {
            id: 'wp',
            jsonrpc: '2.0',
            method: 'aria2.addUri',
            params: [[config.url], options],
        };

        json.params.unshift('token:undefined');
        let ws = new WebSocket('ws://localhost:16800/jsonrpc');
        ws.onerror = (event) => {
            ws.close();
        };
        ws.onopen = () => {

            ws.send(JSON.stringify(json));
        };

        ws.onmessage = (event) => {
            let received_msg = JSON.parse(event.data);
            if (received_msg.error !== undefined) {
                if (received_msg.error.code === 1) {
                    ws.close();
                    return;
                }
            }

            switch (received_msg.method) {
                case 'aria2.onDownloadStart':
                    layer.alert(`${item.server_filename}开始下载,请打开下载器查看,如果下载失败请点击重试按钮!`);
                    break;
                case 'aria2.onDownloadError':
                    ws.close();
                    //layer.alert(`${item.server_filename}下载失败,请点击重试按钮!`);
                    break;

                case 'aria2.onDownloadComplete':
                    layer.alert(`${item.server_filename}下载完成!`);
                    ws.close();
                    break;
                default:
                    break;
            }
        }

    }

    function testDownLoad(){
        return new Promise(resolve =>{
            let ws = new WebSocket('ws://localhost:16800/jsonrpc');
            ws.onopen = (event) => {
                if(event.type === 'open'){
                    // console.log(event);
                    ws.close();
                    resolve(true);
                }
            };
            ws.onerror = (event) => {
                if(event.type === 'error'){
                    // console.log(event);
                    ws.close();
                    resolve(false);
                }
            };
        });
    }

  // Your code here...
})();