ぶろぐ

日記です

IPAの過去問題を一気に落とすperlスクリプト書いた


perlで何かを書くのは初めてだ!
と見せかけ・・・

追記

wget使えば一発でいけた件

wget -A *.pdf -m http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2010h22.html#22haru

一撃!
情弱の車輪再開発乙でした!

use LWP;
use HTML::LinkExtor;

# 引数チェック
if( @ARGV != 2 ){
        die "usage:pdfget.pl save_dir http://hogehoge/ \n";
}
# 引数取得
my ($dir, $url) = @ARGV;

chdir $dir or die $!;

# $url="http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2007h19.html#19haru";
$browser = LWP::UserAgent->new;
$response = $browser->get($url);

$p = HTML::LinkExtor->new(\&callback,$url);
$p->parse($response->{_content});

sub callback {
    my($tag, %links) = @_;

        foreach my $key ( keys %links ){
                if($key eq "href") {
                        $url =  $links{$key};
                        if($url =~ /.*\.pdf/) {
                                print $url;
                                print "をダウンロード\n";
                                `wget $url`;
                                sleep 3; # サーバーに優しくしとく(IPAに怒られないためにも)
                        }
                }
        }

}

使い方

引数で保存するディレクトリとPDFのリンクが張られたページのURLを渡す。
pdfgeter.pl 2010_spring http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2010h22.html#22haru
とか


なんか無駄な事している気がするけど、全仕事は果たせたからそれでいい。
本当は前年度の取ってくる、フォルダ分けする、ファイル名までつける、までできたら最高なんだが…

参考にさせていただきました

前半ほぼコピペm(__)m
HTML::LinkExtor - HTMLドキュメントからリンクを取り出す - あじゃぱー
http://d.hatena.ne.jp/minesouta/20070904/p1

もっと良くするなら

pdfへのURLだけを出力してxargsでwgetに渡す、というやり方のほうが

  • 一度ダウンロードする予定のURLを確認できる
  • Unixっぽい(スマート)

気がしていいかも。
wgetのオプションでインターバルも入れれるみたいだし。
あと多分urlにrm * -rfとか入っていても大丈夫かな?
入力値チェックもっとやるべき?