Версия для печати темы
Re-Tracker | Система локальных ретрекеров | Ретрекер _ Патчер торрентов _ patcher для rtorrent
Автор: kolobok3D 5.3.2009, 21:53
http://kolobok.sytes.net/patcher.tar.gz
Конфиг:
Код
/usr/local/scripts/tr_patcher/>more patcher.conf
# Директория, за которой следит patcher.
fdirectory = /data/rtorrent/torrents
# Директория, в которую patcher скидывает торренты после добавления ретрекеров.
tdirectory = /data/rtorrent/.torrents
# Директория session из конфига rTorrent
sdirectory = /data/rtorrent/.session
# Город
gorod = 2
# Провайдер
prov = 1
Опции запуска:
Код
Проверяет папку fdirectory на наличие торрентов, патчит найденные и сохраняет в tdirectory.
./patcher.pl -p
Код
Патчит уже добавленныe в rTorrent торренты (перед запуском нужно остановить rTorrent).
./patcher.pl -c
Код
Обновляет список ретрекеров и проверяет их доступность.
./patcher.p -u
При первом запуске автоматически обновляет список ретрекеров и проверяет их доступность.
Для работы нужен перл собранный с поддержкой threads и модули LWP::Simple Text::Iconv.
http://kolobok.sytes.net/patcher.tar.gz
Автор: FreeM@N 6.3.2009, 12:59
Спасибо, нужно будет затестить...
Скрипт для проверки ретрекеров выглядит примерно вот так:
Это немного модифицированная версия скрипта ShurShur
CODE
#!/usr/bin/perl
use LWP::Simple;
use IO::Socket;
use POSIX;
# no Text::Iconv on Windows
#use Text::Iconv;
use strict;
no utf8;
# hack: remove zero bytes from ASCII characters in UTF-16
sub conv {
my ($s)
_;
$s=~tr/\0//d;
return $s;
}
# extract urls with Text::Iconv
#my $u2k=new Text::Iconv("utf-16","koi8-r//translit");
#my @list=sort grep {/http:/} split /[\n\s]+/,$u2k->convert(get "http://iphonez.su/torrent/trackers.ini");
# extract urls with hack
#my @list=sort grep {/http:/} split /[\n\s]+/,conv(get "http://re-tracker.ru/trackerssimple.ini");
my $subject = conv(get "http://re-tracker.ru/trackerssimple.ini");
my @list;
while ($subject =~ m!(http://[^/]+/[^\s]+)!ig) {
push(@list, $&);
# $result = $&
}
@list = sort(@list);
my $p="";
my $out="";
binmode STDOUT,":bytes";
for my $t(@list) {
# print "$t\n";
next if $t eq $p;
$p=$t;
$t=~m#//(.+?)
\d+)/#;
my $s=new IO::Socket::INET(PeerAddr=>$1,PeerPort=>$2,Timeout=>2);
if($s) {
$out .= "$t\n";
print "GOOD $t\n";
close $s;
} else {
print "FAIL $t\n";
}
}
print "MY:\n\n$out";
Автор: kolobok3D 7.3.2009, 1:39
Ну получилось что-то
patcher.conf:
Код
## Деректория, откуда берутся не пропатченые торренты.
fdirectory = /data/share/torrents/
## Директория, за которой наблюдает rtorrent.
tdirectory = /data/.torrents/
## Директория, в которую складываются не пропатченые торренты после обработки патчером.
odirectory = /data/share/torrents/.old/
## Город (2 - Москва)
gorod = 2
## Номер провайдера в городе (1 - Корбина(Москва))
prov = 1
patcher.pl(теперь его править не нужно):
CODE
#!/usr/bin/perl
require "/root/scripts/tf.pl";
open (CONFIG, "/root/scripts/patcher.conf") or die "Cannot open file: $!";
while (<CONFIG>) {
my $comment = '#';
if(/^$comment/) {
}
else {
my ($param,$arg) = split("=",$_);
chomp $param;
chomp $arg;
$param =~ s/\s//g;
$arg =~ s/\s//g;
if ($param eq "fdirectory") {
$fdirectory = $arg;
}
if ($param eq "tdirectory") {
$tdirectory = $arg;
}
if ($param eq "odirectory") {
$odirectory = $arg;
}
if ($param eq "gorod") {
$gorod = $arg;
}
if ($param eq "prov") {
$prov = $arg;
}
}
}
close (CONFIG);
$isp="$gorod\+$prov";
opendir (TRR, "$fdirectory") || die "$!";
@tr = grep { !/^\.{1,2}$/ && (-f "$fdirectory"."/".$_) && /.torrent$/i } readdir TRR;
closedir TRR;
open(RTR, "/root/scripts/retrackers.txt") || die "$!";
my @retrackers=<RTR>;
close RTR;
if (!defined @tr) {
exit 0;
} else {
foreach $tr(@tr) {
chomp $tr;
$torrentfile = "$fdirectory/$tr";
$torrent = new TF ("$torrentfile");
$size = $torrent->length();
if ($size == 0) {
$filesref = $torrent->files();
@files = @{$filesref};
foreach (@files) {
%file = %{$_};
$size = $size + $file{'length'};
}
}
$comment = $torrent->publisherurl();
# $comment =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$a = $torrent->announce();
@list = ([($a)]);
foreach $retracker (@retrackers) {
chomp $retracker;
$b="$retracker?name=&size=$size&comment=$comment&isp=$isp";
@list=(@list, [($b)]);
}
$torrent->announcelist(@list);
$torrent->save("$tdirectory/$tr");
system("mv -f \"$fdirectory$tr\" \"$odirectory$tr\"");
}
}
+ подкрутил тестер ретрекеров.
test.pl:
CODE
#!/usr/bin/perl
use LWP::Simple;
use IO::Socket;
use Config::IniFiles;
use POSIX;
use strict;
use Text::Iconv;
no utf8;
my $gorod;
my $prov;
open (CONFIG, "/root/scripts/patcher.conf") or die "Cannot open file: $!";
while (<CONFIG>) {
my $comment = '#';
if(/^$comment/) {
}
else {
my ($param,$arg) = split("=",$_);
chomp $param;
chomp $arg;
$param =~ s/\s//g;
$arg =~ s/\s//g;
if ($param eq "gorod") {
$gorod = $arg;
}
if ($param eq "prov") {
$prov = $arg;
}
}
}
close (CONFIG);
my $u2k=new Text::Iconv("utf-16","koi8-r//translit");
my $list=$u2k->convert(get "http://re-tracker.ru/trackerssimple.ini");
open (INI, ">/root/scripts/trackerssimple.ini");
print INI "$list";
close (INI);
my $subject = Config::IniFiles->new( -file => '/root/scripts/trackerssimple.ini' );
my $gorod = $subject->val("Город", "$gorod");
my $prov = $subject->val("Провайдеры $gorod", "$prov");
my @values = $subject->Parameters("Ретрекеры $gorod $prov");
my @list;
foreach (@values) {
my $retracker = $subject->val("Ретрекеры $gorod $prov", $_);
if ($retracker=~ m!(http://[^/]+/[^\s]+)!ig) {
push(@list, $&);
}
}
@list = sort(@list);
my $p="";
my $out="";
binmode STDOUT,":bytes";
for my $t(@list) {
next if $t eq $p;
$p=$t;
$t=~m#//(.+?)
\d+)/#;
my $s=new IO::Socket::INET(PeerAddr=>$1,PeerPort=>$2,Timeout=>2);
if($s) {
$out .= "$t\n";
close $s;
}
}
open (RTR, ">/root/scripts/retrackers.txt");
print RTR "$out";
close (RTR);
В крон допустим каждую ночь:
Код
crontab -e
0 0 * * * /root/scripts/test.pl
В файле tf.pl по прежнему почма.
У меня впринципе все работает, но мож будут проблемы с кодировкой.
Код
~/scripts/>uname -a
FreeBSD gw.home.net 7.1-RELEASE-p1 FreeBSD 7.1-RELEASE-p1 #2: Sun Feb 22 22:36:03 MSK 2009 kolobok@gw.home.net:/usr/obj/usr/src/sys/GW i386
Автор: FreeM@N 13.3.2009, 1:54
Какие-либо проблемы замечены?
А зачем столько директорий кстате? Одной обойтись не получится (например той, где rtorrent хранит торенты)?
Автор: kolobok3D 13.3.2009, 10:23
"fdirectory = /data/share/torrents/" шедулит скрипт и передает в
"tdirectory = /data/.torrents/" которую шедулит rtorrent, а
"odirectory = /data/share/torrents/.old/" просто для удобства.
Автор: FreeM@N 14.3.2009, 1:21
Ура! Оно заработало!
Не так как хотелось но увы...при работе с rtorrent по XML-RPC он не обновляет спиок трекеров...
Итак немного пошаманив получил скрипт который запускается (ну всмысле если его в крон назначить то он будет запускаться ) раз в сутки, обновляет список трекеров (если нужно), останавливает rtorrent, патчит торенты в директории сессий и снова его запускает
При этом скрипту важно знать только одну директорию - где rtorrent хранит сессии и не важно где лежат сами скрипты (главное чтобы все в одной директории).
Главный скрипт, который всем "рулит":
start.sh
CODE
#!/bin/sh
# Current working dir;)
CWD=$(cd $(dirname $0); pwd -P)/
# Our config file
CONFIG=$CWD/patcher.conf
TRACKERS_INI=$CWD/trackerssimple.ini
# Get rtorrent session save directory
SESSION_DIR=$(cat "$CONFIG" | grep sdirectory | awk '{print $3}')
# If list of trackers don`t exists - download end check it
if [ ! -f $TRACKERS_INI ]; then
$CWD"test.pl"
fi
# Time of last modification in timestamp format
MODDATE=$(stat -c %Y "$TRACKERS_INI")
MODDATE=${MODDATE%% *}
# Current date at the same format
CUR_DATE=$(date +%s)
# Difference between mod. and cur. time in seconds
UPDATE=$(($CUR_DATE-$MODDATE))
# Recheck list only once at twenty-four hours period
if [ "$UPDATE" -gt "86400" ]; then
$CWD"test.pl"
fi
## Prepare!
# I am use one of this start-stop scripts:
# http://libtorrent.rakshasa.no/wiki/RTorrentCommonTasks#StartingrTorrentonSystemStartup
/etc/init.d/rtorrent stop
sleep 15
# Patch it!
ls $SESSION_DIR | grep '.torrent$' | awk '{print "'$CWD'patcher.pl '$SESSION_DIR/'"$1}' | sh
sleep 2
# That`s all, start rtorrent
/etc/init.d/rtorrent start
Скрипт нужно запускать от
root ибо он рабоатет с остановкой/запуском служб...
Добавлен ещё один параметр настройки (sdirectory), останые директории в моём варианте не используются но исходная работоспособность патчера не нарушена (надеюсь):
patcher.conf
CODE
## Деректория, откуда берутся не пропатченые торренты.
fdirectory = /data/share/torrents/
## Директория, за которой наблюдает rtorrent.
tdirectory = /data/.torrents/
## Директория, где rtorrent хранит торренты
sdirectory = /home/freeman/TORRENTS/.session
## Директория, в которую складываются не пропатченые торренты после обработки патчером.
odirectory = /data/share/torrents/.old/
## Город (2 - Москва)
gorod = 2
## Номер провайдера в городе (1 - Корбина(Москва))
prov = 1
И модификация патчера (там надо ещё как-то сделать чтобы трекеры не считывались какждый раз, но как это сделать я не знаю ибо на перле не програмлю
):
patcher.pl
CODE
#!/usr/bin/perl
my $cur_dir = `dirname $0`;
$cur_dir =~ s/\n//;
require "$cur_dir/tf.pl";
my $single = @ARGV[0];
open (CONFIG, "$cur_dir/patcher.conf") or die "Cannot open file: $!";
while (<CONFIG>) {
my $comment = '#';
if(/^$comment/) {
}
else {
my ($param,$arg) = split("=",$_);
chomp $param;
chomp $arg;
$param =~ s/\s//g;
$arg =~ s/\s//g;
if ($param eq "fdirectory") {
$fdirectory = $arg;
}
if ($param eq "tdirectory") {
$tdirectory = $arg;
}
if ($param eq "odirectory") {
$odirectory = $arg;
}
if ($param eq "gorod") {
$gorod = $arg;
}
if ($param eq "prov") {
$prov = $arg;
}
}
}
close (CONFIG);
$isp="$gorod\+$prov";
if(!$single) {
opendir (TRR, "$fdirectory") || die "$!";
@tr = grep { !/^\.{1,2}$/ && (-f "$fdirectory"."/".$_) && /.torrent$/i } readdir TRR;
closedir TRR;
}
sub patch {
open(RTR, "$cur_dir/retrackers.txt") || die "$!";
my @retrackers=<RTR>;
close RTR;
my ($tr) = @_;
$torrent = new TF ("$tr");
$size = $torrent->length();
if ($size == 0) {
$filesref = $torrent->files();
@files = @{$filesref};
foreach (@files) {
%file = %{$_};
$size = $size + $file{'length'};
}
}
$comment = $torrent->publisherurl();
# $comment =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$a = $torrent->announce();
@list = ([($a)]);
foreach $retracker (@retrackers) {
chomp $retracker;
$b="$retracker?name=&size=$size&comment=$comment&isp=$isp";
@list=(@list, [($b)]);
}
$torrent->announcelist(@list);
$torrent->save("$tr");
}
if ($single) {
chomp $single;
patch $single;
} else {
if (!defined @tr) {
exit 0;
} else {
foreach $tr(@tr) {
chomp $tr;
$torrentfile = "$fdirectory/$tr";
patch $torrentfile;
system("mv -f \"$fdirectory$tr\" \"$odirectory$tr\"");
}
}
}
И конечно же все говорят большое спасибо:
kolobok3DShurShurЛЕНЬ и другим...
Автор: kolobok3D 14.3.2009, 18:49
Спасибо за идею, но я поступил немного подругому:
Все в операции выполняет 1 скрипт.
т.к. у меня FreeBSD и запускаю я rtorrent вот так:
Код
#!/bin/sh
export HOME=/home/kolobok/
/usr/bin/su -m kolobok -c '/usr/local/bin/screen -dmS rt /usr/local/bin/rtorrent -n -o import=/usr/local/etc/rtorrent.conf'
чтобы пропатчить активные торренты, приходится останавливать торрент вручную, патчить и опять вручную запускать.
активные торренты патчатся командой:
Код
/путь_к_патчеру/patcher.pl current
обновление ретрекеров:
Код
/путь_к_патчеру/patcher.pl update
patcher.conf:
Код
## Деректория, которую шедулит патчер и берет новые торренты.
fdirectory = /data/share/torrents/
## Директория, в которую патчер отдает пропатченые торренты rtorrent'у.
tdirectory = /data/.torrents/
## Директория, где rtorrent хранит торренты
sdirectory = /data/.session/
## Город (2 - Москва)
gorod = 2
## Номер провайдера в городе (1 - Корбина(Москва))
prov = 1
patcher.pl:
CODE
#!/usr/bin/perl
$cur_dir = `dirname $0`;
$cur_dir =~ s/\n//;
$opt = @ARGV[0];
require "$cur_dir/tf.pl";
open (CONFIG, "$cur_dir/patcher.conf") || die "Cannot open file $cur_dirpatcher.conf: $!";
while (<CONFIG>) {
my $comment = '#';
if(/^$comment/) {
}
else {
my ($param,$arg) = split("=",$_);
chomp $param;
chomp $arg;
$param =~ s/\s//g;
$arg =~ s/\s//g;
if ($param eq "fdirectory") {
$fdirectory = $arg;
}
if ($param eq "tdirectory") {
$tdirectory = $arg;
}
if ($param eq "sdirectory") {
$sdirectory = $arg;
}
if ($param eq "gorod") {
$gorod = $arg;
}
if ($param eq "prov") {
$prov = $arg;
}
}
}
close (CONFIG);
$isp="$gorod+$prov";
if ($opt eq update) {
use LWP::Simple;
use IO::Socket;
use Config::IniFiles;
use Text::Iconv;
$u2k=new Text::Iconv("utf-16","koi8-r//translit");
$list=$u2k->convert(get "http://re-tracker.ru/trackerssimple.ini");
open (INI, ">/tmp/trackerssimple.ini");
print INI "$list";
close (INI);
$subject = Config::IniFiles->new( -file => '/tmp/trackerssimple.ini' );
$gorod = $subject->val("Город", "$gorod");
$prov = $subject->val("Провайдеры $gorod", "$prov");
@values = $subject->Parameters("Ретрекеры $gorod $prov");
foreach (@values) {
$retracker = $subject->val("Ретрекеры $gorod $prov", $_);
if ($retracker=~ m!(http://[^/]+/[^\s]+)!ig) {
push(@list, $&);
}
}
@list = sort(@list);
binmode STDOUT,":bytes";
for $t(@list) {
next if $t eq $p;
$p=$t;
$t=~m#//(.+?)
\d+)/#;
$s=new IO::Socket::INET(PeerAddr=>$1,PeerPort=>$2,Timeout=>2);
if($s) {
$out .= "$t\n";
close $s;
}
open (RTR, ">/tmp/retrackers.txt");
print RTR "$out";
close (RTR);
}
exit 0;
}
open(RTR, "/tmp/retrackers.txt") || die "Cannot open file retrackers.txt: $!";
my @retrackers=<RTR>;
close RTR;
sub patch {
$torrent = new TF ("$torrentfile");
$a = $torrent->announce();
@list = ([($a)]);
foreach $retracker (@retrackers) {
chomp $retracker;
$b="$retracker";
if ($retracker eq "http:\/\/re-tracker.ru:
\/announce.php") {
$size = $torrent->length();
if ($size == 0) {
$filesref = $torrent->files();
@files = @{$filesref};
foreach (@files) {
%file = %{$_};
$size = $size + $file{'length'};
}
}
$comment = $torrent->publisherurl();
if (!defined $comment) {
$comment = $torrent->comment();
}
# $comment =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$b="$retracker?name=&size=$size&comment=$comment&isp=$isp";
}
@list=(@list, [($b)]);
}
$torrent->announcelist(@list);
}
if ($opt eq current) {
opendir (TRR, "$sdirectory") || die "Cannot open $sdirectory: $!";
@tr = grep { !/^\.{1,2}$/ && (-f "$sdirectory"."/".$_) && /.torrent$/i } readdir TRR;
closedir TRR;
if (!defined @tr) {
exit 0;
} else {
foreach $tr(@tr) {
chomp $tr;
$torrentfile = "$sdirectory/$tr";
patch $torrentfile;
$torrent->save("$sdirectory/$tr");
}
}
} else {
opendir (TRR, "$fdirectory") || die "Cannot open $sdirectory: $!";
@tr = grep { !/^\.{1,2}$/ && (-f "$fdirectory"."/".$_) && /.torrent$/i } readdir TRR;
closedir TRR;
if (!defined @tr) {
exit 0;
} else {
foreach $tr(@tr) {
chomp $tr;
$torrentfile = "$fdirectory/$tr";
patch $torrentfile;
$torrent->save("$tdirectory/$tr");
system ("rm -f \"$fdirectory/$tr\"");
}
}
}
exit 0;
перед первым запуском нужно выполнить:
Код
/путь_к_патчеру/patcher.pl update
потом от root выполнить crontab -e и добавить следующие записи:
Код
*/1 * * * * /путь_к_патчеру/patcher.pl
0 0 * * * /путь_к_патчеру/patcher.pl update
+ исправил добавление comment для nnm-club.ru
+ список ретрекеров открывается 1 раз
+ теперь не сохраняются торренты в odirectory
+ данные статистики добавляются только для re-tracker.ru
Автор: FreeM@N 14.3.2009, 23:34
А что, так даже лучше
Единственно что - если файла ретрекеров нету или он пустой то лучше запустить update атоматически
Автор: kabachok 15.3.2009, 21:14
какой во фре нужен модуль для use LWP::Simple; ? никак найти не могу.
Автор: kolobok3D 17.3.2009, 5:50
FreeBSD
Код
make -C /usr/ports/www/p5-libwww install clean
make -C /usr/ports/converters/p5-Text-Iconv install clean
make -C /usr/ports/devel/p5-Config-IniFiles install clean
Автор: FreeM@N 20.3.2009, 1:25
Как показала практика retrackers.txt лучше хранить как было в первоначальном варианте - в директории с patcher.pl, т.к. /tmp/ имеет свойство чиститься...при перезапуске или по иным причинам.
Не удобно вобщем так
Автор: FreeM@N 22.3.2009, 20:15
Ещё чуток поковырял patcher.pl...поправил пару ошибок и сделал чтобы в начало ini файла вставлялась секция [description] т.к. Config::IniFiles->new почему-то стал ругатся на то что файл ini начинается не с секции, а с каментов, вобщем вот такое в итоге получилось:
CODE
#!/usr/bin/perl
$cur_dir = `dirname $0`;
$cur_dir =~ s/\n//;
$opt = $ARGV[0];
my $file_ini = "/tmp/trackerssimple.ini";
my $file_txt = "$cur_dir/retrackers.txt";
open (CONFIG, "$cur_dir/patcher.conf") || die "Cannot open file $cur_dirpatcher.conf: $!";
while (<CONFIG>) {
my $comment = '#';
if(!($_ =~/^$comment/)) {
my ($param,$arg) = split("=",$_);
chomp $param;
chomp $arg;
$param =~ s/\s//g;
$arg =~ s/\s//g;
if ($param eq "fdirectory") {
$fdirectory = $arg;
}
if ($param eq "tdirectory") {
$tdirectory = $arg;
}
if ($param eq "sdirectory") {
$sdirectory = $arg;
}
if ($param eq "gorod") {
$gorod = $arg;
}
if ($param eq "prov") {
$prov = $arg;
}
}
}
close (CONFIG);
$isp="$gorod+$prov";
if ($opt eq "update") {
use LWP::Simple;
use IO::Socket;
use Config::IniFiles;
use Text::Iconv;
$u2k=new Text::Iconv("utf-16","koi8-r//translit");
$list=$u2k->convert(get "http://re-tracker.ru/trackerssimple.ini");
open (INI, ">$file_ini");
print INI "[description]\n$list";
close (INI);
$subject = Config::IniFiles->new( -file => $file_ini ) or die "Can`t parse file $file_ini: $!";
$gorod = $subject->val("Город", "$gorod");
$prov = $subject->val("Провайдеры $gorod", "$prov");
@values = $subject->Parameters("Ретрекеры $gorod $prov");
foreach (@values) {
$retracker = $subject->val("Ретрекеры $gorod $prov", $_);
if ($retracker=~ m!(http://[^/]+/[^\s]+)!ig) {
push(@list, $&);
}
}
@list = sort(@list);
binmode STDOUT,":bytes";
my $p = "";
my $out = "";
for $t(@list) {
next if $t eq $p;
$p=$t;
$t=~m#//(.+?)
\d+)/#;
$s=new IO::Socket::INET(PeerAddr=>$1,PeerPort=>$2,Timeout=>2);
if($s) {
$out .= "$t\n";
close $s;
}
open (RTR, ">$file_txt");
print RTR "$out";
close (RTR);
}
exit 0;
}
require "$cur_dir/tf.pl";
open(RTR, $file_txt) || die "Cannot open file $file_txt: $!";
my @retrackers=<RTR>;
close RTR;
sub patch {
$torrent = new TF ("$torrentfile");
$a = $torrent->announce();
@list = ([($a)]);
foreach $retracker (@retrackers) {
chomp $retracker;
$b="$retracker";
if ($retracker eq "http:\/\/re-tracker.ru:
\/announce.php") {
$size = $torrent->length();
if ($size == 0) {
$filesref = $torrent->files();
@files = @{$filesref};
foreach (@files) {
%file = %{$_};
$size = $size + $file{'length'};
}
}
$comment = $torrent->publisherurl();
if (!defined $comment) {
$comment = $torrent->comment();
}
# $comment =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$b="$retracker?name=&size=$size&comment=$comment&isp=$isp";
}
@list=(@list, [($b)]);
}
$torrent->announcelist(@list);
}
if ($opt eq "current") {
opendir (TRR, "$sdirectory") || die "Cannot open $sdirectory: $!";
@tr = grep { !/^\.{1,2}$/ && (-f "$sdirectory"."/".$_) && /.torrent$/i } readdir TRR;
closedir TRR;
if (!defined @tr) {
exit 0;
} else {
foreach $tr(@tr) {
chomp $tr;
$torrentfile = "$sdirectory/$tr";
patch $torrentfile;
$torrent->save("$sdirectory/$tr");
}
}
} else {
opendir (TRR, "$fdirectory") || die "Cannot open $sdirectory: $!";
@tr = grep { !/^\.{1,2}$/ && (-f "$fdirectory"."/".$_) && /.torrent$/i } readdir TRR;
closedir TRR;
if (!defined @tr) {
exit 0;
} else {
foreach $tr(@tr) {
chomp $tr;
$torrentfile = "$fdirectory/$tr";
patch $torrentfile;
$torrent->save("$tdirectory/$tr");
system ("rm -f \"$fdirectory/$tr\"");
}
}
}
exit 0;
Автор: kolobok3D 10.4.2009, 23:55
как то так....
Код
if ($opt eq "update") {
use LWP::Simple;
use IO::Socket;
@list = split(/\n/, (get "http://re-tracker.ru/resume.php?tr_list=1&city=+$gorod&isp=+$prov"));
@list = sort(@list);
binmode STDOUT,":bytes";
my $p = "";
my $out = "";
for $t(@list) {
next if $t eq $p;
$p=$t;
$t=~m#//(.+?):(\d+)/#;
$s=new IO::Socket::INET(PeerAddr=>$1,PeerPort=>$2,Timeout=>2);
if($s) {
$out .= "$t\n";
close $s;
}
}
open (RTR, ">$file_txt");
print RTR "$out";
close (RTR);
exit 0;
}
Автор: FreeM@N 11.4.2009, 11:59
Цитата(kolobok3D @ 10.4.2009, 23:55)
как то так....
Хм.
Автор: drAX 18.5.2009, 14:58
А не могли бы вы выложить актуальную версию патчера на какой-нибудь файлообменник?
Автор: FreeM@N 18.5.2009, 22:27
Цитата(drAX @ 18.5.2009, 15:58)
А не могли бы вы выложить актуальную версию патчера на какой-нибудь файлообменник?
http://www.box.net/shared/uflm65bptr
Автор: fat.hamster 2.6.2009, 17:09
1) для юзеров "ниже среднего" в линухе (типа меня) все тут написанное слишком сложно, чтобы начать разбираться
2) я бы может и начал разбираться, но смотрим
Цитата
## Директория, за которой наблюдает rtorrent (в нее складываются пропатченые торренты).
а у меня таких папок штук 5 - для музыки, для hdtv, для мультиков и т.д...
так что не разобраться без поллитры.. проще найти еще какой-нить вариант (?)
а есть программа, которая бы под виндой патчила .torrent файл и сохраняла его на диск - чтобы я его мог перенести в папку на линух-машине, откуда rtorrent начал бы его качать?.. потому что как руками прямо в rtorrent-е добавить ретрекер - не знаю (может быть что и никак), как сохранить открытый в uTorrent-е файл - тоже не очень понимаю (м.б. тоже никак)..
а попробовать поиграться с ретрекерами хочу.. может у себя поднял бы, 27/7 комп уже почти 3 года работает..
Автор: FreeM@N 3.6.2009, 0:08
Цитата(fat.hamster @ 2.6.2009, 18:09)
...проще найти еще какой-нить вариант (?)
Попробуйте. Удачи.
Цитата(fat.hamster @ 2.6.2009, 18:09)
а есть программа, которая бы под виндой патчила .torrent файл и сохраняла его на диск - чтобы я его мог перенести в папку на линух-машине, откуда rtorrent начал бы его качать?
Обожемой. TorrentPatcher на этомже форуме однако...
Цитата(fat.hamster @ 2.6.2009, 18:09)
.. потому что как руками прямо в rtorrent-е добавить ретрекер - не знаю (может быть что и никак)
Сколько на свете удивительных людей...
http://libtorrent.rakshasa.no/wiki/RTorrentUserGuide
Цитата("http://libtorrent.rakshasa.no/wiki/RTorrentUserGuide")
backspace - Add torrent using an URL or file path. Use tab to view directory content and do auto-complete. Also, wildcards can be used. For example: ~/torrent/*
Цитата(fat.hamster @ 2.6.2009, 18:09)
как сохранить открытый в uTorrent-е файл - тоже не очень понимаю (м.б. тоже никак)..
Тоже не знаю...
Цитата(fat.hamster @ 2.6.2009, 18:09)
а попробовать поиграться с ретрекерами хочу.. может у себя поднял бы, 27/7 комп уже почти 3 года работает..
Судя по посту - хотения ноль целых, фиг десятых...Не мучайте себя и других. Юзайте http://freemandigger.selfip.net/.
P.S.: Т.к. версия немного устарела то создайте свой список ретрекеров (можно скопировать из тогоже TorrentPatcher-а после того как он проверит на доступность) и тупо вставляйте вместо предлагаемых http://freemandigger.selfip.net/ом (и пофиг какой город/район выбирать, главное основной трекер не удалите...который http://bt.torrents.ru/blablabla)
P.P.S.: На всякий случай: если есть вопросы по вышеизложенному - просьба задавать их в соответствующих темах.
Автор: Dekabrist 4.6.2009, 5:23
Почемуто не могу скачать...
Автор: fat.hamster 30.6.2009, 17:26
Цитата(FreeM@N @ 3.6.2009, 0:08)
Попробуйте. Удачи.
Обожемой. TorrentPatcher на этомже форуме однако...
однако
1) мне как-то стремно запускать программу, которая требует прав админа (Vista, UAC включен), только для того, чтобы она файл с данными поправила..
2) хорошо, я ее запустил, выбрал регион/провайдера, ищу кнопку, которая сохранит пропатченый торрент-файл.. нашел разве что на закладке "Дополнительные", кнопка Файл, с хинтом - "Путь к файлу трекеров и папка сохранения пропатченых торентов", нажимаю - предлагается выбрать ini файл, выбираю ini из папки установки - раз прога повесилась, другой раз загрузила список ретрекеров, который отфильтровала до 1 значения (видимо остальные в офлайне)
3) как мне открыть торент-файл для патчения? только зарегистрировав патчер как обработчик torrent-файлов? хорошо, я 2-кликаю по файлу, запускается патчер, запускается uTorrent и видимо грузит пропатченый торент-файл - мне собственно и нужен этот файл, где его искать?
похоже в папке с программой-патчером (это только для этого ей надо права админские, писать в Program Files, где 99% она будет установлена?)
патчеру не хватает на самом деле большой кнопки "Патч ми", чтоб я ее тыкнул, выбрал файл, сказал, куда сохранить..
а лично мне еще не хватает фичи - поменять папку сохранения файлов, создатели торент-файлов иногда называют папки не очень удачно, а rtorrent не умеет (как тот же uTorrent) писать _только_ в указанную папку, хоть сто раз указывай, но папку, которая в самом торенте указана, он дополнительно создаст..
Цитата
Сколько на свете удивительных людей...
http://libtorrent.rakshasa.no/wiki/RTorrentUserGuide
backspace Add torrent using an URL or file path. Use tab to view directory content and do auto-complete. Also, wildcards can be used. For example: ~/torrent/*
return Same as backspace, except the torrent remains inactive. (Use ^s to activate) ну как загрузить торент-файл я как-то в курсе; просто uTorrent позволяет прямо в программе добавить в список ретрекер, я думал - может rtorrent так умеет _как-то_
Автор: FreeM@N 30.6.2009, 17:43
Цитата(fat.hamster @ 30.6.2009, 18:26)
...............
ну как загрузить торент-файл я как-то в курсе; просто uTorrent позволяет прямо в программе добавить в список ретрекер, я думал - может rtorrent так умеет _как-то_
Пока что не может. Если бы он такое делать я бы (или ещё кто) сделал управление через XML-RPC, но увы он так не умеет, надёюсь когда-нибудь научится....
Автор: Vanzent 20.7.2009, 21:58
А можно как-то сделать так, что бы пачер не забивал трекеры которые уже присутствуют в торренте? А то остается только один трекер, первый, остальные забиваются трекерами из файла.
Автор: FreeM@N 21.7.2009, 10:47
Цитата(Vanzent @ 20.7.2009, 22:58)
А можно как-то сделать так, что бы пачер не забивал трекеры которые уже присутствуют в торренте? А то остается только один трекер, первый, остальные забиваются трекерами из файла.
Вообще-то так и задумано - берётся основной трекер и к нему добавляются ретрекеры из файла, если что-то не устраивает никто не мешает переделать как вам будт удобней...
Автор: kolobok3D 25.7.2009, 0:09
Обновил первый пост
Автор: FreeM@N 25.7.2009, 0:24
Цитата(kolobok3D @ 25.7.2009, 1:09)
Обновил первый пост
А как с конечными слешами в конфиге? нужно ставить или не критично? на тестовой версии в gentoo нужно было ставить...
Автор: kolobok3D 25.7.2009, 0:49
Цитата(FreeM@N @ 25.7.2009, 1:24)
А как с конечными слешами в конфиге? нужно ставить или не критично? на тестовой версии в gentoo нужно было ставить...
не важно
Автор: drAX 26.10.2009, 2:42
Цитата(Vanzent @ 20.7.2009, 22:58)
А можно как-то сделать так, что бы пачер не забивал трекеры которые уже присутствуют в торренте? А то остается только один трекер, первый, остальные забиваются трекерами из файла.
Тоже интересует, подскажите как это реализовать?
...Что, совсем никаких способов нет?
Автор: Dyr 24.11.2009, 13:46
Да лехко!
Можете посмотреть на http://www.pastie.org/712493 и по аналогии переделать сабжевый.
Подсказка - вместо использования поля announce на входе нужно использовать поле announce_list.
Автор: drAX 26.11.2009, 13:25
Цитата(Dyr @ 24.11.2009, 14:46)
Да лехко!
Можете посмотреть на http://www.pastie.org/712493 и по аналогии переделать сабжевый.
Подсказка - вместо использования поля announce на входе нужно использовать поле announce_list.
Огромное спасибо, чуток подправил сабжевый патчер и все отлично заработало=)
Автор: banec 27.11.2015, 16:30
Цитата(Dyr @ 24.11.2009, 13:46)
Да лехко!
Можете посмотреть на http://www.pastie.org/712493 и по аналогии переделать сабжевый.
Подсказка - вместо использования поля announce на входе нужно использовать поле announce_list.
announce_list - нету в Net::BitTorrent::File
Как прикрутить ? FreeBSD10.2 - всё из портов
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)