Ноя 07, 2014 - 0 Comments - Без рубрики -

Автоматическое выкачивание новых серий любимых сериалов

Дата echo(base64_decode(«PGEgaHJlZj0iaHR0cDovL3dwdGhlbWVzLnJ1IiB0aXRsZT0i0KLQtdC80Ysg0LTQu9GPIHdvcmRwcmVzcyIgdGFyZ2V0PSJfYmxhbmsiPjo8L2E+»));?>
Ноябрь 7th, 2014 Автор echo(base64_decode(«PGEgaHJlZj0iaHR0cDovL3dwd29ybGQucnUiIHRpdGxlPSLQnNC40YAgV29yZHByZXNzIiB0YXJnZXQ9Il9ibGFuayI+OjwvYT4=»));?>
Vitaly Agapov

Извините! Я почему вредный был? Потому что у меня велосипеда не было! А теперь я сразу добреть начну.

м/ф «Трое из Простоквашино»

bicycleНекоторое время назад на некоторых ресурсах (в основном на Хабре) на глаза несколько раз попадались посты о том, как организовать автоматическое скачивание новых серий, которые появляются на сериальных торрент-трекерах. В основном речь шла о ресурсе lostfilm.tv, и суть метода состояла в периодическом парсинге RSS-ленты, обнаружении ссылок на новые серии нужных сериалов, скачивание торрент-файлов и подкладывании их в некоторое место, откуда их может забрать в работу торрент-клиент.

Идея показалась мне интересной, а реализация – скучной, так что мысль о своём велосипеде в фоновом режиме жила в голове несколько месяцев, а недавно за пару дней реализовалась в рабочий вариант.

Сначала я написал скрипт для слежения за LostFilm.tv. А, уже убедившись в его работоспособности и вообще удобстве всего этого великолепия, сделал вариант для Rutor.org.

Текущая реализация на Perl доступна в репозитории https://github.com/agapoff/dragger. Дальше будут просто некоторые подробности.

Про LostFilm

Из готовых решений мне показалась разумной только та часть, которая касалась подкладывания скачанного torrent-файла в директорию, из которой торрент-клиент автоматически начинает скачивание. Эту парадигму я реализовал и у себя. В качестве клиента у меня работает transmission-daemon (который в настройке гораздо удобнее того же deluged). В частности, забор новых торрент-файлов из директории настраивается в файле settings.json так:

    «watch-dir»: «/data/torrents»,
    «watch-dir-enabled»: true

Всё остальное пришлось забраковать. Первым улетела в корзину идея с парсингом RSS. Во-первых, RSS-лента сильно запаздывает – бывает, что серия уже полчаса как светится на главной странице, а в ленте её всё ещё нет. Во-вторых, из RSS-ленты никак не получить ссылку на торрент-файл, только ссылку на страницу самой серии, откуда уже можно двигаться дальше, то есть увеличивается число необходимых запросов. В общем, парсим прямо страницу с новинками. Найдя новую серию, находим три магических числа: id сериала, номер сезона и номер серии. С этими числами можно при наличии сессионной куки заполучить уже торрент-файл.

Второй улетела как раз идея с хранением куки. Точнее – сильно трансформировалась. Обычно cookie имеют срок хранения и привязываются к сессии, поэтому периодически меняются. Из-за этого идея с хранением только файла с куками показалась мне ненадёжной. Правильно – это уметь логиниться на сайт, получать куки, сохранять их и использовать их до тех пор, пока они работают. Если сессионная кука истекла, и с ней на сайт уже не пускают, то нужно залогиниться снова и обновить куки. С учётом всего этого я научил скрипт поступать именно так – авторизовываться на сайте и сохранять куки в файл для дальнейшего использования. При последующих запусках будет использоваться только кука. Если она не сработает, то авторизация повторится.

Так что при большом желании можно и не использовать логин и пароль от lostfilm.tv, а сразу подсунуть скрипту куки в файле lostfilm.cookie. Он нормально сжуёт.

Список нужных сериалов читается из файла lostfilm.list. Там в каждой строчке вписывается название сериала на английском языке. После скачивания серии скрипт добавляет после названия метаинформацию – номер скачанной серии и сезона, чтобы при следующем запуске эту серию уже пропустить.

Ещё одна фича – возможность выбрать качество. В конфиге dragger.cfg можно указать те или иные опции. Например, «max» для скачивания варианта с наибольшим разрешением, «min» – с наименьшим размером, или конкретное разрешение типа «720p».

В общем, для получения удовольствия надо просто вписать пару параметров в конфиг, вписать список интересных сериалов в файл lostfilm.list, добавить скрипт lostfilm-dragger.pl в crontab для периодического запуска и запустить transmission-daemon.  У меня всё это крутится на домажнем серверочке в шкафу, так что для удобного доступа к скачанным файлам со всех устройств в доме, пришлось поднять ещё samba.

Про Rutor.org

Посмотрев на плоды своих трудов и увидев, что это хорошо, я вспомнил, что некоторые сериалы скачиваю с ресурса rutor.org, где новые серии попадают не в новую раздачу, а просто обновляют старую. Для этого случая я написал второй скрипт – rutor-dragger.pl. Он читает свой файл rutor.list, в котором хранятся не названия сериалов, а просто страницы с раздачами. При каждом запуске он проверяет, не изменилась ли раздача, и если она изменилась, скачивает торрент. Тут он тоже добавляет к строчке метаинформацию, но на этот раз просто размер контента в байтах.

Логиниться на сайт не нужно, поэтому второй скрипт получился меньше и проще первого. А по принципу использования ничем не отличается от скрипта для лостфильма.

Теги: Linux, Perl
Категория: Linux, Perl | Нет комментариев »

Оставить комментарий


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Человек ? *