Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: patcher для rtorrent
Re-Tracker | Система локальных ретрекеров | Ретрекер > РеТрекер > Патчер торрентов
kolobok3D
Версия 1.1
Конфиг:
Код
/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.
скачать
FreeM@N
Спасибо, нужно будет затестить...

Скрипт для проверки ретрекеров выглядит примерно вот так:
Это немного модифицированная версия скрипта ShurShur
CODE
#!/usr/bin/perl
use LWP::Simple;
use IO::Socket;
use POSIX;
# no Text::Iconv on Windows sad.gif
#use Text::Iconv;
use strict;
no utf8;

# hack: remove zero bytes from ASCII characters in UTF-16
sub conv {
my ($s)bomb.gif_;
$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#//(.+?)sad.gif\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
Ну получилось что-то
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#//(.+?)sad.gif\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
Какие-либо проблемы замечены?
А зачем столько директорий кстате? Одной обойтись не получится (например той, где rtorrent хранит торенты)?
kolobok3D
"fdirectory = /data/share/torrents/" шедулит скрипт и передает в
"tdirectory = /data/.torrents/" которую шедулит rtorrent, а
"odirectory = /data/share/torrents/.old/" просто для удобства.
FreeM@N
Ура! Оно заработало!

Не так как хотелось но увы...при работе с rtorrent по XML-RPC он не обновляет спиок трекеров...

Итак немного пошаманив получил скрипт который запускается (ну всмысле если его в крон назначить то он будет запускаться smile.gif) раз в сутки, обновляет список трекеров (если нужно), останавливает rtorrent, патчит торенты в директории сессий и снова его запускает smile.gif

При этом скрипту важно знать только одну директорию - где 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/RTorren...onSystemStartup
/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


И модификация патчера (там надо ещё как-то сделать чтобы трекеры не считывались какждый раз, но как это сделать я не знаю ибо на перле не програмлю happy.gif):
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\"");
}
}
}


И конечно же все говорят большое спасибо:
kolobok3D
ShurShur
ЛЕНЬ и другим...
kolobok3D
Спасибо за идею, но я поступил немного подругому:
Все в операции выполняет 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#//(.+?)sad.gif\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:mega_shok.gif\/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
А что, так даже лучше smile.gif

Единственно что - если файла ретрекеров нету или он пустой то лучше запустить update атоматически
kabachok
какой во фре нужен модуль для use LWP::Simple; ? никак найти не могу.
kolobok3D
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
Как показала практика retrackers.txt лучше хранить как было в первоначальном варианте - в директории с patcher.pl, т.к. /tmp/ имеет свойство чиститься...при перезапуске или по иным причинам.
Не удобно вобщем так smile.gif
FreeM@N
Ещё чуток поковырял 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#//(.+?)sad.gif\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:mega_shok.gif\/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
как то так....
Код
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
Цитата(kolobok3D @ 10.4.2009, 23:55) *
как то так....

Хм. clapping.gif
drAX
А не могли бы вы выложить актуальную версию патчера на какой-нибудь файлообменник?
FreeM@N
Цитата(drAX @ 18.5.2009, 15:58) *
А не могли бы вы выложить актуальную версию патчера на какой-нибудь файлообменник?

http://www.box.net/shared/uflm65bptr
fat.hamster
1) для юзеров "ниже среднего" в линухе (типа меня) все тут написанное слишком сложно, чтобы начать разбираться smile.gif

2) я бы может и начал разбираться, но смотрим

Цитата
## Директория, за которой наблюдает rtorrent (в нее складываются пропатченые торренты).


а у меня таких папок штук 5 - для музыки, для hdtv, для мультиков и т.д...

так что не разобраться без поллитры.. проще найти еще какой-нить вариант (?)

а есть программа, которая бы под виндой патчила .torrent файл и сохраняла его на диск - чтобы я его мог перенести в папку на линух-машине, откуда rtorrent начал бы его качать?.. потому что как руками прямо в rtorrent-е добавить ретрекер - не знаю (может быть что и никак), как сохранить открытый в uTorrent-е файл - тоже не очень понимаю (м.б. тоже никак)..

а попробовать поиграться с ретрекерами хочу.. может у себя поднял бы, 27/7 комп уже почти 3 года работает..
FreeM@N
Цитата(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 года работает..

Судя по посту - хотения ноль целых, фиг десятых...Не мучайте себя и других. Юзайте WEB-патчер.
P.S.: Т.к. версия немного устарела то создайте свой список ретрекеров (можно скопировать из тогоже TorrentPatcher-а после того как он проверит на доступность) и тупо вставляйте вместо предлагаемых WEB-патчером (и пофиг какой город/район выбирать, главное основной трекер не удалите...который http://bt.torrents.ru/blablabla)

P.P.S.: На всякий случай: если есть вопросы по вышеизложенному - просьба задавать их в соответствующих темах.
Dekabrist
Почемуто не могу скачать...
fat.hamster
Цитата(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
Цитата(fat.hamster @ 30.6.2009, 18:26) *
...............
ну как загрузить торент-файл я как-то в курсе; просто uTorrent позволяет прямо в программе добавить в список ретрекер, я думал - может rtorrent так умеет _как-то_

Пока что не может. Если бы он такое делать я бы (или ещё кто) сделал управление через XML-RPC, но увы он так не умеет, надёюсь когда-нибудь научится....
Vanzent
А можно как-то сделать так, что бы пачер не забивал трекеры которые уже присутствуют в торренте? А то остается только один трекер, первый, остальные забиваются трекерами из файла.
FreeM@N
Цитата(Vanzent @ 20.7.2009, 22:58) *
А можно как-то сделать так, что бы пачер не забивал трекеры которые уже присутствуют в торренте? А то остается только один трекер, первый, остальные забиваются трекерами из файла.

Вообще-то так и задумано - берётся основной трекер и к нему добавляются ретрекеры из файла, если что-то не устраивает никто не мешает переделать как вам будт удобней...
kolobok3D
Обновил первый пост
FreeM@N
Цитата(kolobok3D @ 25.7.2009, 1:09) *
Обновил первый пост

А как с конечными слешами в конфиге? нужно ставить или не критично? на тестовой версии в gentoo нужно было ставить...
kolobok3D
Цитата(FreeM@N @ 25.7.2009, 1:24) *
А как с конечными слешами в конфиге? нужно ставить или не критично? на тестовой версии в gentoo нужно было ставить...

не важно
drAX
Цитата(Vanzent @ 20.7.2009, 22:58) *
А можно как-то сделать так, что бы пачер не забивал трекеры которые уже присутствуют в торренте? А то остается только один трекер, первый, остальные забиваются трекерами из файла.

Тоже интересует, подскажите как это реализовать?

...Что, совсем никаких способов нет?
Dyr
Да лехко!
Можете посмотреть на мой патчер и по аналогии переделать сабжевый.
Подсказка - вместо использования поля announce на входе нужно использовать поле announce_list.
drAX
Цитата(Dyr @ 24.11.2009, 14:46) *
Да лехко!
Можете посмотреть на мой патчер и по аналогии переделать сабжевый.
Подсказка - вместо использования поля announce на входе нужно использовать поле announce_list.


Огромное спасибо, чуток подправил сабжевый патчер и все отлично заработало=)
banec
Цитата(Dyr @ 24.11.2009, 13:46) *
Да лехко!
Можете посмотреть на мой патчер и по аналогии переделать сабжевый.
Подсказка - вместо использования поля announce на входе нужно использовать поле announce_list.

announce_list - нету в Net::BitTorrent::File
Как прикрутить ? FreeBSD10.2 - всё из портов
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2017 IPS, Inc.