Торрент Граббер

10 Comments

Мониторинг торрентов и автоматическая скачка / Хабрахабр. Совсем недавно на Хабре было 2 статьи о том, как автоматизировать процесс скачивания новых серий с торрентов. Авторы обеих статей поделились своими приложениями. Вот уже год мы тоже разрабатываем подобное приложение и мне кажется, пришло время рассказать хабрасообществу о нашем маленьком, но прекрасном проекте Monitorrent, который, возможно, сделает вашу жизнь настолько проще и удобнее, насколько сделал нашу.

Веб приложение написано на Python 2 (с поддержкой Python 3). Оно позволяет добавлять новые торренты для мониторинга, автоматически скачивать новые серии и добавлять их в торрент клиент. Мы им пользуемся на постоянной основе с конца прошлого года, а 1 мая 2. За подробностями того как оно работает внутри прошу под кат. Мне хочется прийти с работы домой и, сев ужинать, просто открыть Kodi, выбрать свежую серию любимого сериала и посмотреть её. Не прилагая никаких усилий для ее поиска на торрент трекерах и не тратя время на ожидание, пока она скачается. Решений для данной автоматизации очень много.

Сначала я пользовался плагином для Chrome, который следил за изменениями на rutracker, а изменённые торренты качал вручную и добавлял в u. Torrent по RDC, а позже через их веб приложение. Torrent. Monitor. Но после того, как я открыл для себя Torrent. Monitor все стало намного проще.

Он у меня работал на роутере больше года. Даже пару pull request’ов к нему было.

Об этом приложении было 2 замечательные статьи на хабре от его автора (раз, два). Огромное спасибо автору. Torrent. Monitor прекрасен, но у меня постоянно была одна проблема. Иногда скачивался файл нулевого размера. Приходилось руками лезть в базу и исправлять информацию о том, что эта серия ещё не была скачана (вроде бы эту проблему уже исправили). Ну и в те времена он не мог сам добавлять скачанные торренты в торрент клиент (в Transmission в моем случае). Сейчас с этим тоже все хорошо.

Orbit Downloader – программа для быстрого и удобного скачивания. Популярный торрент-клиент для загрузки и обмена файлами в интернете. Поиск торрентов v.4.0 Final Release - модуль DLE для поиска торрентов на популярных торрент трекерах Rutor, OpenSharing, Rutracker, Nnm-Club, . Парсер торрентов - это настройка Datacol, которая автоматически получает информацию о раздачах сайта Rutracker.

Flex. Get. Следующим открытием для меня был Flex. Get. Очень мощный инструмент. В нем не было поддержки lostfilm. В остальном он работал исправно, однако научить его следить за изменением торрента на rutracker’е у меня так и не вышло.

Торрент Граббер

На нашем сайте можно купить Парсер торрентов rutor, rutracker, tfile, pornolab, NNM-club. Все для торрент-трекеров и DLE. Лазарев В.С. Руководство Педагогическим Коллективом здесь.

Наверное и сейчас этого сделать нельзя. Зато у меня было настроенное правило, которое скачивало фильмы этого и предыдущего года с rutor, с качеством 7. Японии (ну не люблю я японский синематограф, а рейтинг у них стабильно высокий). Всё это описывалось всего лишь парой строчек в yaml. Долгое время оба сервиса (Torrent.

Monitor и Flex. Get) работали рядом на роутере. После того как мне подарили cubietruck, и я установил в него 2.

Тб, он превратился в маленький, но очень практичный NAS, который кушает мало электричества и исправно качает торренты. А мобильная батарейка спасает от проблем с перебоями электричества. Скорость доступа к файлам около 3. Мб/с стабильно, этого достаточно для моих задач.

Torrent. Monitor и Flex. Get перекочевали на cubietruck. Однако, проблема со скачиванием торрентов нулевого размера никуда не делась. Monitorrent. И мне захотелось сделать свой проект для автоматизации скачивания новых серий. Torrent. Monitor написан на PHP и вызывает curl для скачивания новых торрентов.

Для настройки времени запуска использует вызов php через cron. Мне же хотелось все из коробки, чтобы установил — и оно заработало. Так появился Monitorrent. Как идея написать что- то полезное для себя на python. Маленький набор скриптов не в счет.

