Автоматическое выкачивание новых серий любимых сериалов
Date November 7th, 2014 Author Vitaly Agapov
Некоторое время назад на некоторых ресурсах (в основном на Хабре) на глаза несколько раз попадались посты о том, как организовать автоматическое скачивание новых серий, которые появляются на сериальных торрент-трекерах. В основном речь шла о ресурсе 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, в котором хранятся не названия сериалов, а просто страницы с раздачами. При каждом запуске он проверяет, не изменилась ли раздача, и если она изменилась, скачивает торрент. Тут он тоже добавляет к строчке метаинформацию, но на этот раз просто размер контента в байтах.
Логиниться на сайт не нужно, поэтому второй скрипт получился меньше и проще первого. А по принципу использования ничем не отличается от скрипта для лостфильма.
Tags: Linux, Perl
Category:
Linux, Perl |
2 Comments »
18 December 2014 - 22:39
Есть же готовые программы для парсинга.
19 December 2014 - 10:42
Нельзя просто так взять и не написать свой велосипед.