雷小伊脱机日常下载器

[复制链接]

初入学徒

5

主题

44

回帖

47

积分
UID
89
雷小钻
0
雷小币
900
贡献点数
17
发表于 2024-11-11 18:18:01 | 显示全部楼层
用处就是每周五大概9点10点运行一下更新下雷小伊脱机,这样就不用打开网页下载了。

代码
  1. const axios = require("axios");
  2. const fs = require('fs');
  3. const path = require('path');


  4. // const outputLocationPath = path.join(__dirname, '雷小伊.exe');
  5. const fileID = "b052mtlbg";
  6. const getT_K = async fileID => {
  7.         const url = `https://lxy.lanzouj.com/${fileID}`;
  8.         return await new Promise(async (rv, rj) => {
  9.                 const res = await axios.get(url, {
  10.                         timeout: 10000
  11.                 });
  12.                 const data = res.data;
  13.                 // console.log(data)
  14.                 const t = parseInt(data.match(/'(\d{10})'/)[0].match(/(\d{10})/)[0]);
  15.                 const k = data.match(/'([a-z0-9]{32})'/)[0].match(/([a-z0-9]{32})/)[0];
  16.                 rv({
  17.                         t,
  18.                         k
  19.                 });
  20.         });
  21. };


  22. (async function () {
  23.         const { t, k } = await getT_K(fileID);
  24.         console.log({ t, k });
  25.         const url = "https://lxy.lanzouj.com/filemoreajax.php?file=8948676";
  26.         const formData = {
  27.                 lx: 2,
  28.                 fid: 8948676,
  29.                 uid: 3675175,
  30.                 pg: 1,
  31.                 rep: 0,
  32.                 t,
  33.                 k,
  34.                 up: 1,
  35.                 vip: 0,
  36.                 webfoldersign: ""
  37.         };
  38.         const response = await axios.post(url, formData, {
  39.                 headers: {
  40.                         "Content-Type": "application/x-www-form-urlencoded",
  41.                         Origin: "https://lxy.lanzouj.com",
  42.                         Referer: "https://lxy.lanzouj.com/b052mtlbg",
  43.                         Host: "lxy.lanzouj.com"
  44.                 }
  45.         });
  46.         const data = response.data;
  47.         const id_data = data.text.find(item => item.name_all.startsWith("雷小伊脱机日常"));
  48.         const id = id_data ? id_data.id : null;
  49.         console.log(id, id_data, `https://lxy.lanzouj.com/${id}`);
  50.         const file_page_res = await axios.get(`https://lxy.lanzouj.com/${id}`);
  51.         const install_ifr_url = `https://lxy.lanzouj.com${file_page_res.data.match(/<iframe[^>]*class="ifr2"[^>]*src="([^"]*)"/)[1]}`;
  52.         console.log(`https://lxy.lanzouj.com${file_page_res.data.match(/<iframe[^>]*class="ifr2"[^>]*src="([^"]*)"/)[1]}`);
  53.         const install_ifr_res = await axios.get(install_ifr_url);
  54.         const str = install_ifr_res.data;
  55.         const websignkey = str.match(/aihidcms\s*=\s*'([^']+)'/)[1];
  56.         const ajaxdataMatch = str.match(/ajaxdata\s*=\s*'([^']+)'/);
  57.         const dataSignMatch = str.match(/data\s*:\s*{[^}]*'sign'\s*:\s*'([^']+)'/);
  58.         const urlMatch = str.match(/url\s*:\s*'([^']+)'/);

  59.         const ajaxdata = ajaxdataMatch ? ajaxdataMatch[1] : null;
  60.         const dataSign = dataSignMatch ? dataSignMatch[1] : null;
  61.         const ajaxUrl = urlMatch ? urlMatch[1] : null;

  62.         console.log("ajaxdata:", ajaxdata);
  63.         console.log("data sign:", dataSign);
  64.         console.log("ajax url:", ajaxUrl);
  65.         console.log("websignkey: ", websignkey);

  66.         const getDownloadUrl = await axios.post(`https://lxy.lanzouj.com${ajaxUrl}`, {
  67.                 action: "downprocess",
  68.                 signs: ajaxdata,
  69.                 sign: dataSign,
  70.                 websign: "",
  71.                 websignkey,
  72.                 ves: 1,
  73.                 kd: 1
  74.         }, {
  75.                 headers: {
  76.                         "Content-Type": "application/x-www-form-urlencoded",
  77.                         Origin: "https://lxy.lanzouj.com",
  78.                         Referer: "https://lxy.lanzouj.com/b052mtlbg",
  79.                         Host: "lxy.lanzouj.com"
  80.                 }
  81.         });
  82.         console.log(`https://lxy.lanzouj.com${ajaxUrl}`, getDownloadUrl.data);
  83.     const fileUrl = `${getDownloadUrl.data['dom']}/file/${getDownloadUrl.data['url']}`
  84.     console.log(fileUrl)
  85.     const headers = {
  86.         "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
  87.         "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
  88.         "sec-ch-ua": ""Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"",
  89.         "sec-ch-ua-mobile": "?0",
  90.         "sec-ch-ua-platform": ""Windows"",
  91.         "sec-fetch-dest": "document",
  92.         "sec-fetch-mode": "navigate",
  93.         "sec-fetch-site": "none",
  94.         "sec-fetch-user": "?1",
  95.         "upgrade-insecure-requests": "1",
  96.         "cookie": "down_ip=1"
  97.     };
  98.         axios.interceptors.response.use(response => {
  99.                 return response;
  100.         }, error => {
  101.                 if (error.response && error.response.status === 302) {
  102.                         const redirectUrl = error.response.headers.location;
  103.                         console.log('重定向链接:', redirectUrl);
  104.                         return axios.get(redirectUrl, { responseType: 'arraybuffer' });
  105.                 }
  106.                 return Promise.reject(error);
  107.         });
  108.     axios.get(fileUrl, { headers, maxRedirects: 0, responseType: 'arraybuffer' })
  109.     .then(response => {
  110.         console.log('最终请求的URL:', response.request.res.responseUrl);
  111.         fs.writeFile('./test1.exe', response.data, (err) => {
  112.             if (err) {
  113.                 console.error('写入文件时出错:', err);
  114.             } else {
  115.                 console.log('文件已成功保存为 test1.exe');
  116.             }
  117.         });
  118.     })
  119.     .catch(error => {
  120.         console.error('请求失败:', error.message);
  121.     });
  122. })();
复制代码
下载:
https://mspring.lanzouo.com/iLvEc2etimmd
密码:7058
回复

举报 使用道具

热血英杰

47

主题

158

回帖

212

积分
UID
12657
雷小钻
0
雷小币
2155
贡献点数
59
发表于 2024-11-11 18:32:55 | 显示全部楼层
加个脱机群不就行了,更新后管理员会在群里发出来的
随缘更啊,有时候懒
回复

举报 使用道具

初入学徒

5

主题

44

回帖

47

积分
UID
89
雷小钻
0
雷小币
900
贡献点数
17
楼主 | 发表于 2024-11-11 23:20:54 | 显示全部楼层
回复 @野怪 发表于 2024-11-11 18:32
加个脱机群不就行了,更新后管理员会在群里发出来的

主要是懒得每次都去进行一遍下载=>移动文件=>删除旧版脱机日常。像我这种懒癌晚期能一键解决的就不会分3步做~
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 立即注册
快速回复 返回顶部 返回列表