Автоматическое скачивание .torrent-файлов с трекеров

Мы с sofrus — большие любители сериалов. Не тех, которые «Рабыня Изаура» или «БТП», а современных типа «Побег» или «Хаус». Однажды, по пути из офиса к метро, мы общались на тему новых серий и <~sofrus> предположил, что было бы очень здорово парсить RSS с популярных российских сериальных трекеров типа lostfilm или novafilm, и, затем, скачивать в автоматическом режиме. Мне очень приглянулась эта мысль, но я отложил ее до лучших времен.



И вот время наступило, когда Вебораме понадобился модуль CURL. Делая для него обвертку под наш фреймворк, я предположил, что лучшим способом потестировать модуль будет как раз написание скрипта для автоматического выкачивания .torrent файлов с трекеров. Для меня этот скрипт очень полезен, так как я очень ценю то, что делают команды релизеров вышеупомянутых трекеров и хочу всячески их поддерживать, если вы меня понимаете.

В общем, приступим:

Так как модуль-обвертка для CURL нашего фреймворка написан на PHP, буду использовать его CLI варинат.

На моем домашнем системнике специального назначения стоит rTorrent. И, если вам не известно, то у него есть функция автосканирования определенной папки на предмет появления там новых торрент-файлов. Значит задача сводится к тому, чтобы просто выкачивать файлы с трекеров и класть их в эту самую папку.

На обеих трекерах есть RSS с раздачами, значит буду выкачивать их, парсить, выкачивать торренты и класть в папку. Просто? Не совсем. Дело в том, что прежде чем скачать торрент с трекера надо на нем авторизоваться. Ну что-ж для CURL это не проблема. Сымитирую поведение обычного браузера, скажем FireFox и дело в шляпе.

Еще было-бы неплохо сделать фильтры для торрент файлов, чтобы скрипт скачивал не все подряд, а только то, что мне интересно. Благо имена файлам на трекерах дают вразумительные и проблемы применить к ним регулярки — нет.

Далее надо-бы сделать конфигурационный файл, чтобы можно было настроить скрипт под себя и добавить любые трекеры (экспериментально). Это тоже не очень сложно, главное правильно продумать структуру конфига.

После нескольких часов работы есть результат.

Просто распакуйте архив туда, куда вам нравится, поправьте config.php (инструкция внутри файла) и поставьте на crontab файл torrents.php. например так:

*/30 * * * * php /path/to/script/torrents.php

и раз в 30 минут он будет заходить на трекер и смотреть есть ли новые интересующие вас раздачи, если есть, то скачивать их в папку, указанную вами в конфиге. Результат работы пишется в файл /var/log/torrents.log.

Бонусом прилагается файл get_torrent.php, который параметрами принимает пути к торрент файлам и, основываясь на том-же конфиге, скачивает их и кладет в ту-же папку.

В общем, отдаю этот скрипт всем, кому он чем-то поможет, ни в коей мере не претендую ни на ноухау ни на гениальность идеи или реализации. :) Если будут вопросы/ пожелания, с удовольствием отвечу в комментариях.
+45
18 декабря 2008, 18:01
63
NickMitin 58,4

комментарии (87)

0
mask0t #
Интересно, спасибо… =)
+3
nooze #
Я одно время практиковал такую схему — RSS с трекера (где ссылка уже стоит на torrent) прогонял через фильтры yahoo.pipes (чтобы отсечь ненужные сериалы и форматы) и загонял в встроенную RSS качалку uTorrent
0
NickMitin #
Ну для меня было определяющим фактором к написанию этого скприпта необходимость логиниться на трекере. Не знаю решают ли пайпс эту проблему.
0
nooze #
Смотря как организована подача RSS. У некоторых трекеров там вписан passkey и проблем с логином не возникает, он просто не нужен
–2
NickMitin #
А как может быть вписан пасскей? Он общий на всех?
+1
nooze #
Нет, почему же. Просто у каждого «своя» лента, passkey прямо в её url идет
–3
NickMitin #
А как меня трекер узнает без авторизации?
+1
chetzof #
По пасскею. Он уникален.
–2
NickMitin #
Мы втроем запутали друг-друга.

