概要
- 1行に1つ URL が書かれたファイルにしたがって該当ファイルをダウンロードする。
- リストファイルがあるフォルダにダウンロードしたファイルを保存する。
- アクセス結果を表示するよう変更。(2016-09-12)
ソース
-
ListDownloader.zip
use strict; use warnings; use utf8; use Encode; use File::Basename; use File::chdir; use LWP::UserAgent; use HTTP::Request; my $charsetConsole = $^O eq 'MSWin32' ? 'CP932' : 'UTF-8'; binmode( STDIN, ":encoding($charsetConsole)" ); binmode( STDOUT, ":encoding($charsetConsole)" ); binmode( STDERR, ":encoding($charsetConsole)" ); @ARGV = map { decode( $charsetConsole, $_ ); } @ARGV; my $charsetFile = 'UTF-8'; my $ioLayer = $^O eq 'MSWin32' ? "raw:encoding($charsetFile):crlf" : "encoding($charsetFile)"; my $listFile = $ARGV[0] or die("usage: ListDownloader <list file>\n"); $CWD = dirname( encode( $charsetConsole, $listFile ) ); open( my $fin, "<:$ioLayer", encode( $charsetConsole, $listFile ) ) or die("$listFile: $!\n"); my @lines = <$fin>; close($fin); chomp(@lines); my %listHash = map { $_ => 1 } @lines; my @list = sort( keys(%listHash) ); my $ua = LWP::UserAgent->new( keep_alive => 4 ); $ua->cookie_jar( {} ); my $count = 0; my $max = scalar(@list); foreach my $url (@list) { ++$count; $url =~ m{([^\/]+)$}; my $filename = $1; print "$count/$max\t$filename\n"; my $res = $ua->request( HTTP::Request->new( GET => $url ), encode( $charsetConsole, $filename ) ); sleep(1); }