Предисловие (дано)
- Есть такой замечательный ресурс - Lostfilm.tv, где можно скачать целую пачку отличных релизов сериалов. За что ребятам спасибо!
- Есть любимая жена, которая смотрит оттуда сериалы
- Каждый день она заглядывает туда в надежде, что выложили новую серию
- Есть NAS (Network Attached Storage), работающий под управлением CentOS 6.5
- И есть я, который любит экономить время за счёт компьютеров =)
Итак, поехали
1. Transmission должен быть установлен
Детально описывать здесь это я не буду, вот пара ссылок, которыми я пользовался:- http://www.ndchost.com/wiki/install-transmissionbt-centos6
- https://ramses2000.net/2013/03/04/transmission-daemon-install-20130304/
ВАЖНО
- Чтобы установить из YUM нужно, чтобы репозиторий EPEL был добавлен, я его добавлял давно по другим гайдам, но в ссылках выше что-то об этом есть.
- Перед редактированием конфигурации "/var/lib/transmission/.config/transmission/settings.json" убедитесь, что демон остановлен (service transmission-daemon stop), иначе затрёт ваши правки
- Капитаню, но не забудьте в iptables открыть порты для GUI и для входящих соединений. У меня это сделано так:
-A INPUT -s 10.9.10.0/24 -m state --state NEW -m tcp -p tcp --dport 9091 -j ACCEPT
-A INPUT -i ppp0 -m state --state NEW -m tcp -p tcp --dport 51413 -j ACCEPT
2. Создаём скрипт для проверки новых серий
Я его положил в /opt/lostfilm/lostfilm.shПока создавал скрипт, вдохновлялся:
- http://yvision.kz/post/183688
- http://habrahabr.ru/post/87042/
- http://ajc.su/web-razrabotka/parser-rss-na-bash-dlya-lostfilm-tv-transmission-sqlite-mkvtools/
#!/bin/bash
#exec &>> /var/log/lostfilm.$(date +%F).log
exec &>> /var/log/lostfilm.log
echo -e "==========================================================================="
echo `date` checking torrents
# === Prepare dirs
cd /opt/lostfilm/
source lostfilm.conf
TMP1=tmp.rss
TMP2=tmp.mkv_torrents
TMP3=tmp.interested
TMP4=tmp.toqueue
rm -f tmp.*
# === Качаем RSS
wget -O $TMP1 $lfrss
# === Отбираем файлы с нужным качеством
cat $TMP1 | grep -ioe 'http.*torrent'| grep -ie $INTERESTED_QUALITY > $TMP2
echo -e '\nTorrents found (filtered by quality):' ; cat $TMP2
# === Отбираем только интересные нкам сериалы
cat $TMP2 | grep -ie $INTERESTED_IN_REGEXP > $TMP3
echo -e "\nInterested torrents:" ; cat $TMP3
# === проверяем, какие уже скачаны, а какие нет
SEEN=torrents.seen
touch $SEEN
rm -f $TMP4
touch $TMP4
while read -r l; do
tor=`echo $l | cut -d';' -f2`
echo Considering torrent: $tor
isSeen=`cat $SEEN |grep $tor`
if [ ! $isSeen ]
then
echo Ok, will download: $tor
echo $tor >>$TMP4
echo $tor >>$SEEN
/usr/bin/wget -nc -O "$tor" --referer="$lfrss" --user-agent="$ua" --no-cookies --header="$lfcookie" "$l"
mv "$tor" "$TRANSMISSION_WATCH_DIR/"
else
echo Already have: $tor
fi
done <$TMP3
echo -e "\nScheduled torrents:" ; cat $TMP4
# === Sending email with results if any
if [ -s $TMP4 ]
then
echo Mail notification to be sent
cat $TMP4 |/opt/smail.sh $EMAIL_NOTIFICATION_TO "Новые серии с Lostfilm поставлены на скачивание"
else
echo No torrents queued, no email notification
fi
rm -f tmp.*
echo Checking torrents completed at `date`
echo -e "===========================================================================\n\n"
И отдельно конфиг файл /opt/lostfilm/lostfilm.conf
INTERESTED_IN_REGEXP='\(Extant\|Defiance\|Marvel\|Under\|Game\|Falling\)'
INTERESTED_QUALITY=mkv
lfcookie="Cookie: uid=UID; pass=PASS; usess=USESS; phpbb2mysql_data=DATA"
TRANSMISSION_WATCH_DIR=/var/nas/z_queue
EMAIL_NOTIFICATION_TO=someone1@gmail.com,someone2@gmail.com
lfrss="http://www.lostfilm.tv/rssdd.xml"
ua="Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.50"
Итак, по маркерам
- "Sending email with results if any" - захотите вы сделать отправку почты или нет - дело вкуса. В итоге я решил воспользоваться командой mailx (обернул её в скрипт smail.sh, чтобы там инкапсулировать авторизацию на smtp сервере)
- "\(Extant\|Defiance\|Marvel\|Under\|Game\|Falling\)" - простенькая регулярка для отбора торентов по первому слову в названии файла. Здесь нужно перечислить ваши сериалы
- "mkv" - я выбрал mkv, но там же есть ещё avi и mp4 - решать вам (разница по сути в качестве, а в итоге и в размере файла)
- "UID", "PASS", "DATA" - значения эти берём из куков браузера. Вариантов, как это сделать много, уверен вы знаете как, только сначала залогиньтесь.
- "USESS" - нужно взять из профиля на lostfilm.tv. Ну вот вы зарегистрировались, вошли и кликайте на ссылку "ПРОФИЛЬ" и там внизу будет маленьким шрифтом что-то вроде usess=84802e442ef4c9941a6455d633471261
- "/var/nas/z_queue" - предполагается, что сюда смотрит transmission-daemon. Речь о вот этих конфигурационных параметрах:
"watch-dir": "/var/nas/z_queue",
"watch-dir-enabled": true " someone1@gmail.com,someone2@gmail.com" - если использовать отправку email, то предполагается здесь через запятую указать получателей
3. Добавляем задачу в cron
Никакого rocket since, просто добавил строку в /etc/crontab*/15 * * * * root /opt/lostfilm/lostfilm.sh
4. Грабли
1. Отправка почты (чтение тела письма)
Оказалось, что/opt/smail.sh "someone@gmail.com" "Новые серии с Lostfilm поставлены на скачивание" <$TMP4
...и...
cat $TMP4 |/opt/smail.sh "someone@gmail.com" "Новые серии с Lostfilm поставлены на скачивание"
...ОЧЕНЬ разные вещи!
Подозреваю, что здесь как-то замешан SELinux, но решил, что я не админ и добить разгадку я не должен.
Анамнез: первый вариант отлично работает (письмо отправляется, тело есть) из командной строки, но не работает (письмо отправляется, тела нет - пустое) из крона. Второй вариант работает и из крона и из командной строки.
2. Отправка почты (gmail)
Я отправлял на gmail и он жёстко резал, обзываясь спамом. Я нашёл несколько вариантов, как отправлять пользуясь smtp сервером gmail, но что-то мне эти варианты не понравились и я нашёл как воспользоваться smtp сервером моего провайдера.Без указания smtp сервера команды mail и mailx отправляют очень непрезентабельные письма.