Pull to refresh

Comments 75

все просто и понятно. спасибо. прикручу на свой медиасервер.
p.s. когда же мне мой сервак пиво и тапочки уже будет подавать? =)
Супер, понравилось больше всего то что это простой скрипт. Не нужно побочного софта, ака флексгет, про которого я где-то месяц назад писал статейку habrahabr.ru/blogs/linux/83367/
Только единственный минус как быть с двойными релизами??

А кстати кто упоминал rtorrent + wtorren… Чисто для справки вы побывали через тот фид тянуть с закрытых ресурсов ??
>Только единственный минус как быть с двойными релизами??
что вы имеете ввиду?
например две одинаковые раздачи он разве не будет тянуть ??
Можно задать более жесткое регулярное выражение чтобы отсеять ненужные раздачи.
Или я не правильно понял вопрос?
Уровень квалификаций читателей хабра очень разный.
Я, например, так и не понял, куда писать этот grep.
Это для Linux?
критикую:
дабы не парсить и не грузить одно и тоже, да и сервер почём зря не дёргать следует записывать значение заголовка Last-Modified и передавать его в заголовке If-Modified-Since
Также сервер может поддерживать ETag.
См. к примеру: fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers/
проверь лостфильмовский рсс:
1. Если новых записей не было — сервер выдаёт 304 Not Modified
2. Иначе — полную ленту РСС.
Некоторые ленты поддерживающие ЕТаги могут возвращать только новые записи в ленте, но это не наш случай.
$ wget -vS www.lostfilm.tv/rssdd.xml
--2010-03-12 01:47:02-- www.lostfilm.tv/rssdd.xml
Преобразование адреса www.lostfilm.tv... 81.29.134.150
Устанавливается соединение с www.lostfilm.tv|81.29.134.150|:80... соединились.
Запрос HTTP послан, ожидание ответа...
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 11 Mar 2010 21:46:57 GMT
Content-Type: text/xml
Content-Length: 17139
Last-Modified: Thu, 11 Mar 2010 18:16:28 GMT
Connection: keep-alive
Keep-Alive: timeout=15
Accept-Ranges: bytes
Длина: 17139 (17K) [text/xml]
Saving to: «rssdd.xml»

100%[=================================================>] 17 139 89,4K/s в 0,2s

2010-03-12 01:47:02 (89,4 KB/s) - «rssdd.xml» saved [17139/17139]

$ wget -vS --header="If-Modified-Since: Thu, 11 Mar 2010 18:16:28 GMT" www.lostfilm.tv/rssdd.xml
--2010-03-12 01:47:11-- www.lostfilm.tv/rssdd.xml
Преобразование адреса www.lostfilm.tv... 81.29.134.150
Устанавливается соединение с www.lostfilm.tv|81.29.134.150|:80... соединились.
Запрос HTTP послан, ожидание ответа...
HTTP/1.1 304 Not Modified
Server: nginx
Date: Thu, 11 Mar 2010 21:47:08 GMT
Last-Modified: Thu, 11 Mar 2010 18:16:28 GMT
Connection: keep-alive
Keep-Alive: timeout=15
2010-03-12 01:47:12 ОШИБКА 304: Not Modified.
Спасибо за идею! Единственный момент, что где-то нужно будет хранить эту дату с которой будем сравнивать — или делать демона или лог вести…
Отлично дополняет мой комент habrahabr.ru/blogs/p2p/87042/#comment_2609116
А я себе для того, чтобы отслеживать и качать обновления сериалов на торрентс.ру, сделал скриптик для гризманки… userscripts.org/scripts/show/68387. Формирую список торрентов, которые периодически обновляются (сериалы обычно выкладывают методом добавления в существующую раздачу), ну и один раз в день ткнуть на ссылочку — проверить весь список на предмет обновления мне не сложно.
В качестве альтернативы приведу flexget ( habrahabr.ru/blogs/linux/83367/ ). Флексгет, например, ведет базу данных и не качает уже скачанные торренты, которые удаляет мой делюж после успешного добавления в список закачиваемых. Здесь как я понял торрент файл будет перекачан если он был удален с диска?

з.ы. За статью спасибо. :)
>В качестве альтернативы приведу flexget
да, пользовался, знаю. но самоцелью было разобраться с grep и сделать все самому :)

