1846 читателей, 231 пост
Администрация
Модераторы
Peer-to-Peer (p2p) — это хорошо. Очень даже хорошо.
Поговорим об этом?
Поговорим об этом?
watch-dir-enabled и watch-dir), а в rTorrent для этого нужно добавить следующую строку в конфигурационный файл:schedule = watch_directory,5,5,load_start=./watch/*.torrentwget:wget -qO - http://www.lostfilm.tv/rssdd.xml-q" указывает wget не выводить информацию о своей работе, т.е. "быть тихой";-O -" заставляет выводить загруженную ленту не в файл, а в поток стандартного вывода. Это сделано для того, чтобы полученные данные можно было передать по конвейеру на вход фильтра grep.'http.*torrent'. Тут символ точки обозначает «любой символ» а звездочка — «повторение любое число раз». Т.е. мы найдем все записи начинающиеся с «http» и заканчивающиеся на «torrent» что и будет являться ссылками на torrent файлы. Сама команда выглядит так:grep -ioe 'http.*torrent'-i" — регистронезависимый поиск,-o" — выбирать только совпавшую часть подстроки (сделано для фильтрации тегов что окружают ссылку),-e" — поиск по регулярному выражениюhttp://lostfilm.tv/download.php/2030/The.Oscars.The.Red.Carpet.2010.rus.LostFilm.TV.torrent'[0-9]{4}/(lost|house|lie|spartacus)'. Оно выполняет поиск 4х цифр подряд ("[0-9]{4}", где в фигурных скобочках задано число повторений), вслед за ними символ слеша, и после этого один из четырех вариантов по названию сериала ("(lost|house|lie|spartacus)", где символ "|" читается как ИЛИ). Но, для команды grep служебные символы нужно экранировать с помощью "\". Итого, мы имеем:grep -ie '[0-9]\{4\}/\(lost\|house\|lie\|spartacus\)'wget умеет загружать cookies из указанного файла. Посмотрим на вызов wget:wget -nc -qi - -P ~/.config/watch_dir --load-cookies=~/.config/cookies.txt-nc" указывает команде не перезагружать файлы если они уже есть у нас на диске,-q" — рассмотренная выше опция, указывает команде "вести себя тихо",-i -" — получить список файлов для загрузки со стандартного потока ввода,-P ~/.config/watch_dir" — указание нашей папки слежения куда будет произведена загрузка файлов,--load-cookies=~/.config/cookies.txt" — использовать cookies из указанного файла.cookies имеет следующий формат:.lostfilm.tv TRUE / FALSE 2147483643 pass <ваши данные>
.lostfilm.tv TRUE / FALSE 2147483643 uid <ваши данные>wget'у.wget -qO - http://www.lostfilm.tv/rssdd.xml | grep -ioe 'http.*torrent' | grep -ie '[0-9]\{4\}/\(lost\|house\|lie\|spartacus\)' | wget -nc -qi - -P ~/.config/watch_dir --load-cookies=~/.config/cookies.txtcron:*/15 * * * * wget -qO - http://www.lostfilm.tv/rssdd.xml | grep -ioe 'http.*torrent' | grep -ie '[0-9]\{4\}/\(lost\|house\|lie\|spartacus\)' | wget -nc -qi - -P ~/.config/watch_dir --load-cookies=~/.config/cookies.txt > /dev/null 2>&1> /dev/null 2>&1" подавляет вывод команды и тем самым не заставляет cron генерировать вам email с выводом команд.wget в конвейере на такой:wget -nc -qi - -P ~/ --header "Cookie: uid=***; pass=***"
комментарии (71)
p.s. когда же мне мой сервак пиво и тапочки уже будет подавать? =)
Только единственный минус как быть с двойными релизами??
А кстати кто упоминал 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
з.ы. За статью спасибо. :)
да, пользовался, знаю. но самоцелью было разобраться с grep и сделать все самому :)
>Здесь как я понял торрент файл будет перекачан если он был удален с диска?
Да, именно так. Но я только что специально провел эксперимент: удалил файл из папки слежения и снова его добавил. Transmission при этом не стал заново стартовать загрузку или даже выполнять проверку хеша файлов.
Такая статья однозначно нужна Хабру.
Поддержу плюсом.
Спасибо за такое применение grep.
А статью постараюсь написать. Хоть на хабре уже и мелькали подобные темы, но освещали они лишь ту или иную часть. Хотелось бы объединить и собрать все вместе.
labinskiy.habrahabr.ru/blog/87287/
habrahabr.ru/blogs/p2p/88405/
Например? Думаю, этот вопрос тоже решаемый. Хотя нужно разбирать каждый конкретный случай.
На некоторых трекерах очень хочется автоматизировать процесс скачивания, но пока не нахожу как. Пробовал создавать нужный RSS с помощью pipes.yahoo, не получилось.
xpoft.ru/rutracker.org/generator/
после генерации выбираете «Ссылка на ленту для интеграции в torrent-клиенты»
и аналогичным образом закачиваете файлы с помощью wget (не забываем передать cookies) и grep. Но, после этого на выходе получаем хоть и торрент файлы, но в имени не содержащие ".torrent". После чего командой find находим наши файлы без расширения и переименовываем. После переименования торрент клиент их подхватывает из папки слежения.
1) из RSS ленты grep'ом фильтруем интересующие нас ссылки. они будут иметь такой вид:
http://kinozal.tv/details.php?id=5463872) после этого циклом проходим по всем отобранным ссылкам и загружаем их 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? А не знаю, наверно потому, что просто захотелось разобраться и в нем :)labinskiy.habrahabr.ru/blog/87166/
А если по теме, то хотелось сделать все самому и по пути набраться опыта знаний. В результате не только сам понял и разобрался, но и рассказал другим «как» ;)
Описание параметров к командам порадовало. На базе этого можно без проблем сделать другие подобные «следилки».
#!/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)"воспримется именно как точка или как «любой символ»?меньше велосипедов и больше функционала
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 логин
как в инструкции
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. Возможно при копировании/вставке что-то потерялось
wget -nc -qi - -P ~/ --header "Cookie: uid=***; pass=***"?
странно, путь до файла был указан верно, права выдал максимальные, файл по шаблону… мистика :(
# cat /usr/local/www/parser/cookies.txt
.lostfilm.tv TRUE / FALSE 2147483643 pass blablabla
.lostfilm.tv TRUE / FALSE 2147483643 uid iru
Переписать эти значения можно из окошка просмотра cookies в браузере или, к примеру, воспользоваться плагином к FireFox.
.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
всеравно пустой фаил
wget -nc -qi - -P ~/ --header "Cookie: uid=***; pass=***"Будет загружено все новое.
>также было бы интересно иметь лог скачки, который например отправлялся бы на почту
Уже думаю над реализацией ;)