Вот сценарий. Я захожу (я там не авторизован) на главную lostfilm.tv, жму на кнопку RSS. Нажимаю в RSS потоке на ссылку на .torrent-файл. Что происходит? Правильно, меня просят авторизоваться. Соответсвенно и торрент-клиент попадет в такую-же ситуацию.
0
svdesign #
Когда ты, будучи авторизованным, скачиваешь torrent файл с трекера он генерируется уникальным специально для твоего аккаунта. А торент-клиенту никуда не надо авторизоваться, он берет твой торрент-файл и, по информации указанной в нем, соединяется с трекером.
–2
NickMitin #
Мой скрипт сам скачивает торренты, которые мне нужны, он для этого и писался.
+2
zelenin #
для неавторизованного пользователя, допустим, не будет рсс. После авторизации появится уникальная для тебя лента рсс, из которой ты и будешь скачивать уникальные для тебя (с пасскеем) торренты.
–1
nileriver #
для этой задачи достаточно не секурное решение. По сути пасскей — ключ сессии. Но сессия тут может быть в несколько месяцев минимум(вспомним с какой частотой выставлялись серии LOST %) ). Секурность авторизации по ключу сесси напрямую зависит от времени сессии.
0
Barttos #
Для каждого юзера отдельный.
+11
MrTime #
ну во первых uTorrent сам умеет «сортировать» закачки (регулярные выражения рулят)
во вторых в том же uTorrent есть полt, где указывается куки… На оффсайте все написано — www.utorrent.com/rsstutorial.php
0
nooze #
У меня видимо был какой-то древний, фильтры там были слишком простые, а о куках речь даже не шла
0
Dimster #
А можно поподробнее? Я вот как-то пытался качать с мининовы новые релизы «Героев» но ничего не вышло.
Допустим вот формирую рсс ленту по кейвордам:
www.mininova.org/rss/heroes+eztv+hdtv
Затем добавляю её в uTorrent и он предлагает все серии которые найдет, как там удалить то, что не нужно мне качать?
НЛО прилетело и опубликовало эту надпись здесь
+16
falone #
эх, мне бы терабайтный винт :)
+3
alfsoft #
У меня оба условия соблюдены и через некоторое время осознал, что выкачал все, что было нужно и качать просто нечего… :)
+3
Ex3NDR #
у меня всего 160 гигов… весь занят, а юзаю меньше процента
+44
twi #
эх, мне бы время на просмотр :)))
+5
d0lfin #
какие парсеры? какие прогоны через фильтры?
utorrent всё сам уже умеет

0
NickMitin #
У меня rTorrent, если вы обратите внимание.
НЛО прилетело и опубликовало эту надпись здесь
0
NickMitin #
Правильно, мой скрипт для файл-серверов под linuxом.
0
d0lfin #
картинки вставить не получилось
pic.ipicture.ru/uploads/081218/SSTQ2gQUqd.png
pic.ipicture.ru/uploads/081218/R5yi66Y8FV.png
–2
NickMitin #
А как utorrent авторизуется на трекере, я не нашел.
–2
NickMitin #
Добавляю этот фид в utorrent:
novafilm.tv/rss/rssd.xml

И, как и следовало ожидать ничего не качается.
+2
nooze #
В этом случае помогает ручная установка куки:
To use feeds that require cookies, you must find the cookie for the site, and grab UID and pass from it.
IE users will find their cookies in %UserProfile%\Cookies
Firefox users will find their cookies in Tools -> Options -> Privacy -> Cookies -> Show Cookies
Opera users will find their cookies in Tools -> Advanced -> Cookies
Users of other browsers will have to consult their browser's documentation

