InPerl:WebAccess
InPerlでWebにアクセスしてあれこれやるときの便利関数群。
Webサイト/Webアプリのテストを作る/実行する時とかに便利、かも。
# TEXT : HTML::FormatTextを使ってページを表示。 sub TEXT{ my $formatter = HTML::FormatText->new(); $formatter->format(HTML::TreeBuilder->new_from_content($res->content)); } # DISP : 適当なブラウザを使ってページを表示。 # ブラウザへの指示(``内)は適当に変更すること。 sub DISP{ open(OUT,'> /tmp/DISP_temp.html'); print OUT $res->content; close(OUT); `galeon -n /tmp/DISP_temp.html`; } # LINK : リンクの操作 # LINK => リンク一覧の表示 # LINK 2 => 指定された番号のリンクを辿って次のページへ。マイナスを指定すれば逆順に数える。 # LINK uri => 直接uriを指定(相対/絶対) sub LINK{ my $uri = shift; unless( defined $uri ){ my $content = $res->content; print " ".$res->base."\n"; my $i = 0; while($content =~ /<a.*?href=([\"\'])?(.*?)\1.*?>(.*?)<\/a>/mg){ printf(" %s: %s [%s]\n",$i++,$2,$3); } return; } if($uri =~ /^\d+$/){ my $i = 0; my(@list); my $content = $res->content; while($content =~ /<a.*?href=([\"\'])?(.*?)\1.*?>(.*?)<\/a>/mg){ push(@list,$2); } $uri = @list[$uri]; } if($uri){ $uri = URI->new( $uri ); $uri = $uri->abs($res->request->uri); $req = new HTTP::Request( GET=> $uri ); $res = $ua->request($req); return $uri; }else{ return 'no target'; } } sub DISP_FORM{ my $i = -1; my(@submits); foreach $input ($form->inputs){ $i++; next if($input->type eq 'hidden'); DISP_INPUT($input,$i); } } sub DISP_INPUT{ my $input = shift; my $i = shift; my($value,$note); if($input->type eq 'hidden'){ $note = '(hidden) '; } if($input->possible_values){ $value = sprintf("( %s )", join (' ', map { ($_ eq $input->value)? "{$_}" : $_; } $input->possible_values)); }elsif($input->type eq 'submit'){ printf("%d [[ %s ]]\n",$i,$input->value); return; }else{ $value = $input->value; } printf("%d %s%s=%s\n",$i,$note,$input->name,$value); } sub FORM{ my $n = shift; unless ($n){ return DISP_FORM; } if($n >= scalar($form->inputs)){ return 'no exist input $n'; } $input = ($form->inputs)[$n]; my $val = shift; unless($val){ DISP_INPUT($input,$n); return ''; } if($input->type eq 'submit'){ return $input->click($form); } return $input->value($val); }