Помощь в восстановлении раздач

Автор Сообщение
Azat-777 ®

Стаж: 16 лет
Сообщений: 917
Откуда: Russia

Создавать темы Azat-777 ® написал(а)
13-Сен-2018 23:58
Наверняка многие из Вас встречали на трекере раздачи, которые с виду нормальные: есть сиды и с них можно спокойно качать. Нажимаете заветную кнопку "Скачать", но сервер выдает непонятный ответ:
Выделенных вложений больше не существует.
data/torrent_files/<Torrentname>.torrent
Файл отсутствует на сервере!
Эта ошибка связана с переходом сайта на другой сервер 12 марта2017 года.
К сожалению, ни все торрент-файлы удалось восстановить. Поэтому нам нужна Ваша помощь.
Что для этого нужно?
Наверняка, раз Вы здесь находитесь, значит что-то качаете и, соответственно, раздаете. Особенно это касается "старичков" форума, которые раздают много старых раздач.
Заходите в свой профиль и проверяете все раздачи из списка. Естественно, вручную проверять никто не хочет, поэтому специально для такого случая я написал userscript для автоматической проверки "поврежденных" раздач.
Установка скрипта.
Для работы скрипта требуется установить расширение для браузера:Установка проста: распаковать файл Check torrents.user.js из архива и перетащить в окно с расширением или открыть его в текстовом редакторе, скопировать код и вставить в окно расширения

Если все сделали правильно, зайдите в свой профиль. У Вас должна появиться соответствующая кнопка "Проверить"

Работа скрипта: нажмите кнопку "Проверить" (кнопка станет неактивной) и дождитесь окончания работы проверки. Текущий прогресс проверки Вы будете видеть рядом с самой кнопкой.

Окончание работы выглядит следующим образом.
Если все раздачи нормальные

Если есть раздачи, которые Вы раздаете, но торрент-файл отсутствует на сервере

Если Вы нашли такую раздачу, отыщите её у себя на ПК/ноутбуке и т.д. и заново создайте торрент-файл - Как создать и оформить раздачу [FAQ] -> Создание торрент файла при помощи µTorrent (4 спойлер)
  • Если это Ваша собственная раздача, найдите её на трекере и перезалейте торрент-файл - Как перезалить торрент-файл [FAQ]
  • Если это не Ваша раздача, отправьте созданный ранее торрент-файл мне, активному модератору раздела или администраторам. Я прикреплю его к раздаче. Затем Вам нужно заново скачать эту раздачу. Но т.к. у Вас все файлы уже есть, торрент-клиент просто проверит все файлы и по окончанию начнет их раздавать. Все просто.
  • Если раздача находится в печи, пишите мне, любому активному СуперМодератору или администраторам.