>Здесь как я понял торрент файл будет перекачан если он был удален с диска?
Да, именно так. Но я только что специально провел эксперимент: удалил файл из папки слежения и снова его добавил. Transmission при этом не стал заново стартовать загрузку или даже выполнять проверку хеша файлов.
FlexGet удобная и достаточно мощная штука. Сам использую. Так как я не давно начал настраивать сервак-торренто-качалку-фтп-самба-сервер под линем и опыта немного, то стараюсь выбирать наиболее простые варианты )
Отлично! То, что нужно, чтобы полностью облениться ;)
Кстати, если интересно, могу написать статью про настройку медисервера на базе Debin. Имею ввиду LVM для удобной разметки винтов, Samba, сборка последних версий Transmission и/или rTorrent из исходников, подключение веб интерфейсов к последнему, ну и автоматизация закачек… Хотя про это только что уже написал :)
UFO landed and left these words here
Пожалуйста ;)

А статью постараюсь написать. Хоть на хабре уже и мелькали подобные темы, но освещали они лишь ту или иную часть. Хотелось бы объединить и собрать все вместе.
Эх, поднял бы кто вопрос, как автоматизировать закачки из RSS лент не содержащих в себе прямых ссылок на .torrent файлы.
>RSS лент не содержащих в себе прямых ссылок на .torrent файлы
Например? Думаю, этот вопрос тоже решаемый. Хотя нужно разбирать каждый конкретный случай.
Например почти любой другой российский трекер, название которого не Лостфильм и не Новафильм. В RSS ленте которую вы берете с этих ресурсов, уже содержится в новости ссылка на .torrent файл. В 99% случаев остальных трекеров, RSS нам отдает лишь ссылку на тему, которая уже и содержит нужный нам .torrent
На некоторых трекерах очень хочется автоматизировать процесс скачивания, но пока не нахожу как. Пробовал создавать нужный RSS с помощью pipes.yahoo, не получилось.
К сожалению догадаться какой именно трекер вы имеете ввиду не могу, поэтому покажу на примере самого популярного. Для генерации RSS можно воспользоваться следующим конструктором:
xpoft.ru/rutracker.org/generator/
после генерации выбираете «Ссылка на ленту для интеграции в torrent-клиенты»
и аналогичным образом закачиваете файлы с помощью wget (не забываем передать cookies) и grep. Но, после этого на выходе получаем хоть и торрент файлы, но в имени не содержащие ".torrent". После чего командой find находим наши файлы без расширения и переименовываем. После переименования торрент клиент их подхватывает из папки слежения.
Все хорошо, но это не более чем частный случай костыля для самого популярного трекера. Названия не говорил, чтоб за рекламу не приняли(ну к примеру мне рутрекер вовсе не интересен, т.к. не является первоисточником релизов, и пока их там выложат придется изрядно подождать, взять к примеру bigfangroup или kinozal). А хочется способа, который бы можно было применить и в других направлениях.
Только что зарегистрировался на кинозале и посмотрел на их RSS ленту. Действительно интересный случай. Если в общих чертах, то я вижу решение в виде шелл скрипта с таким алгоритмом:

1) из RSS ленты grep'ом фильтруем интересующие нас ссылки. они будут иметь такой вид:
http://kinozal.tv/details.php?id=546387

2) после этого циклом проходим по всем отобранным ссылкам и загружаем их wget'ом тут же передая по конвейеру на grep

3) в grep на переданной страничке выбираем ссылку на торрент флай. ссылка имеет вид
http://kinozal.tv/download.php/546387/Badfinger-Collection.1969-2001.FLAC.CUE.Lossless.torrent

как видно по ссылке, он содержит тот же айди что и в RSS ленте что заметно облегчает поиск

4) закачиваем torrent файл

5) переход к следующей отобранной строке из rss ленты
Я тут на досуге набросал команду для кинозала по описанному выше алгоритму, вот что получилось:

for i in `curl -s http://kinozal.tv/rss.xml | grep -iA 2 'MP3' | grep -ioe 'http.*[0-9]'`; do curl -sb "uid=***; pass=***; countrys=ua" $i | grep -ioe 'download.*\.torrent' | head -1; done

на выходе получается список относительных ссылок на загрузку торрент файлов с кинозала. После этого их лишь остается удобно передать на вход wget задав параметр --base=URL", где вместо URL задается любой нужный домен/префикс.

