The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите советом с Perl-скриптом зеркала!!!!"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите советом с Perl-скриптом зеркала!!!!"  
Сообщение от netop email on 13-Ноя-06, 18:20 
Есть скрипт на Perl для обновления антивируса NOD32! Суть его состоит в том, что он скачивает с сервера файлик со списком апдейтов, выбирает из него все ссылки на файлы и выкачивает их. Но это очень долгий процесс!!! Выкачивать каждый день где-то по 200Мб :((
У меня возникла идея! Скрипт делит описания файлов на пары (name,value). Можно например найти среди значений name параметр version и взять его значение, потом выбрать наибольшее и сохранить в файл! А при следующем запуске открыть этот файл и качать только те файлы, у которых параметр version больше!!!

Помогите плз. реализовать, я не очень чилен в Perl!!! Привожу ниже текст скрипта:

-----------------------------------
#!/usr/bin/perl

use LWP;

# path to store updates
$PATH="/lookj/htdocs/nod32_upd/";
# username/password for updates registered users
$LOGIN="AV-4435218";
$PASS="wj4vg62o4q";
# URL for updates
#$URL_UPD="http://u2.eset.com/nod_eval";
$URL_UPD="http://u3.eset.com/nod_upd/";

$URL_UPD =~ s/\/$//;
$URL_UPD =~ m/(.*:\/\/)(.*?)(\/.*)/;
$site = "$1$2";
if ($site =~ m//) {
    print "Enter correct URL\n";
    return;
}

unlink("$PATH/update.ver","$PATH/update.tmp");
download($PATH,"$URL_UPD/update.ver",$LOGIN,$PASS);
`/usr/local/bin/unrar e -y $PATH/update.ver $PATH 2> /dev/null`;
rename("$PATH/update.ver","$PATH/update.tmp");

$ver = "$PATH/update.tmp";
$vers = "$PATH/update.ver";

open(VER, "< $ver") or die "Couldn't open $ver for reading: $!\n";
open(VERS, "> $vers") or die "Couldn't open $vers for writing: $!\n";

%files = ();
%urls = ();

while (defined($line = <VER>) )
{
    chomp $line;
    $line =~ s/^\s+//;
    $line =~ s/\s+$//;
    ($par,$val)=split /=/, $line;
    
    if ($par =~ /file/ )
    {
    $name = $val;
    $name =~ s/\/.*\///;
    
    if ($name=~m/$val/) {$furl="$URL_UPD/$val";}
    else {$furl="$site$val";}
    $line="file=$name";
    }
    if ($par =~ /size/ )
    {
    $size = $val;
    $files{$name} = $size;
    $urls{$name} = "$furl";
    }
    print VERS "$line\r\n";
}
print "\n";

close(VER);
close(VERS);

foreach $f (keys %files) {
    if ( (-s ("$PATH/$f")) != $files{$f}){
    download($PATH,$urls{$f},$LOGIN,$PASS);
    }
}

chmod(0644,"$PATH/*");

sub download()
{
    my ($path, $url, $login, $pass) = @_;

# use external downloader
#    system("/usr/local/bin/lftp -c \"get -cO $path $url\"");
#    return;
# PERL downloader
    $url =~ m/(.*:\/\/)(.*)\/(.*)/;
    my $filename = $3;
    
    my $ua=LWP::UserAgent->new();
    $ua->agent("PerlUA/0.1");
    
    my $ua=LWP::UserAgent->new();
    $ua->agent("PerlUA/0.1");
    my $req = HTTP::Request->new(HEAD => "$url");
    $req->authorization_basic($login, $pass);
    my $document=$ua->request($req);
    if($document->is_success) {
        if (!($document->content_length== -s("$path/$filename"))) {
    
            my $req = HTTP::Request->new(GET => "$url");
            $req->authorization_basic($login, $pass);
            my $document=$ua->request($req);
        if($document->is_success) {
                    open(OUT, "> $path/$filename");
                print OUT $document->content;
                close(OUT);
            print "Downloading $url ";
            print "- ok\n";
        }
        else {
            print "$url ",$document->status_line,"\n";
        }
        }
        else {
#        print "$filename - exist\n";
        }
    }
    else {
        print "$url ",$document->status_line,"\n";
    }
}

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

А вот пример файлика update.ver - кусочек:

[HOSTS]
Japanese-ir=1@http://www.nod32.jp/irda/
English-ir=1@http://www.nod32.jp/irda/
Other=10@http://u1.eset.com/nod_upd/, 10@http://u2.eset.com/nod_upd/, 10@http://u3.eset.com/nod_upd/, 5@http://u4.eset.com/nod_upd/, 20@http://82.165.250.33/nod_upd/, 1@http://u7.eset.com/nod_upd/, 20@http://u20.eset.com/nod_upd/, 20@http://u21.eset.com/nod_upd/, 20@http://u22.eset.com/nod_upd/, 20@http://u23.eset.com/nod_upd/, 20@http://u24.eset.com/nod_upd/, 20@http://u25.eset.com/nod_upd/, 20@http://u26.eset.com/nod_upd/, 20@http://u27.eset.com/nod_upd/, 20@http://u28.eset.com/nod_upd/, 20@http://u29.eset.com/nod_upd/

Telefonica-Other=1@http://nod32.telefonica.com.ar:81/nod_upd/

[Expire]
ExpireList=expire.rar

[SETUP]
CompUpgradeProb=25
CompUpgradeMaxDelay=1128077999

[ENGINE0]
version=1860 (20061109)
build=8374
type=engine
level=0
base=268435456
date=09.11.2006
category=engine
buildregname=EngineBuild
file=engine0.nup
size=5339546
[ENGINE1]
version=1861 (20061110)
build=8377
type=engine
level=1
base=8374
date=10.11.2006
category=engine
buildregname=EngineBuild
file=engine1.nup
size=4162
[ENGINE2]
version=1863 (20061113)
build=8389
type=engine
level=2
base=8377
date=13.11.2006
category=engine
buildregname=EngineBuild
file=engine2.nup
size=19378
[ADVHEUR0]
version=1.033 (20060804)
build=1117
type=advheur
level=0
base=268435456
date=04.08.2006
category=engine
buildregname=AdvHeurBuild
file=advheur0.nup
size=399042
.....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Помогите советом с Perl-скриптом зеркала!!!!"  
Сообщение от madskull (ok) on 13-Ноя-06, 18:45 
может, лучше посмотреть на wget и не изобретать велосипед?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Помогите советом с Perl-скриптом зеркала!!!!"  
Сообщение от netop email on 19-Ноя-06, 09:57 
>может, лучше посмотреть на wget и не изобретать велосипед?

Не могу найти доки по нему :( Желательно на русском! Или хотябы примерчик можно?
Например мне надо скачать фалик http://195.5.55.87/file.rar в папку /lookj/temp с перезаписью (такой файлик в папке уже есть) и докачкой, если оборвется связь!
Заранее благодарен...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Помогите советом с Perl-скриптом зеркала!!!!"  
Сообщение от DeadLoco (ok) on 19-Ноя-06, 13:06 
>>может, лучше посмотреть на wget и не изобретать велосипед?
>
>Не могу найти доки по нему :( Желательно на русском! Или хотябы примерчик можно?

http://www.gnu.org/software/wget/

Гугль рулит.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Помогите советом с Perl-скриптом зеркала!!!!"  
Сообщение от netop email on 19-Ноя-06, 13:56 
>>>может, лучше посмотреть на wget и не изобретать велосипед?
>>
>>Не могу найти доки по нему :( Желательно на русском! Или хотябы примерчик можно?
>
>http://www.gnu.org/software/wget/
>
>Гугль рулит.


Пасибо большое!!!!! Кстати скриптик что я выложил - отлично работает, скачивает только обновленные файлы, а с виду - не сказать, я думал он каждый раз всю базу бцдет вытягивать :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру