Скрипт для rutor.is
Привет. Не очень мне было удобно пользоваться этим сайтом с торрентами, хотя очень нравится, что не надо регистрироваться, чтобы скачивать. И вот для расширения браузера Tampermonkey написал скрипт, который гуппирует раздачи по названию фильма, сортирует внутри групп по количеству раздающих и подсвечивает раздачи размером 1.3–2.5 Гб, т.е. те, что меня интересуют))
Собственно если кому интересно - то вот сам скрипт и скриншоты его работы:
// ==UserScript==
// @name Rutor — группировка + сортировка по сидерам + подсветка по размеру
// @namespace http://tampermonkey.net/
// @VERSION 1.3
// @Description Группирует раздачи по названию фильма, сортирует внутри групп по количеству раздающих и подсвечивает раздачи размером 1.5–2.5 Гб
// @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);
});
}
})();
Соответственно работает везде: в поиске, в любом разделе и даже в связанных раздачах
Лига пиратов
72 поста1.1K подписчика
Правила сообщества
Разрешено всё, что не запрещено правилами пикабу. Однако лучше придерживаться тематики, указанной в описании сообщества.