Из особенностей хочется отметить опцию "-A 2" у grep'a. Дело в том что только по адресу ссылки из RSS ленты узнать название раздачи невозможно, поэтому поиск идет по описанию, а на выход передаются еще и следующие две строки за описанием, где и расположена сама ссылка. Ну а следующим по конвейеру grep'ом из потока отфильтровываются только нужные нам ссылки. И еще один момент, в теме что описывает раздачу на кинозале ссылка на торрент файл встречается два раза, с помощью "head -1" мы оставляем только первую из них

Почему curl? А не знаю, наверно потому, что просто захотелось разобраться и в нем :)
завтра поэксперементирую, а то только подручными средствами на php умею
Как альтернативу можно uTorrent запустить под wine… не комильфо но все же.
Спасибо, вроде ничего революционного, но очень доходчиво и хорошо разъяснено. Ну и плюс самому подобное все время лень сделать, а тут готовый четкий рецепт.
UFO landed and left these words here
Спасибо за ссылку, раньше не находил.
А если по теме, то хотелось сделать все самому и по пути набраться опыта знаний. В результате не только сам понял и разобрался, но и рассказал другим «как» ;)
UFO landed and left these words here
Вот вам и сила командной строки в Linux. Каждая команда делает свое дело.

Описание параметров к командам порадовало. На базе этого можно без проблем сделать другие подобные «следилки».
UFO landed and left these words here
Настройка rTorrent + wtorrent это тема отдельной статьи, там не все так прозрачно на первый взгляд. Хотя пользовался, знаю. Но, лично мне, для rTorrent'a куда больше нравится веб интерфейс rutorrent
Написал ровно такой же скрипт год назад или больше :)

#!/bin/bash

ua=«Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2a1pre) Gecko/20090302 Minefield/3.2a1pre»

cd /home/nebulosa/torrents

#LostFilm.tv
lfrss=«httр://lostfilm.tv/rssdd.xml»
lfshows="(Star.Wars|Heroes|Seeker)"
lfcookie=«Cookie: uid=***; pass=***; phpbb2mysql_data=***»
lfurl=$(wget -t1 --connect-timeout=1 -q $lfrss -O- | tac | egrep -o «http://[^ ]+\.torrent» | egrep $lfshows)

for k in $lfurl
do
if [! -e new/$(basename $k) ]
then
wget -q --referer="$lfrss" --user-agent="$ua" --no-cookies --header="$lfcookie" $k
mv -t new $(basename $k)
fi
done

Логика работы немножко помягче для сервера Лостфильма… Был момент когда lostfilm был перегружен, поэтому чтобы не порождать новые коннекты прописал опции у wget опции -t1 --connect-timeout=1 и проверку на существования файлов, чтобы wget не дергал каждый раз сервер.
Когда торрентов накопится больше чем 30 штук или когда сервер будет загружен — оцените эти ухищрения :)
Спасибо за комментарий, идея с проверкой существования файлов хороша!

з.ы. а символ точки вот тут lfshows="(Star.Wars|Heroes|Seeker)" воспримется именно как точка или как «любой символ»?
Конечно же «любой символ», но ложных срабатываний пока не было, потому экранить лень
что то я попробовал, а получил:
egrep: Неверное регулярное выражение
а еще можно поставить rutorrent+плагин rss
меньше велосипедов и больше функционала
а я что то никак не совладаю со скриптом, не пойму что не так
wget -qO — www.lostfilm.tv/rssdd.xml | grep -ioe 'http.*torrent' | grep -ie '[0-9]\{4\}/\(house\|heroes\|star.wars\)' | wget -nc -qi — -P /home/share/torrent/torrent_auto_load --load-cookies=/home/share/torrent/cookies.txt
в итоге получаю пустой торрент :(
ну я тоже к этому склоняюсь, но там ошибаться вродь особо негде
.lostfilm.tv TRUE / FALSE 2147483643 pass пароль
.lostfilm.tv TRUE / FALSE 2147483643 uid логин
как в инструкции
Логин и пароль задаются не в явном виде. Откройте в своем браузере просмотр cookies и скопируйте от туда значения ;)
наверное тогда это стоит как то пометить в самой статье, для таких как я :)
А если лень заморачиваться, то, к примеру, для FireFox есть специальный плагин которые экспортирует cookies в файл, который можно сразу же передать wget'у.
да нет, попробовал занести корректные данные из кукисов браузера, на общую картину это так и не повлияло, всё-равно пустой торрент
Старый файл перед этим удалили? Возможно из-за этого wget не стал его перезагружать.
Только что запустил у себя:

