■
寝ぼけて書いたものなので、と、先に言い訳しときます。
LWPを使ってみる目的で作った、データベース論のpdfを落としてくるスクリプト。
参考 : http://homepage3.nifty.com/hippo2000/perltips/LWP.html
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTTP::Cookies; use URI; # formを含んだhtmlをgetするためのurl。 my $login_url = 'http://ldear.ex.nii.ac.jp/~aihara/uec/db2005/student/signin.php'; # idとパスワードを送信する先。 my $form_url = 'http://ldear.ex.nii.ac.jp/~aihara/uec/db2005/student/signin.php'; # ログイン後に取り出すファイルへのリンクのあるhtml。 my $data_url = 'http://ldear.ex.nii.ac.jp/~aihara/uec/db2005/lecture/schedule.php'; my $id; my $pass; unless( $id ){ print "id : "; $id = <STDIN>; } unless( $pass ){ print "pass : "; $pass = <STDIN>; } # UA準備。 my $ua = new LWP::UserAgent; # $ua->cookie_jar( new HTTP::Cookies ); $ua->cookie_jar( HTTP::Cookies->new( file => 'cookies.txt', autosave => 1 ) ); $ua->env_proxy; # formの値をget。 my $req = HTTP::Request->new( GET => $login_url ); print '受信中(', $req->uri, ')'; my $res = $ua->request( $req ); print "。\n"; # getしてきたデータから、formの値を取り出す。 die $res->error_as_HTML if $res->is_error; my @querys; $_ = $res->content; while( /<input ([^>]*)>/g ){ my $keys = $1; my( $name ) = ( $keys =~ /name="([^"]*)"/ ); my( $value ) = ( $keys =~ /value="([^"]*)"/ ); my( $type ) = ( $keys =~ /type="([^"]*)"/ ); if( $type and $type eq 'password' ){ $value = $pass; }elsif( $name eq 'email' ){ $value = $id; } push @querys, $name.'='.$value; } # idとパスワードを送信。 $req = HTTP::Request->new( POST => $form_url ); $req->content_type( 'application/x-www-form-urlencoded' ); $req->content( join( '&', @querys ) ); print '受信中(', $req->uri, ')'; $res = $ua->request( $req ); print "。\n"; die $res->error_as_HTML if $res->is_error; # ログイン成功。 $req = HTTP::Request->new( GET => $data_url ); print '受信中(', $req->uri, ')'; $res = $ua->request( $req ); print "。\n"; die $res->error_as_HTML if $res->is_error; $_ = $res->content; my $base = $res->base; while( /<a [^>]*href="([^"]*.pdf)"/g ){ $req = HTTP::Request->new( GET => URI->new_abs( $1, $base ) ); my( $filename ) = ( $1 =~ m!([^/]*)$! ); next if -e "data/$filename"; print '受信中(', $req->uri, ')'; $res = $ua->request( $req, "data/$filename" ); print "。\n"; die $res->error_as_HTML if $res->is_error; }