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);
}