Это одностраничное веб приложение написанное на Python 2. В качестве front- end’а используется Angular 1. А back- end — это просто REST сервис, написанный с использованием falcon. Все исходники лежат на github, и распространяются под лицензией Do What the Fuck You Want to Public License. Сейчас поддерживаются следующие трекеры: Скачанные торренты можно добавлять в следующие торрент клиенты: Transmission. Delugeu. Torrentqbittorrent.

Это покрывает мои нужды на 2. Front- end. Вообще, это двухстраничное приложение. Одна страница для логина, вторая — все остальное приложение. Отдельная страница логина нужна только для того, чтобы нельзя было скачивать статические файлы (картинки, css или js) до того, как авторизируешься в систему. Я наверное параноик, смысла в этом мало, но мне нравится думать, что так слегка безопаснее. Обе страницы генерируются из одного index.

Все внешние js файлы (фреймворки и js библиотеки) грузятся из CDN, для того чтобы облегчить доступ к Monitorrent’у извне, когда он развернут в домашней сети. Если дома ADSL, а скорость отдачи только 5. Все внутренние js файлы уже приходится скачивать из домашней сети, которые потом отлично кэшируются браузером. А так как все остальное общение сделано через REST, то данных между front- end’ом и back- end’ом пересылается очень мало. Авторизация сделана через JWT. Мне кажется, что это самая оптимальная технология авторизации.

Она позволяет не хранить сессию на сервере и не дает клиенту видеть, какие именно данные у него хранятся. Если вы еще не используете JWT в своих приложениях, то настоятельно рекомендую это сделать. Особенно хорошо, как мне кажется, использовать JWT в микросервисной архитектуре. Сборка сделана с помощью gulp, который заменил собой grunt.

Все js файлы просто склеиваются вместе в один большой bundle, который пока даже не минифицируется. Но всё склеивается правильно, потому что основной файл называется app. Всё остальное работает благодаря DI от angular.

Сейчас я бы прикрутил webpack. Но я не front- end разработчик и я не знал ничего о front- end разработке, когда этот проект только начинался. Динамическая генерация форм. Из дополнительных особенностей имплементации можно упомянуть реализованную нами angular директиву для генерации динамических форм. Настройки всех плагинов – это простые формы, например, вот так выглядит форма настройки соединения с Transmission: Эта форма состоит из 2- х строк, в каждой из которых по 2 текстовых блока. Длина элемента host равно 8. Текст блоки для логина и пароля размера 5.

Написание этой формы на angular- material — тривиальная задача. Однако, нам хотелось упростить разработку плагинов и сосредоточиться на написании backend- логики, и не заморачиваться html’ом. Плагин должен поставляться в виде единственно файла, без дополнительного файла разметки.

Мы разработали простой формат для описания разметки формы в коде плагина: form = . Lg G12nt Отзывы. Здесь описаны 3 текстовых блока и один блок для ввода пароля.

Назначение свойств type и label понятны из их названий. Имя свойства flex, было выбрано неудачно, правильнее его было назвать width – оно определяет длину элемента в процентах внутри строки. Оно было так названо, потому что angular- material использует flexbox для описания расположения элементов на странице. После того как пользователь введёт данные в эту форму, и нажмет кнопку Save. На back- end будет послана модель следующего вида. В мобильной версии приложения все элементы будут располагаться друг за другом, т. Этот функционал все ещё не реализован, но надеюсь появится в будущем.

Естественно, динамическая генерация форм – это не самое гибкое решение, но я считаю его правильным и обоснованным. Хотя наш front- end девелопер с этим не согласен по сегодняшний день и до сих пор спорит со мной об этом решении. Websocket. В одной из первых версий была реализована работа с Websocket’ами.

Сначала полностью руками, потом на socket. Для работы с Websocket’ами со стороны python была использована python библиотека для работы с socket. Она использует gevent, для создания coroutine (легковесных потоков, greenlet’ов и много других, название которые я уже не помню). Это отличная библиотека для написания асинхронных приложений, какими обязаны быть приложения, использующие Websocket’ы. Но, к сожалению, python socket. А для домашних роутеров gevent есть только версии 0. Исключать возможность запуска Monitorrent’а на роутерах нам очень не хотелось несмотря на то, что я сам уже давно пользуюсь cubietruck.

Поэтому от Websocket’ов пришлось отказаться и заменить их на long polling запросы в REST интерфейсе. Сейчас они используются только в одном месте, для получения статуса текущей проверки на новые серии.