Comments 75
спрашивайте, критикуйте… :)
все просто и понятно. спасибо. прикручу на свой медиасервер.
p.s. когда же мне мой сервак пиво и тапочки уже будет подавать? =)
p.s. когда же мне мой сервак пиво и тапочки уже будет подавать? =)
Супер, понравилось больше всего то что это простой скрипт. Не нужно побочного софта, ака флексгет, про которого я где-то месяц назад писал статейку habrahabr.ru/blogs/linux/83367/
Только единственный минус как быть с двойными релизами??
А кстати кто упоминал rtorrent + wtorren… Чисто для справки вы побывали через тот фид тянуть с закрытых ресурсов ??
Только единственный минус как быть с двойными релизами??
А кстати кто упоминал rtorrent + wtorren… Чисто для справки вы побывали через тот фид тянуть с закрытых ресурсов ??
Уровень квалификаций читателей хабра очень разный.
Я, например, так и не понял, куда писать этот grep.
Это для Linux?
Я, например, так и не понял, куда писать этот grep.
Это для Linux?
критикую:
дабы не парсить и не грузить одно и тоже, да и сервер почём зря не дёргать следует записывать значение заголовка Last-Modified и передавать его в заголовке If-Modified-Since
Также сервер может поддерживать ETag.
См. к примеру: fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers/
дабы не парсить и не грузить одно и тоже, да и сервер почём зря не дёргать следует записывать значение заголовка Last-Modified и передавать его в заголовке If-Modified-Since
Также сервер может поддерживать ETag.
См. к примеру: fishbowl.pastiche.org/2002/10/21/http_conditional_get_for_rss_hackers/
проверь лостфильмовский рсс:
1. Если новых записей не было — сервер выдаёт 304 Not Modified
2. Иначе — полную ленту РСС.
Некоторые ленты поддерживающие ЕТаги могут возвращать только новые записи в ленте, но это не наш случай.
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
Отлично дополняет мой комент habrahabr.ru/blogs/p2p/87042/#comment_2609116
А я себе для того, чтобы отслеживать и качать обновления сериалов на торрентс.ру, сделал скриптик для гризманки… userscripts.org/scripts/show/68387. Формирую список торрентов, которые периодически обновляются (сериалы обычно выкладывают методом добавления в существующую раздачу), ну и один раз в день ткнуть на ссылочку — проверить весь список на предмет обновления мне не сложно.
В качестве альтернативы приведу flexget ( habrahabr.ru/blogs/linux/83367/ ). Флексгет, например, ведет базу данных и не качает уже скачанные торренты, которые удаляет мой делюж после успешного добавления в список закачиваемых. Здесь как я понял торрент файл будет перекачан если он был удален с диска?
з.ы. За статью спасибо. :)
з.ы. За статью спасибо. :)
>В качестве альтернативы приведу flexget
да, пользовался, знаю. но самоцелью было разобраться с grep и сделать все самому :)
>Здесь как я понял торрент файл будет перекачан если он был удален с диска?
Да, именно так. Но я только что специально провел эксперимент: удалил файл из папки слежения и снова его добавил. Transmission при этом не стал заново стартовать загрузку или даже выполнять проверку хеша файлов.
да, пользовался, знаю. но самоцелью было разобраться с grep и сделать все самому :)
>Здесь как я понял торрент файл будет перекачан если он был удален с диска?
Да, именно так. Но я только что специально провел эксперимент: удалил файл из папки слежения и снова его добавил. Transmission при этом не стал заново стартовать загрузку или даже выполнять проверку хеша файлов.
на здоровье ;)
FlexGet удобная и достаточно мощная штука. Сам использую. Так как я не давно начал настраивать сервак-торренто-качалку-фтп-самба-сервер под линем и опыта немного, то стараюсь выбирать наиболее простые варианты )
Отлично! То, что нужно, чтобы полностью облениться ;)
Кстати, если интересно, могу написать статью про настройку медисервера на базе Debin. Имею ввиду LVM для удобной разметки винтов, Samba, сборка последних версий Transmission и/или rTorrent из исходников, подключение веб интерфейсов к последнему, ну и автоматизация закачек… Хотя про это только что уже написал :)
Пожалуйста ;)
А статью постараюсь написать. Хоть на хабре уже и мелькали подобные темы, но освещали они лишь ту или иную часть. Хотелось бы объединить и собрать все вместе.
А статью постараюсь написать. Хоть на хабре уже и мелькали подобные темы, но освещали они лишь ту или иную часть. Хотелось бы объединить и собрать все вместе.
Начинаю выполнять задуманное. Только что выложил пост про сборку и настройку Transmission:
labinskiy.habrahabr.ru/blog/87287/
labinskiy.habrahabr.ru/blog/87287/
Еще один пост готов, на этот раз про rTorrent:
habrahabr.ru/blogs/p2p/88405/
habrahabr.ru/blogs/p2p/88405/
Эх, поднял бы кто вопрос, как автоматизировать закачки из RSS лент не содержащих в себе прямых ссылок на .torrent файлы.
>RSS лент не содержащих в себе прямых ссылок на .torrent файлы
Например? Думаю, этот вопрос тоже решаемый. Хотя нужно разбирать каждый конкретный случай.
Например? Думаю, этот вопрос тоже решаемый. Хотя нужно разбирать каждый конкретный случай.
Например почти любой другой российский трекер, название которого не Лостфильм и не Новафильм. В RSS ленте которую вы берете с этих ресурсов, уже содержится в новости ссылка на .torrent файл. В 99% случаев остальных трекеров, RSS нам отдает лишь ссылку на тему, которая уже и содержит нужный нам .torrent
На некоторых трекерах очень хочется автоматизировать процесс скачивания, но пока не нахожу как. Пробовал создавать нужный RSS с помощью pipes.yahoo, не получилось.
На некоторых трекерах очень хочется автоматизировать процесс скачивания, но пока не нахожу как. Пробовал создавать нужный RSS с помощью pipes.yahoo, не получилось.
К сожалению догадаться какой именно трекер вы имеете ввиду не могу, поэтому покажу на примере самого популярного. Для генерации RSS можно воспользоваться следующим конструктором:
xpoft.ru/rutracker.org/generator/
после генерации выбираете «Ссылка на ленту для интеграции в torrent-клиенты»
и аналогичным образом закачиваете файлы с помощью wget (не забываем передать cookies) и grep. Но, после этого на выходе получаем хоть и торрент файлы, но в имени не содержащие ".torrent". После чего командой find находим наши файлы без расширения и переименовываем. После переименования торрент клиент их подхватывает из папки слежения.
xpoft.ru/rutracker.org/generator/
после генерации выбираете «Ссылка на ленту для интеграции в torrent-клиенты»
и аналогичным образом закачиваете файлы с помощью wget (не забываем передать cookies) и grep. Но, после этого на выходе получаем хоть и торрент файлы, но в имени не содержащие ".torrent". После чего командой find находим наши файлы без расширения и переименовываем. После переименования торрент клиент их подхватывает из папки слежения.
Все хорошо, но это не более чем частный случай костыля для самого популярного трекера. Названия не говорил, чтоб за рекламу не приняли(ну к примеру мне рутрекер вовсе не интересен, т.к. не является первоисточником релизов, и пока их там выложат придется изрядно подождать, взять к примеру bigfangroup или kinozal). А хочется способа, который бы можно было применить и в других направлениях.
Только что зарегистрировался на кинозале и посмотрел на их RSS ленту. Действительно интересный случай. Если в общих чертах, то я вижу решение в виде шелл скрипта с таким алгоритмом:
1) из RSS ленты grep'ом фильтруем интересующие нас ссылки. они будут иметь такой вид:
2) после этого циклом проходим по всем отобранным ссылкам и загружаем их wget'ом тут же передая по конвейеру на grep
3) в grep на переданной страничке выбираем ссылку на торрент флай. ссылка имеет вид
как видно по ссылке, он содержит тот же айди что и в RSS ленте что заметно облегчает поиск
4) закачиваем torrent файл
5) переход к следующей отобранной строке из 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 ленты
Я тут на досуге набросал команду для кинозала по описанному выше алгоритму, вот что получилось:
на выходе получается список относительных ссылок на загрузку торрент файлов с кинозала. После этого их лишь остается удобно передать на вход wget задав параметр
Из особенностей хочется отметить опцию "
Почему
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
? А не знаю, наверно потому, что просто захотелось разобраться и в нем :)Вопрос парсинга таких лент вылился в новый пост:
labinskiy.habrahabr.ru/blog/87166/
labinskiy.habrahabr.ru/blog/87166/
завтра поэксперементирую, а то только подручными средствами на php умею
Как альтернативу можно uTorrent запустить под wine… не комильфо но все же.
Спасибо, вроде ничего революционного, но очень доходчиво и хорошо разъяснено. Ну и плюс самому подобное все время лень сделать, а тут готовый четкий рецепт.
Перенес в Peer-to-Peer
Спасибо за ссылку, раньше не находил.
А если по теме, то хотелось сделать все самому и по пути набраться опыта знаний. В результате не только сам понял и разобрался, но и рассказал другим «как» ;)
А если по теме, то хотелось сделать все самому и по пути набраться опыта знаний. В результате не только сам понял и разобрался, но и рассказал другим «как» ;)
Вот вам и сила командной строки в Linux. Каждая команда делает свое дело.
Описание параметров к командам порадовало. На базе этого можно без проблем сделать другие подобные «следилки».
Описание параметров к командам порадовало. На базе этого можно без проблем сделать другие подобные «следилки».
Написал ровно такой же скрипт год назад или больше :)
#!/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 штук или когда сервер будет загружен — оцените эти ухищрения :)
#!/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: Неверное регулярное выражение
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
в итоге получаю пустой торрент :(
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
в итоге получаю пустой торрент :(
Скорее всего у вас ошибка в cookies.txt
ну я тоже к этому склоняюсь, но там ошибаться вродь особо негде
.lostfilm.tv TRUE / FALSE 2147483643 pass пароль
.lostfilm.tv TRUE / FALSE 2147483643 uid логин
как в инструкции
.lostfilm.tv TRUE / FALSE 2147483643 pass пароль
.lostfilm.tv TRUE / FALSE 2147483643 uid логин
как в инструкции
Логин и пароль задаются не в явном виде. Откройте в своем браузере просмотр cookies и скопируйте от туда значения ;)
наверное тогда это стоит как то пометить в самой статье, для таких как я :)
да нет, попробовал занести корректные данные из кукисов браузера, на общую картину это так и не повлияло, всё-равно пустой торрент
Старый файл перед этим удалили? Возможно из-за этого wget не стал его перезагружать.
удалял
Только что запустил у себя:
закачало торрент файл Хауса.
Еще раз перепроверьте команду и cookies. Возможно при копировании/вставке что-то потерялось
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
# 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.
Переписать эти значения можно из окошка просмотра 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
всеравно пустой фаил
.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
всеравно пустой фаил
А если комп был выключен и в рсс накопилось несколько новых серий разных сериалов, то будет ли этот скрипт скачивать все по очереди или скачает только первое что найдет? Если так то я бы отдавал все что он напарсит в файлик и потом качал бы торренты с ключиком -I urls.txt, ну и наверное бы удалял этот файлик после отработки скрипта, также было бы интересно иметь лог скачки, который например отправлялся бы на почту, чтобы сидя на работе сразу видеть что я сегодня вечером смогу посмотреть дома.
>А если комп был выключен и в рсс накопилось несколько новых серий разных сериалов, то будет ли этот скрипт скачивать все по очереди или скачает только первое что найдет?
Будет загружено все новое.
>также было бы интересно иметь лог скачки, который например отправлялся бы на почту
Уже думаю над реализацией ;)
Будет загружено все новое.
>также было бы интересно иметь лог скачки, который например отправлялся бы на почту
Уже думаю над реализацией ;)
кстати, если интересно, можно замутить один большой скрипт, который будет определять сайт, генерить куки, оповещать о cкаченном и т.д, меня просто эта тема заинтересовала, в каком-нибудь гуглокоде замутить проект и поковырять вместе, если интересно пиши на bezgubov@gmail.com
Будет загружено только то новое что все еще останется в rss-ленте.
А что-то может уже и выпасть за нее(там 5 сериалов, каждый из которых в 3 качествах, итого = 15 записей).
Как только выложили шестой сериал, самый старый из ленты вылетает. И так можно пропустить.
Жаль, что это не решается никак кроме запуска на отдельной машине, которая будет вечно поднята.
И да, я видел дату :)
А что-то может уже и выпасть за нее(там 5 сериалов, каждый из которых в 3 качествах, итого = 15 записей).
Как только выложили шестой сериал, самый старый из ленты вылетает. И так можно пропустить.
Жаль, что это не решается никак кроме запуска на отдельной машине, которая будет вечно поднята.
И да, я видел дату :)
Вот более простое решение: skurudo.livejournal.com/375464.html
Вот сделал полностью рабочий в данный момент времени вариант:
http://mihavxc.ru/files/script/lostflv_torrent_gets.bat
http://mihavxc.ru/files/script/lostflv_torrent_gets.bat
Sign up to leave a comment.
Парсим RSS LostFilm'a с помощью grep и передаем на закачку через wget