2017-09-09 40 views
-1

ファイル名を含むテキストファイルを読み取った後、URLから画像のリストを取得するためにperl getstoreを使用しようとしていますが、コードを作成して正常に実行することができましたが、私はコードを実行するたびにハードディスクの空き容量が減少することを示しているので、ファイルが保存されていると仮定していますが、見つけられません。だから、perl getstoreはファイルを保存し、リンクから画像を保存する正しい方法は何ですか?PERL LWP :: Simple getstoreはどこに画像を保存しますか?

use strict; 
use warnings; 
use LWP::UserAgent; 
use LWP::Simple; 

my $url = "https://labs.jamesooi.com/images/"; 
my $ua = LWP::UserAgent->new; 
$ua->agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36"); 

my $file = 'image-list.txt'; 
open (DATA, $file) or die "Could not open $file: $!"; 

while(<DATA>){ 
    my $link = "$url" . "$_"; 
    my $filename = "$_"; 
    print $link; 
    print $filename; 

    my $req = HTTP::Request->new(GET => $link); 
    my $res = $ua->request($req); 
    if($res->is_success){ 
    my $rc = getstore($link, $filename); 
    if(is_success($rc)){ 
     print "Success\n"; 
    }else{ 
     print "Error\n"; 
    } 
    } else { 
    print $res->status_line, "\n"; 
    } 
} 
+1

それはあなたが2番目の引数として与える '$のfilename'に保存されますが。相対名の場合は、現在の作業ディレクトリを基準にして扱われます。しかし、なぜあなたは最初にGETをしてから別のGET(暗黙のうちに 'getstore')をしたのですか? –

+0

@SteffenUllrichこれは(その)回答でなければなりません。目的のディレクトリを '$ filename'の前に追加するよう提案して展開することもできます。質問はせいぜい限界があります(答えは実際には「ドキュメントを読む」)が、将来誰かを助けるかもしれません。 –

+0

$ filenameはkoala1.jpgです。作業ディレクトリを検索しましたが、perlファイル以外は何も見つかりませんでした。 GETは、コードがURLへの接続を確立できることを確認するためのものです。これは私がやっていると思うことです。私はperlにはとても新しいです。 –

答えて

3

the documentationgetstore(url, file)によれば、第1引数としてURLをとり、第二引数は、結果が格納されたファイル名です。ファイル名が相対パス(スラッシュで始まらず、/)であれば、現在の作業ディレクトリからの相対パスになります。

しかし、ファイルから名前を読み取り、改行文字を含む完全な行をファイル名として扱います。これはおそらくあなたが望むものではないので、改行を削除するにはchompを使うべきです。

それとは別に

  • あなたは最初のファイルを検索しますが、応答を無視し、代わりに最初のGETが成功した場合、同じリソースを取得し、保存するためにgetstoreを呼び出すためにLWP::UserAgentを使用してGET要求を行っています。最初のGETの結果を保存するか、単にスキップしてgetstoreのみを使用する方が簡単です。

  • ファイルハンドルとしてDATAを使用しています。これは間違っていませんが、__DATA__マーカーの後にプログラムファイルを指す暗黙のファイルハンドルはDATAです。そのため、別のファイルハンドルを使用することをお勧めします。

コードの簡易版ファイルが正常に保存されます使用して:

use strict; 
use warnings;  

use LWP::Simple; 

my $url = "https://labs.jamesooi.com/images/"; 
my $file = 'image-list.txt'; 

open (my $fh, '<', $file) or die "Could not open $file: $!"; 

while (<$fh>) { 

    chomp; # remove the newline from the end of the line 

    my $link  = $url . $_; 
    my $filename = $_; 

    my $rc = getstore($link, $filename); 

    if (is_success($rc)) { 
     print "Success\n"; 
    } 
    else { 
     print "Error\n"; 
    } 
} 
+0

$ filenameはkoala1.jpgです。作業ディレクトリを検索しましたが、perlファイル以外は何も見つかりませんでした。 –

+0

@UndeadLeftClick:編集されたレスポンスを参照してください - おそらくあなたは名前の最後に改行を残している可能性があります。 –

+0

ありがとう、これはうまくいった。 –

関連する問題