Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Для тех кто не против помочь с FAQ. Уменьшает ваш трафик где-то 8 к 1. 
:(
    Опции темы
aleksnn
Дата 8.6.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 27.4.2005

Репутация: 2
Всего: 2



Соорудил велосипед
Код

#!/usr/bin/perl -w
 
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;
use HTML::LinkExtor;

$|=1;

my      $urlbegin = 'http://forum.vingrad.ru/index.php?showforum=183';
my      $patern = 'http://forum.vingrad.ru/index.php?';
my      $forprint ='http://forum.vingrad.ru/index.php?act=Print&client=printer&f=183&t=';
my      $last_post = '&prune_day=100&sort_by=Z-A&sort_key=last_post&st=';
my      $path = 'C:\000\\';
my      ($last_post_num,@link) =();
my      $ua = LWP::UserAgent -> new();

my      $parser = HTML::LinkExtor ->new(\&callback);
       
my      $response = $ua->get( $urlbegin ) ;
      $parser->parse($response ->content)->eof;
      
my    $post_num=$last_post_num;
      
      open (file,">$path.f$post_num\.htm") or die $!;
      print file $response ->content;
      close file;
      
      while ($post_num ){
      $response = $ua->get( $urlbegin.$last_post.$post_num ) ;
      die $response->status_line unless $response->is_success;
      $parser->parse($response ->content)->eof;
      
      open (file,">$path.f$post_num\.htm") or die $!;
      print file $response ->content;
      close file;
      $post_num -=40;
      }
      
      {
       my %seen; #??? ??? ?????? 
       @link = grep {$_ && !$seen{$_}++} @link;
      }
      
      foreach (@link) { 
      $response = $ua->get( $forprint.$_ ) ;
      open (file,"+>>$path$_\.htm") or die $!;
      print file $patern,'showtopic=',$_;
      print file $response ->content;
      close file;
      }
      
  sub callback {
     my($tag, %attr) = @_;
     return if $tag ne 'a' ;
     if (%attr->{href}=~ m/^$patern.?showtopic=(\d*)/i){push(@link, $1)}
     elsif (%attr->{href}=~ m/^$patern.showforum=183$last_post(\d*)/i){
     $last_post_num = $1 unless $last_post_num > $1} }


Как-бы сделать его по пальцастее smile
Скорость скачивания у него от слабая.
Можете запустить в неколько потоков? Я пока нет ;)

Это сообщение отредактировал(а) aleksnn - 8.6.2005, 22:26
PM MAIL   Вверх
chaos
Дата 9.6.2005, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



в чем проблема то? Нужно в несколько потоков пускать?
PM WWW   Вверх
aleksnn
Дата 9.6.2005, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 27.4.2005

Репутация: 2
Всего: 2



Если запустишь сие чудо, то увидишь, что половина времени там тратится на соединение.

Мне нужна реализация - подобие менеджера закачек чтобы одни соединяются, другие тянут. Для этого существуют fork и threads, и пока я до них не дошёл. ParallelUserAgent не предлагать smile

После закачки велосипедом, винрараром сжал 183тий топик, и 3 288 461 превратилось в 740 431. и захотел возможность архивирования на сервере и получения по почте.
Как архивировать, тоже пока не знаю.

PM MAIL   Вверх
nerezus
Дата 15.6.2005, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



>Как архивировать, тоже пока не знаю.
perldoc Archive::Zip


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
aleksnn
Дата 15.6.2005, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 27.4.2005

Репутация: 2
Всего: 2



Спасибо.
Мне подошёл бы ответ и по проще smile например:
Код

use File::Basename;
use Archive::Zip qw/:ERROR_CODES/;

my $zip = Archive::Zip->new();
my $zip_file = 'C:/111/ccc.zip';
my $dir = 'C:/000/';

opendir DIR,$dir or die $!;
my @files = map "$dir$_", readdir DIR or die $!;
closedir DIR or die $!;

foreach my $file (@files) {
   $zip->addFile($file, basename($file))}
   
my $status = $zip->writeToFileNamed($zip_file);
if ($status != AZ_OK) {
   die("error when saving zip file '$zip_file'");
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.