Once you have the appropriate information, use this format for the feed URL:
sometorrentsite.com/rss.php:COOKIE:uid=1234;pass=asdjh12378912y3lkj
0
NickMitin #
Хитрые ребята :)
+1
rdk #
Как-то через жопу все. Почему нельзя было простой и понятный интерфейс сделать? (риторический вопрос)
0
fanex #
rtorrent — линуксовый качок, основанный на libtorrent. Юзают его не только суровые бородатые линуксоиды, но также пользователи роутеров, на которых не стоит windows xp. И вариант с uTorrent не проходит не только идеологически, но и практически.
+1
Joka #
берем vuze — плагин rssfeed scanner — скармливаем ему урлы рсс фидов — оно само качает авторизуется и качает сериалы :)
0
NickMitin #
Помоему он очень монструозный. Не для файлсервера, думается мне. :)
0
orloff #
для мака кстати самый лучший имхо:) (для тех у кого лишнейго сервера нет)
+1
NickMitin #
Для тех у кого комп все-в-одном — да, уверен на 100%. У меня дома только системник в кладовке стоит, купил год назад дохлый селерон, торренты качать, вот мне и захотелось по максимуму все автоматизировать.
+4
prop #
Идея очень понравилась. Правда, дочитав до строчки
Так как модуль CURL написан на PHP, буду использовать его CLI варинат.,
дальше читать не стал
0
NickMitin #
Да, сам перечитал и понял, ерунда получилась. Поправил.
0
ForestQ #
Идея класс! надо попробовать
0
lmrvsk #
Спасибо! Было в планах, теперь остается только доделать под себя.
0
Logonoff #
Я писал нечто подобное на C#, используя класс WebClient. Очень удобная штука.
0
CAJAX #
Жаль не на всех трекерах есть RSS фид :(
0
Nc_Soft #
на всех трекерах есть аля форум, так что рсс это не панацея :)
0
CAJAX #
Да, придется напильник в руки брать :)
0
eklektikos #
Ну я всегда не понимал почему бы торрент-клиентам не сделать так, как это сделано в iTunes с подкастами. Добавил feed и все новые серии сами прилетают, а то заходи постоянно смотри — появилась-не появилась…
Тут говорили что на uTorrent это есть, а для Transmission никто не знает как сделать?
0
nooze #
А рекламу кто будет смотреть? :) Торренты только от неё и живут в основном…
0
1ac3124 #
для трансмишена можно настроить папку, которую он будет мониторить на наличие новых торрент файлов
0
eklektikos #
ну так а кто будет класть в эту папку .torrent файлы? Значит мне самому придется заходить на сайт и ручками выкачивать их… схема не меняется по-сути :)
0
1ac3124 #
Хм… нет… предложенный здесь скрипт как раз подойдёт для этих целей, он как раз за вас и будет «заходить на сайт и ручками выкачивать их».
0
eklektikos #
это то я понял :) я просто думал как реализовать эту функциональность без PHP-скрипта
+1
pouet0r #
А еще есть такой велосипед:
The Episode Downloader
Выбираешь свои сериалы и вперёд
www.ted.nu/
+1
Aux #
Проще запустить под вайном uTorrent…
0
NickMitin #
мне кажется, что через ssh удобнее c сервером управляться.
+3
Aux #
А кто мешает? На сколько я помню у uTorrent-а хороший CLI-интерфейс. Плюс есть веброжа, что, на мой взгляд, намного удобнее SSH.
0
fanex #
А на роутере?
0
Aux #
А что, нельзя?
0
Nitrogen #
нельзя конечно

rTorrent вполне приличная вещь, использую на своем asus wl500gp
0
1ac3124 #
На своём wl500gp V2 rTorrent имеет привычку падать при большом количестве активных торрентов, поэтому юзаю трансмишен, за скрипт спасибо, будем пилить
0
fanex #
У меня rtorrent иногда тоже падает (v1), но в кроне стоит скрипт, который ежечасно пускает /opt/etc/init.d/S99rtorrent start
Зато удобство невероятное. Во-первых, добавление закачки у меня осуществляется батником, который проассоциирован с *.torrent (тупо copy /Y %1 "//192.168.1.1/dl"), управление торрентами не только из веб-морды, но и через ssh или из явовского фронтэнда ntorrent.

0
nileriver #
ntorrent неудобен имха. А написан вообще как черти что… %)
0
fanex #
Недостатков у него куча, но самое главное достоинство — можно запустить горячей клавишей и посмотреть на закачки не пуская громоздкий браузер с кучей вкладок (ну и не выискивать в случае чего отдельную вкладку)
0
Aux #
Ну вот такой вот у вас значит роутер. А вообще у меня для таких нужд есть файл-сервер. Зачем роутер гонять? Он пусть себе трафик по локале распределяет и не умничает.
0
fanex #
Файл-сервер, это NAS? Так они точно так же под линуксом бегают и таскают файлы с помощью такого же rTorrent.

