アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のCGIをサーバーに乗せて、Y!とGoogleをランダムに表示したいのですが、もうちょっとというところでうまくいきません。
どなたか心優しい方修正していただけますか?
よろしくおねがいします。

- - - - - - - - - - - - - - -

#!/usr/bin/perl

@page = (
"http://www.yahoo.co.jp",
"http://www.google.co.jp/ig",
);

$rand_num = int(rand(($#page+1)))+1;

foreach(@page){

$i++;
if($i == $rand_num) {$file = $_;}

}

print "content-type:text/html\n\n";

print <<"EOM";
<html lang="ja"><head>
<meta http-equiv="content-type" content="text/html; charset=shift_jis">
<title>IFRAME</title>
</head></html>
EOM

A 回答 (3件)

単に「yahoo に飛ばしたい」んだったら、


print "Location: http://www.yahoo.co.jp/\n\n";
と出力するだけでいけます。
    • good
    • 0

>フレームに出てくるようになっていますが、通常の表示のように出てくれるとベストなんですが。

。。

そこまですると著作権的に問題が発生するような気もしますが・・。

ちなみに、恐らく、「通常の表示」というのは、URLからそのサイトのHTMLを取得して表示させたい、ということととって良いでしょうか?

そうなると、LWP::Simpleのモジュールを使えば取得可能です。
>参考ページ
http://allabout.co.jp/internet/cgiperl/closeup/C …

簡単な要約をしておきますと、スクリプトの頭の方で、

use LWP::Simple;

と宣言をしておきます。
そして、

$html = get($url);

($urlのところにサイトのURL)
とすればそのHTMLが取得できるはずです。

参考URL:http://allabout.co.jp/internet/cgiperl/closeup/C …
    • good
    • 0

・出力しているHTMLデータ中に、どこにも $file が出てこないですね。

それでは表示されなくて当然でしょう。

・乱数からの$fileの算出に無駄が多いです。
> foreach(@page){
> $i++;
> if($i == $rand_num) {$file = $_;}
> }

ここは
> $file = $page[$rand_num-1];
だけでOK。
ついでに言えば、配列アクセスのことを考えると、
$rand_num は 1~$#page+1 ではなく、0~$#page の範囲の乱数にした方が便利。
スカラーな文脈で@page を使えば、配列@pageの要素数を返すので、

> $rand_num = int(rand(@page));
> $file = $page[$rand_num];
とか、もっと簡単にするなら
> $file = $page[rand(@page)];
だけでいい。

この回答への補足

たしかに、シンプルにうまくいきました。
あとはHTMLに出力するにはどうすればよいでしょうか?
今は、フレームに出てくるようになっていますが、通常の表示のように出てくれるとベストなんですが。。。

- - - - - - - - - - - - - - - -
#!/usr/bin/perl

@page = (
"http://www.yahoo.co.jp",
"http://www.google.co.jp/ig",
);

$file = $page[rand(@page)];

print "content-type:text/html\n\n";
print <<"EOM";
<html lang="ja"><head>
<meta http-equiv="content-type" content="text/html; charset=shift_jis">
<title>マイランダムホームページ</title>
</head><body>
<iframe src="$file"><a href="$file">$file</a></iframe>

</body></html>
EOM

補足日時:2008/06/08 12:22
    • good
    • 0

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