IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
patcher для rtorrent, на основе патчера псевдотрекер
kolobok3D
сообщение 5.3.2009, 21:53
Сообщение #1


Участник
**

Группа: Пользователи
Сообщений: 27
Регистрация: 22.2.2009
Пользователь №: 569



Версия 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
сообщение 6.3.2009, 12:59
Сообщение #2


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Спасибо, нужно будет затестить...

Скрипт для проверки ретрекеров выглядит примерно вот так:
Это немного модифицированная версия скрипта 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
сообщение 7.3.2009, 1:39
Сообщение #3


Участник
**

Группа: Пользователи
Сообщений: 27
Регистрация: 22.2.2009
Пользователь №: 569



Ну получилось что-то
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
Причина редактирования: codebox

Прикрепленные файлы
Прикрепленный файл  patcher.tar.gz ( 8.33 килобайт ) Кол-во скачиваний: 28
 


--------------------

| Перово | Ивановское| Новогиреево | Новокосино |
| Тыкалка |
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 13.3.2009, 1:54
Сообщение #4


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Какие-либо проблемы замечены?
А зачем столько директорий кстате? Одной обойтись не получится (например той, где rtorrent хранит торенты)?


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
kolobok3D
сообщение 13.3.2009, 10:23
Сообщение #5


Участник
**

Группа: Пользователи
Сообщений: 27
Регистрация: 22.2.2009
Пользователь №: 569



"fdirectory = /data/share/torrents/" шедулит скрипт и передает в
"tdirectory = /data/.torrents/" которую шедулит rtorrent, а
"odirectory = /data/share/torrents/.old/" просто для удобства.


--------------------

| Перово | Ивановское| Новогиреево | Новокосино |
| Тыкалка |
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 14.3.2009, 1:21
Сообщение #6


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Ура! Оно заработало!

Не так как хотелось но увы...при работе с 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
ЛЕНЬ и другим...
Прикрепленные файлы
Прикрепленный файл  patcher.tar.gz ( 4.87 килобайт ) Кол-во скачиваний: 11
 


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
kolobok3D
сообщение 14.3.2009, 18:49
Сообщение #7


Участник
**

Группа: Пользователи
Сообщений: 27
Регистрация: 22.2.2009
Пользователь №: 569



Спасибо за идею, но я поступил немного подругому:
Все в операции выполняет 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
Причина редактирования: codebox

Прикрепленные файлы
Прикрепленный файл  patcher.tar.gz ( 3.92 килобайт ) Кол-во скачиваний: 29
 


--------------------

| Перово | Ивановское| Новогиреево | Новокосино |
| Тыкалка |
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 14.3.2009, 23:34
Сообщение #8


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



А что, так даже лучше smile.gif

Единственно что - если файла ретрекеров нету или он пустой то лучше запустить update атоматически


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
kabachok
сообщение 15.3.2009, 21:14
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 2
Регистрация: 15.3.2009
Пользователь №: 832



какой во фре нужен модуль для use LWP::Simple; ? никак найти не могу.
Перейти в начало страницы
 
+Цитировать сообщение
kolobok3D
сообщение 17.3.2009, 5:50
Сообщение #10


Участник
**

Группа: Пользователи
Сообщений: 27
Регистрация: 22.2.2009
Пользователь №: 569



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
Сообщение #11


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Как показала практика retrackers.txt лучше хранить как было в первоначальном варианте - в директории с patcher.pl, т.к. /tmp/ имеет свойство чиститься...при перезапуске или по иным причинам.
Не удобно вобщем так smile.gif


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 22.3.2009, 20:15
Сообщение #12


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 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#//(.+?)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
сообщение 10.4.2009, 23:55
Сообщение #13


Участник
**

Группа: Пользователи
Сообщений: 27
Регистрация: 22.2.2009
Пользователь №: 569



как то так....
Код
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
Сообщение #14


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Цитата(kolobok3D @ 10.4.2009, 23:55) *
как то так....

Хм. clapping.gif


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
drAX
сообщение 18.5.2009, 14:58
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 8
Регистрация: 18.3.2009
Пользователь №: 889



А не могли бы вы выложить актуальную версию патчера на какой-нибудь файлообменник?
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 18.5.2009, 22:27
Сообщение #16


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



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

http://www.box.net/shared/uflm65bptr


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
fat.hamster
сообщение 2.6.2009, 17:09
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 4
Регистрация: 2.6.2009
Пользователь №: 1 812



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

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

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


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

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

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

а попробовать поиграться с ретрекерами хочу.. может у себя поднял бы, 27/7 комп уже почти 3 года работает..
Перейти в начало страницы
 
+Цитировать сообщение
FreeM@N
сообщение 3.6.2009, 0:08
Сообщение #18


Активный участник
***

Группа: Главные Админы
Сообщений: 661
Регистрация: 15.12.2008
Из: Москва
Пользователь №: 15



Цитата(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
сообщение 4.6.2009, 5:23
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 1
Регистрация: 18.5.2009
Пользователь №: 1 662



Почемуто не могу скачать...
Перейти в начало страницы
 
+Цитировать сообщение
fat.hamster
сообщение 30.6.2009, 17:26
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 4
Регистрация: 2.6.2009
Пользователь №: 1 812



Цитата(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 так умеет _как-то_

Перейти в начало страницы
 
+Цитировать сообщение

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
17 чел. читают эту тему (гостей: 17, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 1.11.2024, 2:43
Top.Mail.Ru