Мониторинг торрентов и автоматическая скачка / Хабрахабр. Совсем недавно на Хабре было 2 статьи о том, как автоматизировать процесс скачивания новых серий с торрентов. Авторы обеих статей поделились своими приложениями. Фильм У Мини это в первый раз, смотреть онлайн в хорошем качестве. Скачать торрент; Смотреть; Отзывы; Рецензии; Трейлеры. Ну и в те времена он не мог сам добавлять скачанные торренты в торрент клиент (в. Это первый серьёзный проект на python, поэтому многих. По умолчанию запуск происходит раз в 2 часа, но это значение можно изменить. Сам писал мини -скрипт, который переименовывает и. У Мини это в первый раз (2005). Видео: трейлеры, фрагменты фильма, съемки, интервью, тв-ролики, реклама. Вот уже год мы тоже разрабатываем подобное приложение и мне кажется, пришло время рассказать хабрасообществу о нашем маленьком, но прекрасном проекте Monitorrent, который, возможно, сделает вашу жизнь настолько проще и удобнее, насколько сделал нашу. Веб приложение написано на Python 2 (с поддержкой Python 3). Оно позволяет добавлять новые торренты для мониторинга, автоматически скачивать новые серии и добавлять их в торрент клиент. Мы им пользуемся на постоянной основе с конца прошлого года, а 1 мая 2. За подробностями того как оно работает внутри прошу под кат. Мне хочется прийти с работы домой и, сев ужинать, просто открыть Kodi, выбрать свежую серию любимого сериала и посмотреть её. Не прилагая никаких усилий для ее поиска на торрент трекерах и не тратя время на ожидание, пока она скачается. Восемнадцатилетняя красотка по имени Мини мечтает избавиться от опеки своей матери-алкоголички. Она хочет, чтобы ее мать признали . Решений для данной автоматизации очень много. Сначала я пользовался плагином для Chrome, который следил за изменениями на rutracker, а изменённые торренты качал вручную и добавлял в u. Torrent по RDC, а позже через их веб приложение. Torrent. Monitor. Но после того, как я открыл для себя Torrent. Monitor все стало намного проще. Он у меня работал на роутере больше года. Даже пару pull request’ов к нему было.
Об этом приложении было 2 замечательные статьи на хабре от его автора (раз, два). Огромное спасибо автору. Torrent. Monitor прекрасен, но у меня постоянно была одна проблема. Иногда скачивался файл нулевого размера. Приходилось руками лезть в базу и исправлять информацию о том, что эта серия ещё не была скачана (вроде бы эту проблему уже исправили). Ну и в те времена он не мог сам добавлять скачанные торренты в торрент клиент (в Transmission в моем случае). Сейчас с этим тоже все хорошо. Flex. Get. Следующим открытием для меня был Flex. Get. Очень мощный инструмент. В нем не было поддержки lostfilm. В остальном он работал исправно, однако научить его следить за изменением торрента на rutracker’е у меня так и не вышло. Наверное и сейчас этого сделать нельзя. Зато у меня было настроенное правило, которое скачивало фильмы этого и предыдущего года с 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 = . Здесь описаны 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 интерфейсе. Сейчас они используются только в одном месте, для получения статуса текущей проверки на новые серии. Back- end. Написан на python 2 с использованием falcon. Falcon обещает очень высокую производительность и он показался мне очень удобным. Первоначально Monitorrent был написан на cherrypy, потом переписан на flask, была попытка использование bottle, но тоже так и не сложилось и мы остановились на falcon. К сожалению falcon – это фреймворк для написания REST сервисов в первую очередь, а отдавать статику тоже нужно. Такой функциональности falcon не предоставляет из коробки, в отличии от тех же flask и cherrypy. Пришлось реализовать этот функционал самим. К тому же все средства в falcon для этого есть.@no. Мне кажется, я украл это решение то ли у cherrypy, то ли у flask и просто переписал его для falcon. Не думаю, что ему место в falcon, потому и не слал им pull request. Решение мне кажется ужасным, но более красивого мы пока не нашли. Встроенный WSGI веб сервер falcon можно использовать только для разработки, поэтому всё крутится на WSGI имплементации из cherrypy, которая, насколько мне известно, очень стабильная: d = wsgiserver. WSGIPath. Info. Dispatcher(. Нужно кроссплатформенное решение, так как Monitorrent также работает и под Windows. Это первый серьёзный проект на python, поэтому многих особенностей мы не знаем. Наверное, получение статики можно переложить на какой- то WSGI сервер, а всю работу по обработке запросов REST оставить на falcon. Будем благодарны, если кто- то подскажет, как это сделать правильно. Dependency Injection. Мне сложно понять, как можно жить без DI контейнера, но в python- мире не принято их использовать. Было уже много холиваров на эту тему. К сожалению, хорошего решения не было найдено, так что мы воспользовались явной инъекцией зависимостей во все классы. Система plugin’ов. Все трекеры и торрент клиенты реализованы в виде плагинов. Пока это все типы плагинов, но в ближайшее время появятся плагины для уведомлений. Соответствующий pull request ожидает review и будет доступен в версии 1. У Мини это в первый раз (2. Mini's First Time)Дата выхода в России (или в Мире): 0. Дата выхода на DVD: 2. Жанр: Драма, Зарубежный фильм, Комедия, Криминалus. Продолжительность: 0. Режиссер: Ник Гати. В ролях: Люк Уилсон, Арти Бакстер, Майкл Ласкин, Джефф Голдблюм, Светлана Меткина, Спрэг Грэйден, Рик Фокс, Алек Болдуин, Никки Рид, Кэрри- Энн Мосс. Восемнадцатилетняя красотка по имени Мини мечтает избавиться от опеки своей матери- алкоголички. Она хочет, чтобы ее мать признали невменяемой и отправили в психиатрическую лечебницу. Для осуществления своего плана девушка соблазняет Мартина, который приходится ей отчимом. Теперь у нее есть надежный сообщник. Но в результате их сговора происходит убийство, за расследование которого берется детектив Джон Гарсон. Каждому хочется спасти свою шкуру, Мини пытается свалить всю вину на Мартина, а мужчина обвиняет во всех грехах свою приемную дочь.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
December 2016
Categories |