Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [perl] torrent_renamer (https://forum.antichat.xyz/showthread.php?t=92733)

eLWAux 20.11.2008 20:30

[perl] torrent_renamer
 
torrent_renamer
by eLWAux
thnk. Kaimi

http://s41.radikal.ru/i092/0811/19/cee6bab9ff55.jpg
скрипт которий переименовивает .torrent
(маски: [torrents.ru].??????????.torrent, где ?- какая то цифра)
на файл с именем первого файла торрента ;)
например:
в папке со скриптом єсть файл: [torrents.ru].13433188.torrent
после запуска скрипт, имя файла будет:
Madagaskar.2.2008.aviю.torrent


для запуска нужет ActivePerl или другая среда

в .pl файле можна изменить:
$dir
папка, в которой переименовываться торренти:
(например: $dir= '.'; -поточная папка
$dir= 'c:\windows' -диск c:, папка windows
)

$pr
текст, которий будет добавлен до имени нового файла с самого начала
(например: $pr= 'test'; - тогда все переименование файли будут иметь имя: test????.torrent)

использование:
1( кладем скрипт в папку с торрентами
2( запускаем скрипт
3( после завершения работи, скрипт покажет статистику:
[i] renamed: количесто_переименованих_ф айлов
[%] количесто_перемменованих_ф айлов_в_проценатах% renamed!
4( смотрим в файл result_rename.txt, там полная статистика переименованих и неПереименованих файлов

пример файла result_rename.txt:
Цитата:

renamed: 10 files
71% of all file(s)
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
before:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
Madagaskar.torrent
[torrents.ru].11641143 - Укуренные.torrent
[torrents.ru].11697517.torrent
[torrents.ru].12933424.torrent
[torrents.ru].13433188.torrent
[torrents.ru].13504075.torrent
[torrents.ru].13669520 - Пламя и Цитрон.torrent
[torrents.ru].13743508 - После прочтения cжечь.torrent
[torrents.ru].1776583 - Отступники.torrent
[torrents.ru].4841400 - Аристотель. Все обо всем..torrent

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
after:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
Madagaskar.2.2008.avi.torrent
ђЈђє‘ѓ‘ЂђµђЅђЅ‘‹ђµ.torrent
Hackers_1995_HDRip_Rus_PowerTracker.org.avi.torren t
Vavilon.2008.P.DVDRip.KINODOME.avi.torrent
ANNIHILATION2.avi.torrent
sway_gaming.avi.torrent
Plamja.i.Citron.2008.P.DVDRip_INTERFILM.avi.torren t
posle_proctenia_AVC.mkv.torrent
Otstupniki.avi.torrent
Aristotel.avi.torrent

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-

not renamed:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
Antix-M7.2.zip.torrent
menuetos-x86-0.84.qcow.img.zip.torrent
mona-0.3.0a8.qcow.img.zip.torrent
my.torrent
єсли отредактировать скрипт и сделать так что $pr='[torrent]';

тогда после работи скрипта в файле result_rename.txt ми увидем следуеще:
Цитата:

renamed: 14 files
100% of all file(s)
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
before:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
Antix-M7.2.zip.torrent
Madagaskar.torrent
menuetos-x86-0.84.qcow.img.zip.torrent
mona-0.3.0a8.qcow.img.zip.torrent
my.torrent
[torrents.ru].11641143 - Укуренные.torrent
[torrents.ru].11697517.torrent
[torrents.ru].12933424.torrent
[torrents.ru].13433188.torrent
[torrents.ru].13504075.torrent
[torrents.ru].13669520 - Пламя и Цитрон.torrent
[torrents.ru].13743508 - После прочтения cжечь.torrent
[torrents.ru].1776583 - Отступники.torrent
[torrents.ru].4841400 - Аристотель. Все обо всем..torrent

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
after:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
[torrent]Antix-M7.2.zip.torrent
[torrent]Madagaskar.2.2008.avi.torrent
[torrent]menuetos-x86-0.84.qcow.img.zip.torrent
[torrent]mona-0.3.0a8.qcow.img.zip.torrent
[torrent]my.torrent
[torrent]ђЈђє‘ѓ‘ЂђµђЅђЅ‘‹ђµ.torrent
[torrent]Hackers_1995_HDRip_Rus_PowerTracker.org.avi.torren t
[torrent]Vavilon.2008.P.DVDRip.KINODOME.avi.torrent
[torrent]ANNIHILATION2.avi.torrent
[torrent]sway_gaming.avi.torrent
[torrent]Plamja.i.Citron.2008.P.DVDRip_INTERFILM.avi.torren t
[torrent]posle_proctenia_AVC.mkv.torrent
[torrent]Otstupniki.avi.torrent
[torrent]Aristotel.avi.torrent

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-

not renamed:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
как видно все переименование файли сначала имеют текст:
[torrent], то что ми установили в $pr..

p.s.:
1( скрипт некорректо отображает UTF8 текст, как исправить незнаю; кто подскажет, буду только рад)
2( все замечания\предложения пишем тут

также, я через несколько дней доделаю скрипт, которий проверяет какие торренти загружени, какие нет, и в соответствии перемещает торретки в другие папки..

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
perl::code
Код:

system('cls');

##########################################################################
##########################################################################
##########################################################################

 $dir                = '.';                        #without /
 $pr                = '[torrent]';

##########################################################################
##########################################################################
##########################################################################

sub saveFile
{
        open(myFILE,">$_[0]") || die "error: $!";
        print myFILE $_[1];
        close(myFILE);
}

sub cyr #Kaimi modifed
{
        ($_)=@_;
        y/А-яЁё/\x80-\xaf\xe0-\xf1/;
        return $_;
}

sub read_str
{
        if ($_[0] =~ /:$_[1](\d{0,4}):/)
        {return substr($_[0], index($_[0],$_[1])+length($_[1])+length($1)+1, $1)}
        else {return '';}
}

sub read_num
{
        if ($_[0] =~ /$_[1]i(\d{0,64})e/)
        {return $1} else {return ''}
}

sub rename_torrent #Kaimi modifed
{
        my $new_name;
        $new_name=cyr(read_str($_[0],'name'));
        $new_name=~s/\[torrents.ru\]//ge;
        return $new_name.'.torrent';
}

##########################################################################
##########################################################################
##########################################################################

system('cls');

print "--====--=--=- eLWAux -=-==-====--\n";
print "--===-== torrent renamer -=-===--\n";
print "--====-==-=-=-=-=-=-=-=--==-===--\n\n";

opendir(TEMPDIR,$dir) or die("[-] Error ($!)..");
@FILES=grep(/\.torrent$/i, readdir TEMPDIR);
closedir(TEMPDIR);

print '[i] '.@FILES." *.torrent's found\n";
print '[i] '.localtime(time())."\n";

print "--====-==-=-=-=-=-=-=-=--==-===--\n\n";

$g=0;$bef='';$aft='';$nren='';
foreach my $file(@FILES) {
        $res='';
        open(DESC, $file);
        read(DESC,$res,-s $file);
        close(DESC);

        print '    '.cyr($file)."\n";
        $n = $pr.rename_torrent($res);
        if ($n eq $file)
                { print '[-] '.$n."\n";
                  $nren.=$n."\n";
                } else
                { $g++;
                  rename $file,$n;
                  $bef.=$file."\n";
                  $aft.=$n."\n";
                  print '[+] '.$n."\n";
                }       
        $i++;
        }

print '[i] renamed: '.$g."\n";
print '[%] '.int(($g/@FILES)*100).'% renamed!';

saveFile('result_rename.txt',
        "renamed: $g files\n".
        "        ".int(($g/@FILES)*100)."% of all file(s)\n".
        "==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
        "before:\n".
        "==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
        $bef."\n".
        "==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
        "after:\n".
        "==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
        $aft."\n".
        "==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
        "\nnot renamed:\n".
        "==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
        $nren."\n");
<STDIN>;


MaTpOc 22.11.2008 22:34

А можно поподробней для чего и что делает этот скрипт.

rushter 22.11.2008 22:41

Для удобства :)

eLWAux 23.11.2008 00:09

Цитата:

А можно поподробней для чего и что делает этот скрипт.
когда качаеш торренти, то они имеют названия, типа: [torrent].12937198.torrent или что то подобное..; так вот насобиралося у тебя (как у меня;) штук 100таких файлов с непонятним названиям.. смотриш ти на весь єтот бред и думаеш "блин.. и что я с єтого посмотрел?".. можна каждий торрент по-очереди в прогу кидать и смотреть что за торрент., но єто не виход, так как 100 файлов заи**ся смотреть..

так вот я написал скрипт, которий єти все торренти с непонятним названиям переименовивает в "нормальний" вид..
пр: нашел ти на форуме torrents.ru фильм бригаду. скачал торрент 1239888217.torrent. закачал бригаду. посмотрел. удалил фильм. скачал потом єщо один фильм, єщо один, .... и так насобиралось много торрентов. и ти внось захотел посмотреть бригаду, но не помниш названия торрета. кладеш скрипт в папку с єтими *.torrent файлами, запускаеш. после завершения роботи скрипт переименует 1239888217.torrent в Brigada.torrent

а в общем , скрипт просто для удобства)
превращает "мусор" в ценность)

Kaimi 23.11.2008 00:52

Цитата:

sub cyr
{
$phrase = shift;
$phrase =~ y/А-яЁё/\x80-\xaf\xe0-\xf1/;
return $phrase;
}

Моно сделать так
Код:

sub cyr
{
        ($_)=@_;
        y/А-яЁё/\x80-\xaf\xe0-\xf1/;
        return $_;
}

Цитата:

open(DESC, @FILES[$i]);
while (<DESC>) {$res.= $_;}
close(DESC);
Код:


open(DESC, $FILES[$i]);
read(DESC,$res,-s $FILES[$i]);
close(DESC);

Цитата:

for ($i=0;$i<@FILES;) {
мне кажется так красивее
Код:

foreach my $file(@FILES) {
Цитата:

sub rename_torrent
{
local $new_name,$old_name;

$old_name=$_[0];
$new_name=cyr(read_str($_[0],'name'));
$new_name=~s/\[torrents.ru\]//ge;
return $new_name.'.torrent';
#rename old new
}

А зачем переменная $old_name ? зачем юзать local? в мануале вроде пишут что лучше my юзать...

eLWAux 23.11.2008 01:54

Kaimi, спасибо за ошибки)
кстате, sub cyr твоя функция)

Solker 23.11.2008 02:00

То же самое, только на PHP и в 2 раза меньше.
Плюс корректно работает с UTF-8.

PHP код:

<?php

$dir 
scandir('.');
foreach(
$dir as $filename)
{
  if(
$filename == '.' or $filename == '..') continue;
  if(
substr($filename,-7) != 'torrent') continue;

  
$handle fopen($filename"r");
  
$buffer fgets($handle4096);
  
fclose($handle);
  
  
preg_match('#\[torrents.ru\].(.+?).torrent#',$filename,$id);
  
$result explode(':'$buffer);

  foreach(
$result as $key => $date)
  {
    if(
substr($date,0,4)=='name') {
      
$name str_replace(' ','.',substr($result[$key+1],0,strlen($result[$key+1])-2));
      break;
    } 
  }
  
  if(
detectUTF8($name)) $name iconv('UTF-8''windows-1251'$name);
  
  echo 
"[{$id[1]}].$name.torrent<br>\n"//Or Rename File
}

function 
detectUTF8($string)
{
        return 
preg_match('%(?:
        [\xC2-\xDF][\x80-\xBF]        # non-overlong 2-byte
        |\xE0[\xA0-\xBF][\x80-\xBF]               # excluding overlongs
        |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}      # straight 3-byte
        |\xED[\x80-\x9F][\x80-\xBF]               # excluding surrogates
        |\xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
        |[\xF1-\xF3][\x80-\xBF]{3}                  # planes 4-15
        |\xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
        )+%xs'
$string);
}

?>

Не понимаю, зачем под такой бред создавать отдельную тему, и ставить свои копирайты.

Kaimi 23.11.2008 02:11

Цитата:

кстате, sub cyr твоя функция)
Эм, это где ты у меня её видел?

eLWAux 23.11.2008 14:04

Цитата:

Не понимаю, зачем под такой бред создавать отдельную тему, и ставить свои копирайты.
Solker,
тема создана чтоб показать роботу с torrent'ами на перле
копирайти поставил потому что я написал с нуля сам
detectUTF8 всегда можно добавить
размер моего скрипта больше твоего (єсли єто твой скрипт..) потому что у меня все разбито про функциях, єсли все слепить, то получиться не больше твоего

Цитата:

Эм, это где ты у меня её видел?
точно не помню, но вроде где-то в разделе "для новичков" ;)

Solker 23.11.2008 16:38

Цитата:

1( скрипт некорректо отображает UTF8 текст, как исправить незнаю; кто подскажет, буду только рад)
detectUTF8 всегда можно добавить
Ну так и добавь.


Время: 23:26