gbtGame_Tool

GBT网站资源获取查询

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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());
})();