2008年11月21日 00:15 [Edit]

perl - LWP::UserAgentで進捗表示しつつダウンロード

#!/usr/local/bin/perl
#
# $Id: lwp-callback-example.pl,v 0.1 2008/11/20 15:16:48 dankogai Exp dankogai $
#
use strict;
use warnings;
use LWP::UserAgent;
use File::Basename;

my $uri      = shift || die "$0 http://example.com/big.iso [filename]";
my $filename = shift || basename($uri);
open my $wfh, '>', $filename or die "$filename:$!";
my $res = LWP::UserAgent->new->get(
    $uri,
    ':content_cb' => sub {
        my ( $chunk, $res, $proto ) = @_;
        print $wfh $chunk;
        my $size = tell $wfh;
        if (my $total = $res->header('Content-Length')){
            printf "%d/%d (%f%%)\r", $size, $total, $size/$total*100;
        }else{
            printf "%d/Unknown bytes\r", $size;
        }
    }
);
close $wfh;
print "\n", $res->status_line, "\n";
unlink $filename unless $res->is_success;

id:cho45の例よりちょっとだけ使いやすくしてみました(i.e. URIをコマンドラインから取るなど)。

Enjoy!

Dan the Perl Monger


この記事へのトラックバックURL

この記事へのトラックバック
HECon前の前菜に最適だったので。 404 Blog Not Found:perl - LWP::UserAgentで進捗表示しつつダウンロード というかHECon1は参加条件緩めたしまだあと10名程来れるので是非是非きて下さい。発表枠も1-2枠くらい余ってます。Shibuya.pmの前夜祭的な参加もおkす。 で、何をや...
HTTP::Engine で進捗表示しつつアップロード【YappoLogs】at 2008年11月26日 12:06
HECon前の前菜に最適だったので。 404 Blog Not Found:perl - LWP::UserAgentで進捗表示しつつダウンロード というかHECon1は参加条件緩めたしまだあと10名程来れるので是非是非きて下さい。発表枠も1-2枠くらい余ってます。Shibuya.pmの前夜祭的な参加もおkす。 で、何をや...
HTTP::Engine で進捗表示しつつアップロード【YappoLogs】at 2008年11月26日 12:05
LWP::UserAgentのgetメソッドの引数にコールバック関数を渡せるのを知らなかったのでメモ。 perl - LWP::UserAgentで進捗表示しつつダウンロード - 404 Blog Not Found ついでにHTMLエンティティ化されたURLに対応させて、ActivePerlでも動くようにしました。 lwp...
Perlだけでwget【にひりずむ::しんぷる】at 2008年11月22日 17:05