GBT网站资源获取查询
// ==UserScript== // @name gbtGame_Tool // @namespace http://tampermonkey.net/ // @version 0.2.1 // @description GBT网站资源获取查询 // @author byhgz // @license GNU GPLv3 // @match http://gbtgame.ysepan.com/ // @require https://greasyfork.org/scripts/462234-message/code/Message.js?version=1170653 // @icon https://www.google.com/s2/favicons?sz=64&domain=lanzouw.com // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // ==/UserScript== //对Qmsg工具进行二次封装 const Tip = { success(text, config) { Qmsg.success(text, config); }, info(text, config) { Qmsg.info(text, config); }, error(text, config) { Qmsg.error(text, config); }, loading(text, config) { return Qmsg.loading(text, config); }, close(loading) { try { loading.close(); } catch (e) { console.error(e); this.error("loading关闭失败!"); } } }; const Util = { /** * @returns {string} url */ getWindowUrl() { return window.location.href; }, /** * 导出文件 * @param {String}content 内容 * @param {String}fileName 文件名 */ fileDownload(content, fileName) { // 获取导出文件内容 // 创建隐藏的下载文件链接 const element = document.createElement('a'); element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(content)); element.setAttribute('download', fileName); element.style.display = 'none'; document.body.appendChild(element); // 手动触发下载 element.click(); // 清理dom document.body.removeChild(element); }, /** *注册一个菜单并返回菜单id,可在插件中点击油猴时看到对应脚本的菜单 * @param {string}text 显示文本 * @param {function}func 事件 * @param {string}shortcutKey 快捷键 * @return menu 菜单id */ addGMMenu(text, func, shortcutKey = null) { return GM_registerMenuCommand(text, func, shortcutKey); }, /** * 返回当前时间 * @returns {String} */ toTimeString() { return new Date().toLocaleString(); }, }; const GBTGame = { data: { tempDataList: [] }, //验证数据 verifyData() { if (this.data.tempDataList.length === 0) { const info = "请先获取页面所有游戏资源先!"; Tip.error(info); alert(info); throw Error(info); } }, init() {//初始化页面资源信息,用于获取资源操作 if (!Util.getWindowUrl().includes("http://gbtgame.ysepan.com")) { alert("当前网站不是GBT乐赏游戏空间"); return; } const loading = Tip.loading("正在获取中,请不要对当前网页进行其他操作!"); const arrList = document.querySelectorAll("#menuList>*"); let chickTempIndex = 0; this.data.tempDataList = []; const interval = setInterval(() => { if (arrList.length <= chickTempIndex) { loading.close(); clearInterval(interval); alert("已点击完成!现在可以对资源进行获取和查找从操作了。ps:每次访问当前页面都需要初始化!"); return; } const tempE = arrList[chickTempIndex++]; const a = tempE.querySelector("a"); const filesTime = a.text; a.click(); const info = `已点击${filesTime}`; Tip.success(info); const p = new Promise((resolve) => { const interval01 = setInterval(() => { let menuItem = tempE.querySelectorAll(".menu>*:not(.lxts)"); if (menuItem.length <= 1) { return; } clearInterval(interval01); resolve(menuItem); }, 15); }); p.then((data) => { data.forEach((value) => { const tempE = value.querySelector("a"); const data = {}; let tempTitle = tempE.text.trim(); data["title"] = tempTitle.substring(0, tempTitle.lastIndexOf(".")); data["url"] = tempE.getAttribute("href"); data["text"] = value.querySelector("b").textContent.trim(); this.data.tempDataList.push(data); }); }); }, 1000); }, find(key) { const dataList = this.data.tempDataList; const findDataList = []; dataList.forEach(value => { if (!value.title.includes(key)) return; findDataList.push(value); }); return findDataList; }, getData() { this.verifyData(); return this.data.tempDataList; }, outPutFile() { const data = this.getData(); const info = `已获取到${data.length}个资源,并将其打印在控制台和输出面板上!`; alert(info); Tip.success(info); Util.fileDownload(JSON.stringify(data, null, 3), `GBT乐赏游戏空间游戏磁力地址${data.length}个资源(${Util.toTimeString()}).json`); }, outPutConsole() { const data = this.getData(); console.log("===============================================") const info = `已获取到${data.length}个资源,并将其打印在控制台和输出面板上!`; console.log(info); alert(info); console.log(data); console.log("===============================================") }, /** * 查找输入框,如有结果,则返回结果,否则返回null */ findInput() { this.verifyData(); const val = prompt("搜索关键词"); if (val === null || val.trim() === "") { return null; } const findDataList = this.find(val); if (findDataList.length === 0) { alert(`未查到到关键词${val}的资源!`) return null; } return {key: val, data: findDataList}; }, findInputAndOutPut() { const data = this.findInput(); if (data === null) return; const size = data.data.length; alert(`已获取到${size}个资源,准备导出到文件!`) console.log("===============================================") Util.fileDownload(JSON.stringify(data.data, null, 3), `GBT乐赏游戏空间游戏磁力地址${data.key}关键词(${Util.toTimeString()}).json`); console.log("===============================================") }, findInputAndOutPutConsole() { const data = this.findInput(); if (data === null) return; const size = data.data.length; alert(`已获取到${size}个资源,并将其打印在控制台和输出面板上!`) console.log("===============================================") console.log(`关键词${data.key}\t资源数量${size}`); console.log(data.data); console.log("===============================================") } }; (function () { 'use strict'; Util.addGMMenu("初始化页面数据", () => GBTGame.init()); Util.addGMMenu("导出页面数据到文件", () => GBTGame.outPutFile()); Util.addGMMenu("导出页面数据到控制台", () => GBTGame.outPutConsole()); Util.addGMMenu("查找资源并导出资源到文件", () => GBTGame.findInputAndOutPut()); Util.addGMMenu("查找资源并导出资源到控制台", () => GBTGame.findInputAndOutPutConsole()); })();