13

Скрипт для rutor.is

Привет. Не очень мне было удобно пользоваться этим сайтом с торрентами, хотя очень нравится, что не надо регистрироваться, чтобы скачивать. И вот для расширения браузера Tampermonkey написал скрипт, который гуппирует раздачи по названию фильма, сортирует внутри групп по количеству раздающих и подсвечивает раздачи размером 1.3–2.5 Гб, т.е. те, что меня интересуют))

Собственно если кому интересно - то вот сам скрипт и скриншоты его работы:

// ==UserScript==

// @name Rutor — группировка + сортировка по сидерам + подсветка по размеру

// @namespace http://tampermonkey.net/

// @VERSION 1.3

// @Description Группирует раздачи по названию фильма, сортирует внутри групп по количеству раздающих и подсвечивает раздачи размером 1.5–2.5 Гб

// @match *://rutor.is/*

// @GrAnt none

// ==/UserScript==

(function () {

'use strict';

const indexDiv = document.querySelector('#index');

if (!indexDiv) return;

const table = indexDiv.querySelector('table[width="100%"]');

if (!table) return;

// Все строки, кроме первой (шапка)

const rows = Array.from(table.querySelectorAll('tr')).slice(1);

const groups = {};

rows.forEach(row => {

const titleLink = row.querySelector('a[href^="/torrent/"]');

if (!titleLink) return;

let title = titleLink.textContent.trim();

// Берём только "Название (Год)"

const match = title.match(/^(.+?\(\d{4}\))/);

if (match) {

title = match[1];

}

if (!groups[title]) groups[title] = [];

groups[title].push(row);

});

// Очищаем таблицу

table.innerHTML = '';

// Перестраиваем содержимое

for (const [filmTitle, filmRows] of Object.entries(groups)) {

const headerRow = document.createElement('tr');

const headerCell = document.createElement('td');

headerCell.colSpan = 5;

headerCell.style.background = '#eee';

headerCell.style.padding = '5px';

headerCell.style.fontWeight = 'bold';

headerCell.textContent = `${filmTitle} (${filmRows.length})`;

headerRow.appendChild(headerCell);

table.appendChild(headerRow);

// Сортировка по сидерам (обычно колонка с индексом 4)

filmRows.sort((a, b) => {

const tdsA = a.querySelectorAll('td');

const tdsB = b.querySelectorAll('td');

const seedersA = parseInt(tdsA[4]?.textContent.trim()) || 0;

const seedersB = parseInt(tdsB[4]?.textContent.trim()) || 0;

return seedersB - seedersA;

});

filmRows.forEach(r => {

const tds = r.querySelectorAll('td');

// Обычно размер в колонке с индексом 1 или 2 — уточняем

const sizeText = [...tds].map(td => td.textContent.trim()).find(txt => /(?:\d+(?:[.,]\d+)?)\s*(?:GB|ГБ|Mb|МБ|KB|КБ)/i.test(txt));

if (sizeText) {

const match = sizeText.match(/([\d.,]+)\s*(GB|ГБ|MB|МБ|KB|КБ)/i);

if (match) {

let num = parseFloat(match[1].replace(',', '.'));

let unit = match[2].toUpperCase();

// Переводим в ГБ

if (unit.includes('MB') || unit.includes('МБ')) {

num = num / 1024;

} else if (unit.includes('KB') || unit.includes('КБ')) {

num = num / (1024 * 1024);

}

if (num >= 1.3 && num <= 2.5) {

r.style.backgroundColor = '#e6ffe6'; // нежно-зелёный

}

}

}

table.appendChild(r);

});

}

})();

Скрипт для rutor.is Торрент, Рутор, Rutoris, Длиннопост
Скрипт для rutor.is Торрент, Рутор, Rutoris, Длиннопост

Соответственно работает везде: в поиске, в любом разделе и даже в связанных раздачах

Лига пиратов

72 поста1.1K подписчика

Правила сообщества

Разрешено всё, что не запрещено правилами пикабу. Однако лучше придерживаться тематики, указанной в описании сообщества.