qB-WebUI 精简tracker

qB-WebUI 精简tracker地址,需要自定义缩略词

当前为 2024-01-21 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name            qB-WebUI 精简tracker
// @namespace       http://tampermonkey.net/
// @version         2024-01-22
// @description     qB-WebUI 精简tracker地址,需要自定义缩略词
// @author          avatasia
// @license         MIT
// @run-at          document-end
// @match           http://127.0.0.1:8080/
// @require         https://cdn.bootcdn.net/ajax/libs/jquery/3.6.3/jquery.min.js

// ==/UserScript==

//require qB API v2.3.0 +

const host = window.location.href;
const baseURL = host + 'api/v2/torrents/';

async function getFetch(route) {
    try {
        const response = await fetch(baseURL + route);
        if (!response.ok) {
            throw new Error('Error fetching info!');
        }
        const data = await response.json();
        return data;
    } catch (error) {
        console.error(error);
        return null;
    }
}

function extractDomain(url) {
    // 使用正则表达式匹配域名
    var match = url.match(/^(?:https?:\/\/)?([^\/]+)/);

    // 如果匹配成功,返回匹配的域名部分
    return match ? match[1] : null;
  }



const  tracker_dic = [
    {tracker: "52pt.site", abbr:"52pt"},
    {tracker: "hdfun.me", abbr:"hdfun"},
]

function getAbbr(tracker) {
    for (const entry of tracker_dic) {
        if (entry.tracker === tracker) {
            return entry.abbr;
        }
    }
    // 如果没有找到匹配的tracker,则返回null或其他适当的值
    return 'unmatched';
}

async function processTorrents() {
    try {
        const torrentList = await getFetch('info');
        let count = 0;
        const keywords = ['registered', 'deleted']; // Keywords to search for

        for (const torrent of torrentList) {
            let tracker = torrent.tracker;
            let trackers_count = torrent.trackers_count;
            
            const tags = "tracker_" + getAbbr(extractDomain(tracker));

            //const response = await fetch(`${baseURL}addTags?hashes=${torrent.hash}&tags=${tags}`); //GET method. only for qb version under v4.5.0
            const url = `${baseURL}addTags`;
            const data = new URLSearchParams();
            data.append('hashes', torrent.hash);
            data.append('tags', tags);
            fetch(url, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                body: data
            })
                .then(response => {
                console.log(response);
            })
                .catch(error => {
                console.error('Error:', error);
            });
        }
        console.log('Done.');
    } catch (error) {
        console.error('Error:', error.message);
    }
}


jQuery("#desktopNavbar > ul").append(
    "<li><a class='js-modal-485346'><b> 精简tracker异常 </b></a></li>",
);

jQuery(".js-modal-485346").click(async function () {
    await processTorrents();
});