м/ф «Трое из Простоквашино»
Некоторое время назад на некоторых ресурсах (в основном на Хабре) на глаза несколько раз попадались посты о том, как организовать автоматическое скачивание новых серий, которые появляются на сериальных торрент-трекерах. В основном речь шла о ресурсе lostfilm.tv, и суть метода состояла в периодическом парсинге RSS-ленты, обнаружении ссылок на новые серии нужных сериалов, скачивание торрент-файлов и подкладывании их в некоторое место, откуда их может забрать в работу торрент-клиент.
Идея показалась мне интересной, а реализация – скучной, так что мысль о своём велосипеде в фоновом режиме жила в голове несколько месяцев, а недавно за пару дней реализовалась в рабочий вариант.
Сначала я написал скрипт для слежения за LostFilm.tv. А, уже убедившись в его работоспособности и вообще удобстве всего этого великолепия, сделал вариант для Rutor.org.
Текущая реализация на Perl доступна в репозитории . Дальше будут просто некоторые подробности.
Про LostFilm
Из готовых решений мне показалась разумной только та часть, которая касалась подкладывания скачанного torrent-файла в директорию, из которой торрент-клиент автоматически начинает скачивание. Эту парадигму я реализовал и у себя. В качестве клиента у меня работает transmission-daemon (который в настройке гораздо удобнее того же deluged). В частности, забор новых торрент-файлов из директории настраивается в файле settings.json так:
"watch-dir": "/data/torrents",
"watch-dir-enabled": true
Всё остальное пришлось забраковать. Первым улетела в корзину идея с парсингом RSS. Во-первых, RSS-лента сильно запаздывает – бывает, что серия уже полчаса как светится на главной странице, а в ленте её всё ещё нет. Во-вторых, из RSS-ленты никак не получить ссылку на торрент-файл, только ссылку на страницу самой серии, откуда уже можно двигаться дальше, то есть увеличивается число необходимых запросов. В общем, парсим прямо страницу с новинками. Найдя новую серию, находим три магических числа: id сериала, номер сезона и номер серии. С этими числами можно при наличии сессионной куки заполучить уже торрент-файл.