Апофеоз ЛЕНИ, или как качать новые серии любимых сериалов с Лостфильма автоматически
Я являюсь гордым обладателем сетевой файлопомойки Netgear NV+.
А еще я сисадмин в душе.... И наверно как все сисадмины очень ленивый ;) - ну разумеется в хорошем смысле этого слова.
А еще я люблю иногда посматривать сериалы, которые переводит небезызвестный Lostfilm.
И захотелось мне как то - а почему бы моей файлопомойке - самой не скачивать новые серии оттуда? Тем более там линукс стоит - а уж с линуксом то мы что угодно можем почти накрутить.
Я являюсь гордым обладателем сетевой файлопомойки Netgear NV+.
А еще я сисадмин в душе.... И наверно как все сисадмины очень ленивый ;) - ну разумеется в хорошем смысле этого слова.
А еще я люблю иногда посматривать сериалы, которые переводит небезызвестный Lostfilm.
И захотелось мне как то - а почему бы моей файлопомойке - самой не скачивать новые серии оттуда? Тем более там линукс стоит - а уж с линуксом то мы что угодно можем почти накрутить.
Сказано - сделано. В общем сейчас я имеею такую картину - выходит новая серия любимого сериала на лостфильме - и она почти сразу же закачивается файлопомойкой. Ничего делать не надо - приходишь после работы, включаешь телевизор с медиаплеером (у меня стоит старенький POPCORN HOUR A110, который проигрывает фильмы расположенные на Netgear'е по сети) - и оп-па на, новая серия лежит уже готовая к просмотру.
Периодически только надо заходить в Transmission да чистить торренты, да вручную добавлять в скрипт новые сериалы (пока не сделал добаление через веб-рожу, но в принципе - можно. Останавливает только ЛЕНЬ :) )
Вообще мне лень было даже писать про эту систему статейку - но уж очень хотелось похвастаться, да и коллегам на работе уж очень она понравилась, думаю может еще кто-нибудь себе такое же сделает.
Итак подробности.
Имеем:
Сетевая файлопомойка Netgear NV+ установленная, настроенная, заботливо проапгрейженная со стандартных 256мбайт оперативки до 1Гб и замененным вентилятором чтоб меньше шумел. На ней уже настроен ssh (я захожу сразу на железку и скрипты правлю там), есть perl, поставлен и настроен Transmission - именно он и будет скачивать за нас торренты. В коробке есть wget и cron.
Есть сайт Лостфильма, где выкладывают новые серии сериалов. Тут я пожалуй опущу свои долгие ковыряния и дебаги - расскажу сразу как я забираю нужные торренты. У Лостфильма есть rss-ка, где выкладываются последние релизы. Скрипт на перле выкачивает эту rss-ку, отбирает из нее только HD-релизы (я гурман :) ) и только тех сериалов что я смотрю (а список внушительный). Затем скачивает их - причем скачивает их с моей учетной записью на лосте, подставляя нужные параметры в куках. Затем новые торренты, если они еще не добавлялись в очередь, копирует в т.н. watch-каталог Transmission'а - т.е. каталог, в котором Transmission сам ищет новые торренты и если находит - запускает на скачку. Ну и после того как файл скачается Transmission переносит файл из временного каталога в основной, к которому уже цепляется медиа-плеер и собственно остается только его посмотреть.
Поскольку очередь transmission'а сама не чистится (по крайней мере я даже не искал эту фичу - проклятая лень) - надо периодически заходить и удалять готовые торренты. Также надо вручную добавлять в скрипт новые сериалы которые появляются на лосте если стало интересно. Привожу сам скрипт, по возможности с комментариями Download file dwnld_lostfilm.tv.perl
#!/usr/bin/perl #Это временная папка для закачивания rss-ки и торрентов $dir="/c/media/Lostfilm.TV"; #Это каталог за которым наблюдает Transmisiion $watch_dir="/c/media/BitTorrent/sources"; system("wget 'http://www.lostfilm.tv/rssdd.xml' -O$dir/sources/tmp_rss 2>>/dev/null 1>>/dev/null"); $found = 0; open (FH, $dir."/sources/tmp_rss"); while($line=<FH>) { if( $line =~ /\<link\>/ ) { #Забираем только HD ;) парсю <link> можно наверно и красивее - но мне хватает if(( $line =~ /720p/ )||( $line =~ /\.HD\./ )) { ($v1, $v2) = split />/, $line; ($url, $v3) = split /</, $v2; ($u1,$url_tor) = split /\;/, $url; $url =~ s/amp\;// ; # дебаг ;) $url - полный урл торрента, $url_tor - название файла, используем потом чтобы отфильтровать нужные сериалы print $url_tor; print "\n"; #тут длинный список сериалов которые смотрим if ( ( $url_tor =~ /Homeland/ ) || ( $url_tor =~ /Endgame/ ) || ( $url_tor =~ /Eureka/ ) || ( $url_tor =~ /Dexter/ ) || ( $url_tor =~ /Warehouse/ ) || ( $url_tor =~ /Borgias/ ) || ( $url_tor =~ /Boardwalk/ ) || ( $url_tor =~ /Camelot/ ) || ( $url_tor =~ /Castle/ ) || ( $url_tor =~ /Secret\.Circle/ ) || ( $url_tor =~ /Grimm/ ) || ( $url_tor =~ /American\.Horror/ ) || ( $url_tor =~ /Fringe/ ) || ( $url_tor =~ /Leverage/ ) || ( $url_tor =~ /Eagleheart/ ) || ( $url_tor =~ /Stargate\.Universe/ ) || ( $url_tor =~ /The\.Cape/ ) || ( $url_tor =~ /Star\.Wars\.The\.Clone\.War/ ) || ( $url_tor =~ /Interest/ ) || ( $url_tor =~ /Mildred\.Pier/ ) || ( $url_tor =~ /Game\.of\.Thrones/ ) || ( $url_tor =~ /Sons\.of\.Anarchy/ ) || ( $url_tor =~ /Falling\.Skies/ ) || ( $url_tor =~ /Terra\.Nova/ ) || ( $url_tor =~ /Breaking\.Bad/ ) || ( $url_tor =~ /The\.Killing/ ) || ( $url_tor =~ /Kennedys/ ) || ( $url_tor =~ /Alphas/ ) || ( $url_tor =~ /Haven/ ) || ( $url_tor =~ /Sherlock/ ) || ( $url_tor =~ /Hell\.on\.Wheels/ ) || ( $url_tor =~ /Walking\.Dead/ ) || ( $url_tor =~ /Californication/ ) || ( $url_tor =~ /Alcatraz/ ) || ( $url_tor =~ /Spartacus/ ) || ( $url_tor =~ /Touch/ ) || ( $url_tor =~ /Magic\.City/ ) || ( $url_tor =~ /Falling\.Skies/ ) || ( $url_tor =~ /Continuum/ ) || ( $url_tor =~ /Arrow/ ) || ( $url_tor =~ /Revolution/ ) || ( $url_tor =~ /Anger\.Management/ ) || ( $url_tor =~ /Last\.Resort/ ) || ( $url_tor =~ /The\.Newsroom/ ) || ( $url_tor =~ /Outcasts/ ) ) { if (! ( -f "$watch_dir/$url_tor.added" )) # Когда Transmission добавляет torrent в очередь он к имени файла добавляет .added, соответственно если уже файл есть в очереди - смысла его заново качать - нет { system("wget -nc -P $dir/sources -a$dir/sources/wget_lf.log -O$dir/sources/$url_tor --header \"Cookie: uid=777; pass=777888999aaa000111222333444; usess=fff3335555ccc444666333666\" '$url'"); # а вот тут самое интересное - пояснения даются ниже } } } } } # собственно перемещаем из временного каталога в watch-каталог для Transmission'а, причем только *.torrent файлы (ибо других он там и не ждет) system("mv $dir/sources/*.torrent $watch_dir");
У Transmission'а в файлике setting.json (у меня это /c/addons-config/Transmission/transmission-daemon/settings.json) надо обратить внимание на следующие параметры
{ ... "download-dir": "/c/download", ... "incomplete-dir": "/c/media/BitTorrent/Incomplete", "incomplete-dir-enabled": true, ... "watch-dir": "/c/media/BitTorrent/sources/", "watch-dir-enabled": true }
теперь подробнее про строчку в скрипте
system("wget -nc -P $dir/sources -a$dir/sources/wget_lf.log -O$dir/sources/$url_tor --header \"Cookie: uid=777; pass=777888999aaa000111222333444; usess=fff3335555ccc444666333666\" '$url'");
вот эти три параметра uid, pass, usess - идентифицируют вас для Лостфильма. Здесь разумеется указаны "левые", вам надо подставить свои. Маленький мануальчик с картинками как их найти например в браузере Google Chrome
Разумеется первым делом надо зарегистрироваться на Лостфильме :)
Заходим в свой профиль на лосте - http://www.lostfilm.tv/my.php
Так находим “usess”
Потом заходим настройки хрома, в самом низу тыкаем в «Показать допольнительные настройки»
Выбираем настройки контента
Выбираем куки и вводим в поиске lostfilm.tv
и смотрим pass , потом точно также uid
Теперь этот скрипт надо поставить в крон. На своем Netgear NV+ я сделал так: в каталоге /etc/cron.d создал файл download_lostfilm следующего содержания
# /etc/cron.d/download_lostfilm: crontab fragment for lostfilm 45 * * * * root /root/dwnld_lostfilm.tv.pl &>/dev/null
т.е. запускается каждый час, в 45 минут. Сам скрипт положил соответственно под именем /root/dwnld_lostfilm.tv.pl
Что еще можно сделать (и возможно сделаю, когда преодолею ЛЕНЬ :) )
1. Список интересуемых сериалов вынести в отдельный файл - некий конфиг. Который будет можно отредактировать через веброжу (Netgear NV+ вполне позволяет php со всеми вытекающими)
2. Записи в этом конфиге будут хранится в виде - шаблон_поиска_имени : каталог куда нужно будет потом раскидывать файлы - чтоб каждый сериал в своей папочке
3. Раскиданные серии выкладывать в отдельную папочку симлинками - чтобы в этой папочке в одном месте были собраны все последние серии всех сериалов
Кстати по поводу пункта 3.
Есть просто у меня уже такая папочка куда складываются симлинками все новоскаченные фильмы, мультики и т.п. на файлопомойке выглядит так.
т.е. дата создания - название фильма. В подкаталоге LAST еще и самый самый "свежачок"
А вот скрипт который делает такие симлинки Download file create_symlink.bash
#!/bin/sh IFS=$'\n'; rm /c/download/##New/*.mkv rm /c/download/##New/*.avi rm /c/download/##New/Last/*.mkv rm /c/download/##New/Last/*.avi rm /c/download/##New/Serials/*.mkv rm /c/download/##New/Serials/*.avi for file in `find /c/download/#Films/*.avi \ /c/download/#Films/*.mkv \ /c/download/#Films_HDTV/*.avi \ /c/download/#Films_HDTV/*.mkv \ /c/download/#Мультики/*.avi \ /c/download/#Мультики/*.mkv \ -mtime +0 -mtime -120`; do filename=`basename "$file"`; day=`stat $file | grep "Change" | awk '{ print $2 }'`; # echo "$filename" if [ ! -f "/c/download/##New/$day $filename" ]; then ln -s "$file" "/c/download/##New/$day $filename" fi done for file in `find /c/download/#Films/*.avi \ /c/download/#Films/*.mkv \ /c/download/#Films_HDTV/*.avi \ /c/download/#Films_HDTV/*.mkv \ /c/download/#Мультики/*.avi \ /c/download/#Мультики/*.mkv \ -mtime +0 -mtime -30`; do filename=`basename "$file"`; day=`stat $file | grep "Change" | awk '{ print $2 }'`; # echo "$day - $filename"; if [ ! -f "/c/download/##New/Last/$day $filename" ]; then ln -s "$file" "/c/download/##New/Last/$day $filename" fi done for file in `find /c/download/#Serials_HDTV/*/*.avi \ /c/download/#Serials_HDTV/*/*.mkv \ -mtime +0 -mtime -30`; do filename=`basename "$file"`; day=`stat $file | grep "Change" | awk '{ print $2 }'`; # echo "$day - $filename"; if [ ! -f "/c/download/##New/Serials/$filename" ]; then ln -s "$file" "/c/download/##New/Serials/$filename" fi done
сканирует определенные каталоги и делает симлинки если файл не старше 120 дней, и в подкаталог Last если не старше 30 дней. А вот в кроне я его запускаю только раз в день - в 5 утра (это на случай чтоб не убился симлинк когда я этот файл смотрю на медиаплеере :) )
Ну вот собственно и все. Спасибо за то что не ЛЕНЬ было дочитать до конца :)