как пропатчить #anime под FreeBSD

Mar 17, 2010 02:30

... или высокотехнологичный мир анимешника.

Решил написать о том, как я "сделал себе удобно". Цикл обширный, так что писать буду в несколько статей.

Итак, часть первая:

Как мы качаем аниме?

Аниме появляется (самозарождается) на трекерах. Трекеры обладают разной степенью удобств, но большинство из них предоставляет rss-фид для новых релизов. К сожалению, не все такие фиды имеют прямые линки на torrent-файлы, некоторые из них ссылаются на html, из которого уже есть линк на торрент.

Второй проблемой является то, что один и тот же файл может образоваться на нескольких трекерах независимо, причём, не факт что одновременно, а не с интервалом в пару дней.

Итак, как с этим работать?

Вся конструкция разделена на две полностью независимые составляющие: качатель rss и торрентов из них, и торрент-клиент.

В качестве интерфейса между первым и вторым выбран "pickup folder" - каталог, в который складываются все торренты, которые нужно скачать.

Процесс скачивания выглядит следующим образом: программа rsstail выводит список записей из rss. Wget качает по линкам из этих записей как торрент-файлы, так и страницы с рекурсией уровня 1 (я пока не видел более глубокой рекурсии). Из оставшегося сохраняется только *.torrent-файлы. Скачивается это всё во временный каталог.

Маленькая хитрость с некоторыми трекерами: они отдают контент не в виде нормальных страничек, а с заголовком content-disposition, к счастью, wget это можно заставить понимать.

Далее, после того, как скачались файлы, удаляется всё лишнее (не торренты), проводится фильтрация торрентов (по ключевым словам). В результате мы имеем только нужные нам торренты, правда, возможно, с повторами.

Для переноса из временного каталога в pickup используется простенькая программа на питоне - singlemv, которая "помнит" все файлы, которые переносила раньше, и не переносит их второй раз.

Всё это объеденено в скрипт, который запускается из крона раз в час.

#!/bin/sh
set -e
cd /srv/deluge/unsorted-torrents
rsstail -u http://tokyotosho.info/rss.php?filter=1 -N1l|grep http|wget -i - -r -l 1 -nd --content-disposition -A torrent >/dev/null 2>/dev/null
rsstail -u http://www.nyaatorrents.org/?page=rss\&catid=1\&subcat=37 -N1l|grep http|wget -i - -r -l 1 -nd --content-disposition -A torrent >/dev/null 2>/dev/null
rsstail -u http://feeds.feedburner.com/baka-updates/wKDI -N1l|grep http|wget -i - -r -l 1 -nd --content-disposition -A torrent >/dev/null 2>/dev/null
find . -iname "*\[C-W\]*" -print0|xargs -0 rm 2>/dev/null
find . -iname "*pokemon*" -print0|xargs -0 rm 2>/dev/null
find . -iname "*\[PSP\]*" -print0|xargs -0 rm 2>/dev/null
find . -name "\[i[PT]\-*" -print0|xargs -0 rm 2>/dev/null
find . -iname "*\.rar*" -print0|xargs -0 rm 2>/dev/null
find . -iname "*\.ass*" -print0|xargs -0 rm 2>/dev/null
/usr/local/bin/singlemv /srv/deluge/moved_torrents.singlemv *.torrent /srv/deluge/torrents-queue
rm -- *

Обратите внимание на последнюю команду - наученный горьким опытом, я всегда перед rm в скриптах добавляю -- перед звёздочкой, иначе получается фигня, когда файлы называются типа -R --all и т.д.

Из каталога /srv/deluge/torrents-queue торрент-файлы поднимает deluge. В принципе, это может быть практически любой торрент-клиент - от мюторрента до rtorrent (кому что удобнее). Мне удобнее делюга, потому что у неё приятный интерфейс (иногда торренты качаются руками).

Настройка deluge, кстати, отдельная песня. Итак, структура каталогов:

/srv/anime - место хранения аниме
/srv/deluge - отдельный раздел для временных файлов deluge.

Включает в себя /srv/deluge/unsorted-torrents (временный файл для процитированного скрипта)
/srv/deluge/torrents-queue (pickup каталог для торрентов) и /srv/deluge/temporary-download - отдельный каталог для временных файлов deluge. Зачем на отдельном разделе? Дело в том, что торренты сильно фрагментируются в процессе скачивания (даже full allocation не помогает). Deluge настроен перемещать скачанное из temporary download в /srv/anime/anime/in, за счёт чего все файлы получаются не фрагментированными (в пределах разумного).

Далее, deluge настроен удалять файлы из собственного списка торрентов, как только закончится сидинг. Если бы не singlemv, то появление после этого того же самого торрента привело бы к повторному сидингу (т.к. файл уже скачан), что в цикле способно исчерпать список пиров и осложнить очистку очереди. Подробнее про это я писал тут.

Собственно, всё.

Описание выглядит жутковато, но система работает как часы уже третий месяц без каких-либо изменений. Особая прелесть ситуации в том, что даже если я закрываю deluge для каких-то надобностей, то rss продолжают качаться (т.е. в скачанном не появляется пропусков).

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

(в следующем выпуске: как это хранится).

animelife, singlemv, anime, linux

Previous post Next post
Up