P.S: как, наверное, Вы уже догадались, проверять раздачи на "пустышки" можно не только в своем профиле, проверить можно абсолютно любой! Вы можете проверить профили своих знакомых, родственников, друзей и т.д. В случае нахождения подобных раздач, сообщите им об этом и поделитесь ссылкой на эту тему. Спасибо :)-ПРИМЕРНЫЙ ШАБЛОН ЗАЯВКИ
Ссылка на тему - ссылка на созданный Вами торрент-файл (рекомендуется загружать на http://rapid.ufanet.ru)-СКАЧАТЬ
Скачать userscript с ГуглДиска: https://goo.gl/c41qgp
Скачать также можно прикрепленный файл, что находится во вложении.

Скопировать код вручную&#58;

// ==UserScript==
// @name         Check torrents
// @namespace    https://torrents-local.xyz/
// @version      1.1
// @description  Check deleted torrent files
// @author       Azat-777
// @match        https://torrents-local.xyz/profile.php?mode=viewprofile&u=*
// @grant        none
// ==/UserScript==
(function() {
    'use strict';
    // стиль для спойлера
    var css = `
//body {
//font: 16px/1.5em "Segoe UI", Arial, sans-serif;
//background: #bfb6a0;
//color: #fff;
//width: 60%;
//margin: 20px auto;
//}
.spoiler-link {
display: inline-block;
text-decoration: none;
color: #fff;
background: #b63333;
padding: 10px 25px;
border-radius: 3px;
text-shadow: 0 1px 0 #8c1111;
border-bottom: 1px solid #8c1111;
-webkit-transition: all 0.6s ease;
transition: all 0.6s ease;
}
.spoiler-link:hover {
background: #8c1111;
}
.spoiler-link + .spoiler-link {
margin-left: 5px;
}
.spoiler-link--active {
background: #4f9c3d;
border-color: #2d751c;
text-shadow: 0 1px 0 #2d751c;
}
.spoiler-link--active:hover {
background: #2d751c;
}
.spoiler {
background: #fff;
color: #907c6b;
padding: 25px;
//margin-top: 25px;
border-radius: 3px;
border-bottom: 1px solid #999;
}
.spoiler__title {
margin-top: 0;
font-weight: 200;
color: #b63333;
}`;
    var head = document.querySelector('head'),
        style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
    // находим нужные элементы
    var sectionMain = document.querySelector('.sectionMain');
    if(!sectionMain) {
        return;
    }
    var tbl = sectionMain.querySelector('#dls-tbl'),
        trs = tbl.querySelectorAll('tbody > tr'),
        td = tbl.querySelectorAll('tbody > tr > td.pad_4'),
        cur_kol,
        err_kol,
        kol_no_ts,
        title = [],
        id,
        n = 0;
    // создаем перед таблицей кнопочку для проверки
    var table = document.createElement('table'),
        tableSp = document.createElement('table');
    table.id = 'my_tbl';
    table.innerHTML = `
<tbody>
<tr><td><input id="btn_check" type="button" value="Проверить" /></td> <td>| <b id="st">Статус:</b></td> <td id="prBar"></td> <td id="status"><i>Проверка еще не производилась</i></td></tr>
</tbody>`;
    tableSp.id = 'my_tbl_sp';
    tableSp.style.display = 'none';
    tableSp.innerHTML = `
<tbody><tr><td>
<nav class="spoilers-menu"><a class="spoiler-link" href="#sp1">Открыть список найденных раздач</a></nav>
<div class="spoilers">
<div class="spoiler" id="sp1">
<h1 class="spoiler__title">Следующие раздачи не имеют торрент-файлов на сервере:</h1>
</div>
</div>
</td></tr></tbody>`;
    sectionMain.insertBefore(tableSp, sectionMain.firstChild);
    sectionMain.insertBefore(table, sectionMain.firstChild);
    // функция для работы спойлера
    $(function(){
        $('.spoiler').hide();
        $('.spoiler-link').on('click', function(e) {
            var idSpoiler = $(this).attr('href'),
                classSelect = 'spoiler-link--active';
            $(this).toggleClass(classSelect);
            $(idSpoiler).slideToggle(200);
            e.preventDefault();
        });
    });
    var sp1 = document.querySelector('#sp1');
    // находим нашу созданную таблицу
    var my_tbl = sectionMain.querySelector('#my_tbl'),
        status = my_tbl.querySelector('#status'),
        st = my_tbl.querySelector('#st');
    st.style.display = 'none';
    // создаем ползунок прогресса
    var prBar = my_tbl.querySelector('#prBar');
    prBar.innerHTML = '<progress id="pr" value="0" max="'+trs.length+'"></progress>';
    var pr = prBar.querySelector('#pr');
    prBar.style.display = 'none';
    // отметка, если раздача не имеет т-файла
    var div = document.createElement('div');
    //div.id = 'my_div';
    div.className = 'topicAuthor nowrap';
    div.style.color = 'red';
    // создаем скрытый ниндзя-элемент для каждой раздачи, где будем хранить ID'ы
    var hidden = document.createElement('div');
    hidden.className = 'hidden_div';
    hidden.style.display = 'none';
    hidden.hidden = 'true';
    // кнопка для проверки
    var btn_check = my_tbl.querySelector('#btn_check');
    btn_check.onclick = function() {
        btn_check.disabled = true;
        st.style.display = 'none';
        reset();
        for(var i=0; i<trs.length; i++) {
            cur_kol = 0;
            var link = trs[i].querySelector('td.pad_4 > a').getAttribute('href');
            link = 'https://torrents-local.xyz/'+link;
            title[i] = trs[i].querySelector('td.pad_4 > a > b').innerHTML;
            fetchTorIds(link, title, i);
        }
    }
    // функция сбора всех id'ов торрентов
    function fetchTorIds(link, title, k) {
        prBar.style.display = 'inline';
        var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;
        var xhr = new XHR();
        xhr.open('GET', link, true);
        xhr.send();
        xhr.onload = function() {
            if(xhr.readyState === 4) {
                //var _div = td[k].querySelector('div.hidden_div');
                if(xhr.status === 200) {
                    var response = xhr.responseText,
                        parser = new DOMParser(),
                        doc = parser.parseFromString(response, 'text/html');
                    // получаем ID
                    id = doc.querySelector('a.seedmed');
                    if(id !== null) {
                        id = id.getAttribute('href').match(/[0-9]{2,}/)[0];
                    } else {
                        id = doc.querySelector('a.genmed').getAttribute('href').match(/[0-9]{2,}/)[0];
                    }
                    // вставляем полученный ID в скрытый ниндзя-элемент, если его еще нет
                    hidden.innerHTML = id;
                    td[k].appendChild(hidden.cloneNode(true));
                    n++;
                    /*if(_div === null) {
                        hidden.innerHTML = id;
                        td[k].appendChild(hidden.cloneNode(true));
                        n++;
                    } else {
                        td[k].lastChild.remove();
                        hidden.innerHTML = id;
                        td[k].appendChild(hidden.cloneNode(true));
                        n++
                    }*/
                }
                changeProgress();
                status.innerHTML = '<div style="font-size: 10px;">Собираю ID у: ' + title[k] + '</div>';
                if(xhr.status === 503) {
                    status.innerHTML = '<font color="red">Ошибка 503. Обновите страницу.</font>';
                    return;
                }
                if(n === trs.length) {
                    status.innerHTML = '';
                    for(var i=0; i<trs.length; i++) {
                        checkAllTorrents(i, title[i]);
                    }
                    n = 0;
                }
            }
        }
    }
    // функция проверки удаленных т-файлов на сервере
    function checkAllTorrents(i, title) {
        var _id = td[i].querySelector('div.hidden_div');
        if(_id !== null) {
            _id = _id.innerHTML;
        } else {
            status.innerHTML = '<font color="red">Ошибка получения ID\'а торрента у "'+title+'". Обновите страницу и повторите действие.</font>';
            return;
        }
        err_kol = 0;
        cur_kol = 0;
        kol_no_ts = 0;
        sp1.innerHTML = '<h1 class="spoiler__title">Следующие раздачи не имеют торрент-файлов на сервере:</h1>';
        var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;
        var xhr = new XHR();
        xhr.open('POST', '/ajax.php', true);
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
        xhr.send('action=view_torrent&attach_id='+_id);
        xhr.onload = function() {
            if(xhr.readyState === 4) {
                //var myDiv = td[i].querySelector('#my_div');
                if(xhr.status === 200) { }
                if(xhr.status === 500) {
                    kol_no_ts++;
                    sp1.innerHTML += '<p><font color="red"><b>'+kol_no_ts+'.</b> '+td[i].querySelector('a').outerHTML+'</font></p><hr>';
                    td[i].className += ' hl-selected-topic';
                    // выделяем само название раздачи другим цветом
                    td[i].querySelector('a').className += ' leechmed';
                    div.innerHTML = 'Отсутствует т-файл на сервере';
                    td[i].appendChild(div.cloneNode(true));
                    /*if(myDiv === null) {
                        div.innerHTML = 'Отсутствует т-файл на сервере';
                        td[i].appendChild(div.cloneNode(true));
                    } else {
                        td[i].lastChild.remove();
                        div.innerHTML = 'Отсутствует т-файл на сервере';
                        td[i].appendChild(div.cloneNode(true));
                    }*/
                }
                if(xhr.status === 503) {
                    // выделяем само название раздачи другим цветом
                    td[i].querySelector('a').className += ' leechmed';
                    if(myDiv === null) {
                        div.innerHTML = 'Ошибка '+xhr.status+': '+xhr.statusText;
                        td[i].appendChild(div.cloneNode(true));
                    } else {
                        td[i].lastChild.remove();
                        div.innerHTML = 'Ошибка '+xhr.status+': '+xhr.statusText;
                        td[i].appendChild(div.cloneNode(true));
                    }
                    err_kol++;
                }
                cur_kol++;
                changeProgress();
                status.innerHTML = '<div style="font-size: 10px;">Проверяю: ' + title + '</div>';
                if(cur_kol < trs.length) {
                    // . . .
                } else {
                    st.style.display = 'inline';
                    var color = kol_no_ts ? 'red' : 'green';
                    status.innerHTML = '<font color="'+color+'">Завершено.</font> ';
                    status.innerHTML += 'Всего выделено '+kol_no_ts+' раздач без т-файла на сервере из '+trs.length+'. Ошибок: '+err_kol;
                    btn_check.disabled = false;
                    prBar.style.display = 'none';
                    kol_no_ts ? tableSp.style.display = 'block' : tableSp.style.display = 'none';
                }
            }
        };
        xhr.onerror = function() {
            console.log(id, ':', xhr.status, xhr.statusText);
        };
    }
    // прогресс
    function changeProgress() {
        status.innerHTML = '';
        if(!pr.value) {
            pr.value = +pr.getAttribute('value');
        }
        if(!pr.max) {
            pr.max = +pr.getAttribute('max');
        }
        if(pr.value >= pr.max-1) {
            pr.value = 0;
            return;
        } else {
            pr.value++;
        }
    }
    // снятие всех выделений, чекбоксов и надписей
    function reset() {
        $('td.pad_4.hl-selected-topic').removeClass('hl-selected-topic');
        $('a.med.tLink.leechmed').removeClass('leechmed');
        $('div.hidden_div').remove();
        $('div.topicAuthor.nowrap').remove();
    }
})();
-Если есть вопросы, пишите сюда или мне в ЛС.
Любые модификации скрипта за исключением тех, что могут повредить работе трекера, разрешаются ay
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 21-Ноя 15:10
Часовой пояс: UTC + 5