This page linked from [ InPerl ]

InPerl:WebAccess

履歴閲覧: 最新 {2004/02/16[差分表示]}


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