- ベストアンサー
CGIでホームページをランダムに表示したい
下記の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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単に「yahoo に飛ばしたい」んだったら、 print "Location: http://www.yahoo.co.jp/\n\n"; と出力するだけでいけます。
その他の回答 (2)
- Seravy
- ベストアンサー率47% (118/249)
>フレームに出てくるようになっていますが、通常の表示のように出てくれるとベストなんですが。。。 そこまですると著作権的に問題が発生するような気もしますが・・。 ちなみに、恐らく、「通常の表示」というのは、URLからそのサイトのHTMLを取得して表示させたい、ということととって良いでしょうか? そうなると、LWP::Simpleのモジュールを使えば取得可能です。 >参考ページ http://allabout.co.jp/internet/cgiperl/closeup/CU20050131A/index2.htm 簡単な要約をしておきますと、スクリプトの頭の方で、 use LWP::Simple; と宣言をしておきます。 そして、 $html = get($url); ($urlのところにサイトのURL) とすればそのHTMLが取得できるはずです。
- mtaka2
- ベストアンサー率73% (867/1179)
・出力している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