Как может я добавлять индикатор выполнения к WWW:: Механизировать?

У меня есть следующий код:

$mech->get($someurl, ":content_file" => "$i.flv");

Таким образом, я получаю содержание URL и сохраняю его как flv файл. Я хотел бы распечатать каждую приблизительно секунду, сколько из загрузки остается. Есть ли любой способ выполнить это в WWW:: Механизировать?

7
задан brian d foy 23 December 2009 в 02:08
поделиться

2 ответа

Большое спасибо Питеру Ковачу за ответ, приведший меня к правильному ответу. Однако он оказался немного сложнее, чем я ожидал, поэтому я решил (ужас) ответить на свой собственный вопрос.

Как показал Питер, я могу установить обратный вызов следующим образом:

$m->get($u, ":content_cb" => \&callback);

Но теперь я не могу сохранить содержимое, используя значение :content_file, потому что я могу выбрать только одно из двух. Функция обратного вызова получает данные, и вместо этого я записываю их в файл.

Я также получаю объект ответа, который содержит общий размер содержимого, как указал Фридо. Таким образом, сохраняя текущий общий размер полученного до сих пор содержимого и деля его на общий размер, я могу узнать, какой процент содержимого был загружен. Вот полная функция обратного вызова:

open (VID,">$i.flv") or die "$!";
$total = 0;
sub callback
{
    my( $data, $response, $proto ) = @_;
    print VID "$data"; # write data to file
    $total+= length($data);
    $size = $response->header('Content-Length');
    print floor(($total/$size)*100),"% downloaded\n"; # print percent downloaded
}

Надеюсь, это кому-нибудь поможет.

.
8
ответ дан 6 December 2019 в 12:51
поделиться

WWW :: Mechanize говорит, что метод get - это «корректная» перегрузка LWP :: UserAgent get . Просматривая документацию для LWP :: UserAgent, вы можете предоставить ключ content_cb , который вызывается с каждым фрагментом загруженного файла:

$mech->get( $someurl, ":content_cb" => \&callback );
sub callback
{ 
  my( $data, $response, $proto ) = @_;
  # save $data to $i.flv
  # print download notification
 }
8
ответ дан 6 December 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: