во время одной из пеерделок разломал нахрен

http://www.liveinternet.ru/stat/lissyara.su/
такая есть
Модератор: f0s
Ночью, я так понимаю, по московскому времени? А то ребята с длинного востока могут понять неправильно, часовые пояса, однако... А некоторые и из Австралии могут работать.lissyara писал(а):ночью сайт скачивайте...
достали уже...
Да. Но в отличии от wget'a качаются статьи для печати, и качает только те что еще не скачаны...kmb писал(а):Ургор, твой скрипт в конце что предоставит? директорию с хтмлками?
Патамучта главная идея зафигачить все это в один chm файл, и индекс что с раздела "карта сайта" переделывать на лету в реальную карту сайта, а не просто список опублекованных статей. Вот только сча времени нетkmb писал(а):Хм.. а почему не в 1-1? трудно с ориентироваться, что куда относиться...
да так и собираюсь.Urgor писал(а):А генерить при добавлении статьи и хранить где-нить в базе?
Кста, работу с меню поглядел?
http://forum.lissyara.su/viewtopic.php? ... 835#p27040lissyara писал(а):про меню - непонял
хм а чтобы разобрать страницу по частям типа: выводиться таблица и из таблицы ковырнуть значения и сложить их у себя. это надо поиграть с регулярными выражениями? примерчек подкинтеUrgor писал(а):Собсна вот, можа еще кому надо...Код: Выделить всё
#!/usr/bin/perl use LWP; $PATH = '/usr/home/urgor/liss/'; system("mkdir -p $PATH"); $defaultreferer = 'http://support.microsoft.com'; GetResurse('http://www.lissyara.su/scripts/style.css', 'http://www.lissyara.su/', $PATH . 'scripts/style.css'); download($PATH,'http://www.lissyara.su/?id=1302&commented=1&print=1','http://support.microsoft.com',$PATH . 'index.htm'); sub download() { my ($path, $abcurl, $referer, $realname) = @_; my %links = (); print "$abcurl\t$referer\t$realname\n"; my $ua = LWP::UserAgent->new; $ua->agent("Mozilla/8.0"); # Притворимся совместимым браузером ! my $req = HTTP::Request->new(GET => $abcurl); $req->header('Accept' => 'text/html'); $req->referer($referer); # send request my $res = $ua->request($req); # check the outcome if ($res->is_success) { my $content = $res->content; my $html = $content; my $filename = ''; #print "$realname\n"; open(fl, "> $realname"); print(fl $html); close(fl); #http://www.lissyara.su/?id=1503&commented=1&print=1 http://support.microsoft.com /usr/home/urgor/liss/1503.htm #Unmatched ) in regex; marked by <-- HERE in m/http://www.lissyara.su/\?id=1305) <-- HERE / at ./liss.pl line 62. # Разбираем скачанную страницу $pos = index($abcurl,'?id='); if($pos > 0) { # Производим выборку урлов (сцылок на другие сраницы) while (split /\n/, $content =~ m/<a\b([^>]+)>(.*?)<\/a>/ig) { my $ahref = $1; my $text = $2; if ($ahref =~ m/\bhref\s*=\s*(?:"([^"]*)"|'([^']*)'|([^'">\s]+))/xi) { my $url = $+; # print $url . "\t$ahref 1\n"; $pos = index($url,'?id='); if ($pos > -1) { $ourl = $url; if (index($url, '#') > 0) { $url = substr($url, 0, index($url,'#')); } if (index($url, ')') > 0) { $url = substr($url, 0, index($url,')')); } if (index($url, '&') > 0) { $url = substr($url, 0, index($url,'&')); } $filename = substr($url, $pos + 4, length($url) - 4); $filename =~ m/\d+/; $filename = $filename. '.htm'; #print "$url\t$filename\n"; # Правим $html на локальные адреса if (index($url,'?') > -1) { $url = '\\' . substr($url, index($url, '?'), length($url)); # $url =~ s/\?/\\?/; } # if index $filename =~ s/\/*//; #print "$url\t$filename\n"; $html =~ s/$url/$filename/g; # Если такой страницы нет -- качаем if (not -e ("$path/$filename")) { $url =~ s/^\.\//http:\/\/www.lissyara.su\//; $url =~ s/.*\/*\?/http:\/\/www.lissyara.su\/\?/; if(index($url,':') == -1) { $url = 'http://www.lissyara.su/' . $url; } @links{$url} = "$path$filename"; } #print "$url\t$filename\n"; } # if ?id= $pos = index($url,'?file='); if ($pos > -1) { if ($ahref =~ m/\btitle\s*=\s*(?:"([^"]*)"|'([^']*)'|([^'">\s]+))/xi) { $filename = $+; } else { $filename = substr($url, $pos + 6, length($url) - 6); } # else my $ourl = $url; $url =~ s/^\.\///; $url =~ s/.*\/*\?//; if(index($url,':') == -1) { $url = 'http://www.lissyara.su/scripts/downloads.php?' . $url; } # print "------> $ourl\t$url\t$filename\n"; # Хытрый Лис проверяет referer, придется подсунуть правильный ;-) GetResurse($url, $abcurl, $path . 'files/' .$filename); # Правим $html на локальные адреса if (index($ourl,'?') > -1) { $ourl =~ s/\?/\\?/; } # if index $filename =~ s/\/*//; $filename = 'files/' . $filename; $html =~ s/$ourl/$filename/g; } # if ?file= } # if $ahref href } # while # Выбираем ресурсы (порно-картинки и прочую муть) while (split /\n/, $content =~ m/<img\b([^>]+)>/ig) { $res = $1; if ($res =~ m/\bsrc\s*=\s*(?:"([^"]*)"|'([^']*)'|([^'">\s]+))/xi) { $filename = $+; $filename =~ s/^\.\///; $filename =~ s/.*\/*\?//; $filename =~ s/\\//; if (length($filename) == 0) { $url = 'http://www.lissyara.su/'; $filename = '1000.htm' } if(index($filename,':') == -1) { $url = 'http://www.lissyara.su/' . $filename; } else { $url = $filename; } # print "-------> $url\t$filename\n"; GetResurse($url, $defaultreferer, $path . $filename); # Правим $html на локальные адреса if (index($url,'?') > -1) { $url =~ s/\?/\\?/; } # if index $filename =~ s/\/*//; $html =~ s/$url/$filename/g; } # if } # while open(fl, "> $realname"); print(fl $html); close(fl); while (($url, $localurl) = each(%links)) { download($path, $url . '&commented=1&print=1', $defaultreferer, $localurl); } # while } # if $pos } else { print "Error: " . $res->status_line . "\n"; } } # sub download sub GetResurse() { my ($abcurl, $referer, $realname) = @_; if (not (-e "$realname")) { my $dirname = substr($realname, 0, rindex($realname, '/')); if (not (-e "$dirname")) { system("mkdir -p $dirname"); } if (index($referer, '&')>0) { $referer = substr($referer, 0, index($referer, '&')); } print "\nDownload resurse -> $abcurl\nReferer -> $referer\nSaved as -> $realname\n"; my $ua = LWP::UserAgent->new; $ua->agent("Mozilla/8.0"); # Притворимся совместимым браузером ! my $req = HTTP::Request->new(GET => $abcurl); # $req->header('Accept' => 'text/html'); $req->referer($referer); # send request my $res = $ua->request($req, $realname); if ($res->is_success) { # print $res->content; } else { print "Error: " . $res->status_line . "\n"; } } # if not file exists } # sub GetResurse