qB-WebUI 精简tracker

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

目前為 2024-01-21 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name            qB-WebUI 精简tracker
// @namespace       http://tampermonkey.net/
// @version         2024-01-21
// @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'><b> 精简tracker异常 </b></a></li>",
);

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