wget -qO - http://www.lostfilm.tv/rssdd.xml | grep -ioe 'http.*torrent' | grep -ie '[0-9]\{4\}/\(house\|heroes\|star.wars\)' | wget -nc -qi - -P ~/ --load-cookies=cookies.txt

закачало торрент файл Хауса.

Еще раз перепроверьте команду и cookies. Возможно при копировании/вставке что-то потерялось
а если передавать cookies не из файла, напрямую через зголовок GET запроса:
wget -nc -qi - -P ~/ --header "Cookie: uid=***; pass=***"
?
вот так другое дело, всё работает
странно, путь до файла был указан верно, права выдал максимальные, файл по шаблону… мистика :(
забыл самое главное — спасибо за помощь! :)
у меня и так не работает… пустой файлик создаеться…
wget -qO — www.lostfilm.tv/rssdd.xml | grep -ioe 'http.*torrent' | grep -ie '[0-9]\{4\}/\(lost\|house\)' | wget -nc -qi — -P /usr/local/www/apache22/data/bt/downloads/.torrents/ --load-cookies=/usr/local/www/parser/cookies.txt

# cat /usr/local/www/parser/cookies.txt
.lostfilm.tv TRUE / FALSE 2147483643 pass blablabla
.lostfilm.tv TRUE / FALSE 2147483643 uid iru

Логин и пароль не передаются в открытом виде. В качестве uid выступает набор цифр, а в качестве пароля длинная строка вида «6b2e4f7f...».

Переписать эти значения можно из окошка просмотра cookies в браузере или, к примеру, воспользоваться плагином к FireFox.
# cat /usr/local/www/parser/cookies.txt
.lostfilm.tv TRUE / FALSE 2147483643 pass 1326b7…
.lostfilm.tv TRUE / FALSE 2147483643 uid 903094
# wget -qO — www.lostfilm.tv/rssdd.xml | grep -ioe 'http.*torrent' | grep -ie '[0-9]\{4\}/\(lost\|house\)' | wget -nc -qi — -P /usr/local/www/apache22/data/bt/downloads/.torrents/ --load-cookies=/usr/local/www/parser/cookies.txt
# ll | grep root
-rw-r--r-- 1 root www 0 Mar 13 18:13 Lost.s06e07.rus.PROPER.LostFilm.TV.torrent
всеравно пустой фаил
хм… Попробуйте перед запуском команды вначале удалить пустой файл. Еще можно попробовать вариант передачей cookies не из файла, а напрямую через зголовок GET запроса:
wget -nc -qi - -P ~/ --header "Cookie: uid=***; pass=***"
А если комп был выключен и в рсс накопилось несколько новых серий разных сериалов, то будет ли этот скрипт скачивать все по очереди или скачает только первое что найдет? Если так то я бы отдавал все что он напарсит в файлик и потом качал бы торренты с ключиком -I urls.txt, ну и наверное бы удалял этот файлик после отработки скрипта, также было бы интересно иметь лог скачки, который например отправлялся бы на почту, чтобы сидя на работе сразу видеть что я сегодня вечером смогу посмотреть дома.
>А если комп был выключен и в рсс накопилось несколько новых серий разных сериалов, то будет ли этот скрипт скачивать все по очереди или скачает только первое что найдет?
Будет загружено все новое.

>также было бы интересно иметь лог скачки, который например отправлялся бы на почту
Уже думаю над реализацией ;)
кстати, если интересно, можно замутить один большой скрипт, который будет определять сайт, генерить куки, оповещать о cкаченном и т.д, меня просто эта тема заинтересовала, в каком-нибудь гуглокоде замутить проект и поковырять вместе, если интересно пиши на bezgubov@gmail.com
Будет загружено только то новое что все еще останется в rss-ленте.
А что-то может уже и выпасть за нее(там 5 сериалов, каждый из которых в 3 качествах, итого = 15 записей).
Как только выложили шестой сериал, самый старый из ленты вылетает. И так можно пропустить.
Жаль, что это не решается никак кроме запуска на отдельной машине, которая будет вечно поднята.
И да, я видел дату :)
Only those users with full accounts are able to leave comments. Log in, please.