А держать в квартире полноценный комп в качестве сервера… Как по мне, это решение не оправдывает себя ни по габаритам, ни по шумовыделению.
+1
Aux #
Это смотря как соберёте (:
0
fanex #
Понятно, что можно воспользоваться mini-itx, поставить бесшумных кулеров и т.д. Но тогда встает вопрос цены.
0
dndred #
Я собрал за 5500 без жёсткого диска. Даже слишком быстрый получился.
0
Nitrogen #
ставить на сервер *nix, а потом под вайном запускать uTorrent это как минимум не оптимально.
0
Aux #
Ну у меня вообще не возникает желания запускать торрент-клиент где-либо кроме компа/ноута тогда, когда мне нужно (да-да, у меня быстрый интернет и я ничего заранее не качаю).

А насчёт неоптимально — помоему если ваш клиент не понимает RSS и вы пишите какие-то скрипты, то вот это как раз неоптимально. Я под никсы никогда торренты не юзал, так что может у вас и нет нормальных торрент-клиентов, не знаю.
0
jah #
Проще поставить btg
0
Nitrogen #
удобно, жаль что анлим всего 128kbit…

а я только что закончил писать rss-илку для kvadratmalevicha.ru
0
skurudo #
Поделитесь результатами, если не затруднит.

А то ведь знаете, rss там оключен :(

0
Gumanoid #
Как-бы что не сглючило… а то вдруг скрипт решит выкачать половину трекера, пока никого нет дома )
0
mahlos #
это все гемор. все автоматически надо только тем кто по 20 сериалов смотрит. и все время забывает серии. А тут я так понял большинство кроме героев и лоста ничего не знают, а разговоров прям на завоевание америки
0
atomicxp #
Crawler довольно интересная штука (http://en.wikipedia.org/wiki/Web_crawler). Хотя намного более познавательным было бы не просто выкачивать торренты, но и проверять в них файлы, подставляя торрент-кускочки к своим локальным файлам тем самым анализируя содержимое своих коллекций.
0
diamon #
экспирементально — экспериментально
0
xfather #
спасибо, скрипт пожалуй не пригодится, зато узнал еще пару прикольных сериалов, качаю…
0
dndred #
У меня скрипт на питоне парсит регэкспами главную страницу локального трекера и качает все новые фильмы на ней.
Для авторизации оказалось очень удобно использовать w3m — куки он сам запомнил.
0
nileriver #
wtorrent надстройка для rtorrent'а умеет парсить rss. Надо будет залезть в исходники(там кстати тоже PHP) и приделать возможность регулярок…
0
NickMitin #
Я довольно слабенький линуксоид, поэтому никак не могу поднять scgi в rTorrent и запустить у него какой-нибудь webUI Ж(
0
nileriver #
scgi нужно прикручивать исключительно для секурной авторизации. И вопрос тут не в rTorrent а в настрйоках апача. Иногда ставить веб-сервер для rTorrents — излишество %) По большому счету rTorrent сам открывает порт c XMLRPC. И многие веб-морды работают напрямую… А самое интересное конешн… Свою написать.)
–1
egorinsk #
Да ну торренты — муть, нельзя сразу в мплеер засунуть и смотреть на ходу(( А еще шевелиться, искать специально… ну нафик
0
NickMitin #
0
egorinsk #
О, идея интересная, правда у меня торренты медленно работают, ну да ничего может когда-нибудь будем и такими технологиями пользоваться)
0
whm #
как же вы собрались сразу в мплеер засовывать, если даже торренты тормозят?
0
NickMitin #
Надо чтобы было 3 условия были соблюдены:
1. Широкий канал
2. Много сидеров
3. Высокое ратио (если трекер его считает)
0
KorP #
прошу прощения, что не совсем в тему, но просто не знаю уже у кого спросить, и гугл не помогает
собственно проблема для меня при помощи cURL залогинится на hdtracker.ru у них rss как то кривовата и приходит постоянно непойми чего, в итоге решил автоматизировать процесс скачивания оттуда торрентов путём парсинга непосредственно страницы, с парсингом траблов нет, а вот с залогиниванием

буду благодарен за любую помощь

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.