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, 1:21
Сообщение
#2
|
|
Активный участник Группа: Главные Админы Сообщений: 661 Регистрация: 15.12.2008 Из: Москва Пользователь №: 15 |
Ура! Оно заработало!
Не так как хотелось но увы...при работе с 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/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 И модификация патчера (там надо ещё как-то сделать чтобы трекеры не считывались какждый раз, но как это сделать я не знаю ибо на перле не програмлю ): 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 ЛЕНЬ и другим...
Прикрепленные файлы
-------------------- |
|
|
Текстовая версия | Сейчас: 10.11.2024, 21:05 |