ダウンロード中に、残りいくつかを表示するプログレスバー。
use strict; use warnings; use Term::ProgressBar; use LWP::UserAgent; $| = 1; my @urls = @ARGV; my $data; my $total_size; my $progress; my $next_update = 0; for my $url (@urls) { $data = ''; print " downloading " , substr($url, 0, 40), "\n"; my $ua = LWP::UserAgent->new(); my $result = $ua->head($url); my $remote_headers = $result->headers; $total_size = $remote_headers->content_length; $progress = Term::ProgressBar->new({count => $total_size, ETA => 'linear'}); $progress->minor(0); $progress->max_update_rate(1); my $response = $ua->get($url, ":content_cb" => \&callback, ); $progress->update($total_size); print length $data, "\n"; } sub callback { my ($d, $response, $protocol) = @_; $data .= $d; $next_update = $progress->update(length($data)) if length($data) >= $next_update; }
ダウンロードは「LWP::UserAgent」モジュールを、
プログレスバー表示には「Term::ProgressBar」モジュールを用いています。
まず、「$ua->head($url)」でヘッダを取得し、Content-Lengthを取得して、Term::ProgressBarモジュールにセットしています。
これにより、何%までダウンンロードできたかを表示できるようになります。
次に、ダウンロードの途中に呼び出される関数を定義し、LWP::UserAgentのget()メソッドで渡します。
my $response = $ua->get($url, ":content_cb" => \%callback);
callback()関数の中で、プログレスバーの更新を行なう処理が記述されています。
上記のような手順で、wgetのようなプログレスバーが表示されるようになりました。
参考
Spidering hacks―ウェブ情報ラクラク取得テクニック101選
- 作者: Kevin Hemenway,Tara Calishain,村上雅章
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2004/05
- メディア: 単行本
- 購入: 43人 クリック: 733回
- この商品を含むブログ (104件) を見る