電子書籍の厳選無料作品が豊富!

Perl初学者です。Perlでのインターネット通信に興味があります。

webサイトのテキストボックスにテキストを入力し、それを送信・結果を取得するためのプログラムを教えてください!

(例)
単語を英訳するプログラムが作りたかったので、”http://ejje.weblio.jp/”の検索ボックスに単語を入れて送信し、帰ってきたURLのhtmlを取得する、といった感じ?

少し勉強したLWPモジュールを使って頂けると嬉しいです。
もちろん、こっちの方が効率がいいよ、といった方法があれば是非教えてください!
よろしくお願いします。

A 回答 (1件)

適当。

表示がくずれるので、空白2文字を全角空白にしていることに注意。

#!/usr/bin/perl -T
use strict;
use warnings;
use utf8;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Pretty;
use Encode;
use LWP::UserAgent;
use HTTP::Response;
use HTML::TreeBuilder;

use constant URL => q{http://ejje.weblio.jp/content};

my $q  = CGI->new();
my $word = $q->param("word");
my $mean = q{};

if ( defined $word ) {
  my $ua = LWP::UserAgent->new;
  $ua->agent('Mozilla/5.0');
  $ua->timeout(10);

  my $url = URL . '/' . $word;
  my $req = HTTP::Request->new( GET => $url );
  my $res = $ua->request($req);
  if ( $res->is_success ) {
    my $tree = HTML::TreeBuilder->new;
    $tree->parse( decode( 'utf8', $res->content ) );
    my ($attr) = $tree->look_down( 'class', 'Kejje' );
    $mean = $attr->as_HTML;
  }
  else {
    $mean = $res->error_as_HTML;
  }
}
else {
  $word = '';
}

my $body = do { local $/; <DATA> };
$body =~ s/%%word%%/$word/;
$body =~ s/%%mean%%/$mean/;

binmode STDOUT, ':encoding(utf8)';
print $q->header( -charset => 'UTF-8' ),
  $q->start_html( -title => "test", -lang => 'ja', ),
  $body,
  $q->end_html;

__DATA__
<form method="get">
Word : <input type="text" name="word" /><br/>
<input type = "submit" />
</form>
<hr>
Word : <br>
%%word%%
<br>
Mean : <br>
%%mean%%
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

なんとか読み解いてみようと思います!

お礼日時:2012/07/29 19:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!