patcher для rtorrent, на основе патчера псевдотрекер |
Здравствуйте, гость ( Вход | Регистрация )
patcher для rtorrent, на основе патчера псевдотрекер |
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. скачать -------------------- | Перово | Ивановское| Новогиреево | Новокосино | | Тыкалка | |
|
|
14.3.2009, 18:49
Сообщение
#2
|
|
Участник Группа: Пользователи Сообщений: 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#//(.+?)\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
Причина редактирования: codebox
Прикрепленные файлы
-------------------- | Перово | Ивановское| Новогиреево | Новокосино | | Тыкалка | |
|
|
Текстовая версия | Сейчас: 1.11.2024, 2:42 |