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

perlカテゴリでも質問させて頂いたのですがちょっと無理があったようですので改めてこちらに質問させて頂きます。

画像のランダムスクリプトと似たかんじでhtmファイルを差し替えるスクリプトって作ることは可能でしょうか?

あるフォルダに多数のhtmファイルを格納しておけばランダムに指定した間隔時間でそのファイルが表示されるといった仕様にしようと改造を試みたのですがどうもうまくいきません。

どなたかPerl言語に精通されている方がいらっしゃいましたらそのスクリプト例をお教え頂きたいのです。

お手数をお掛けします
どうぞよろしくお願い致します。

A 回答 (5件)

#4 です。



>画像ファイルの場合のようにひとつのディレクトリにまとめることは難しいでしょうか?

ムムム。もしや、HTTPの事を正しく理解されていない??
image/* と text/html を同じように考えていませんか?

image/* って、HTMLソースでは無いですよね? って言うことは、ページ遷移はしませんよね??

ここで重要なのは、ページ遷移が発生するかどうか。じゃ無いでしょうか?

なので、ご希望の様な動作はできません。


それにですよ。携帯電話でそんなことやったら(もし、できたとしても。と言う前提の元ですが。)、パケット代が嵩んで大変な事になるんじゃ無いですか? ユーザーはそれで納得されるのでしょうか?
僕は、仕事でCGIなどを作っているのですが、僕だったら、そんな仕様書は門前払いですね。「売れないものに金かけてどうするの?」って感じです(--;)


まぁ、お気持ちは分からなくも無いですが、これを機会にもう少しHTTPについて勉強して見てください。少なくても、ご自分でCGIを作られるのでしょうから、邪魔にはならない知識ですから。
その上で、こんなこと知りたい。とか。あんなこと知りたい。とか。言うのであれば、また質問してみれば良いと思います。僕は、分かる事はお答えします。

この回答への補足

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

たしかにパケット量がかさんでしまいますね。

ちょっと大本から考え直してみます。
アドバイスありがとうございました。

補足日時:2004/03/25 15:56
    • good
    • 0

#3 です。



> できればディレクトリを指定するだけでファイルを勝手にランダムに表示するような仕様にしたいのですが・・

の部分について書くのを忘れてしまいました(^_^;;)

時間毎にディレクトリがあって、そのディレクトリの中に、いくつかのHTMLが入っている。そのHTMLをランダムに表示する。って言うことで良いですかね?

時間毎の部分は、既に案がでているので、ディレクトリを指定して。の部分だけで焦点を当てます。


ディレクトリ名を渡すと、その中からファイル名を一つ取り出すサブルーチンを作りましょう。

sub getfile {
my($dirname) = @_;

opendir(DIRS, $dirname);
my(@dirs) = readdir(DIRS, "*.html");
closedir(DIRS);

($dirs[int(rand(scaler(@dirs)-1))]);
}

なんて感じで良いかな。(動かしていません。バグってたらゴメンバージョンです(^^;))

こんな感じで、ランダムに取り出すことで、目的の動作をする様になるんじゃ無いでしょうか。

この回答への補足

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

やはり時間毎にディレクトリを作らないと無理ですか?

画像ファイルの場合のようにひとつのディレクトリにまとめることは難しいでしょうか?

補足日時:2004/03/25 15:35
    • good
    • 0

#1 です。



既に、#2 の方が具体的な方法論を挙げて下さったので、補足的な部分を書きたいと思います。

(1)ホームページをCGIにすると便利です。.htaccess を使用して、ホームページを変えましょう。

DirectoryIndex index.cgi

などと書けば良いでしょう。詳しくは、

ミケネコの htaccess リファレンス
http://www.mikeneko.ne.jp/~lab/web/htaccess/

を参考にしてみてください。


(2)時間ごとに変更する内容は、サブディレクトリに入っている。と言うことなので、index.cgi から locationヘッダを使って、そのファイルへ遷移させる。と言うのが一般的なパターンです。
が、こんな方法もあります。HTML::Template と言うモジュールがあります。これは、HTMLの中に特殊なタグを組み込んで、その内容を Perl で埋め込んで編集し、出力しよう。と言う趣旨のモジュールです。
上記の、index.cgi に HTML::Template モジュールを組み込んで置き、変わる部分をテンプレートの置き換え指示で置き換える。と言う方法です。
読み込まれる方は、HTMLの文法で <body>~</body> の内容を書いて置けば良いでしょう。

指定の時間になったら自動的にリロードさせる。と言うことはやはり無理があるので、見せ方の方を考えるベキかも知れません。

この回答への補足

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

locationヘッダもやはりファイルごとに指定して記述しなくてはいけませんよね?

以下の画像ランダムスクリプトのようにhtmファイルをひとつのディレクトリに格納してディレクトリパスを記述するだけで勝手に時間になれば表示するというような形にしたいのですがやはり無理でしょうか?

#!/usr/bin/perl

$n = 3*60*60; # 画像を変更する秒数
$imgdir="./image/";

if(!opendir(DIR,$imgdir)){
print "Content-type: text/html\n\n";
print "Directory open error.\n";
exit(1);}
$k = @file = grep /\.(?:jpg|gif)$/, readdir(DIR);
closedir(DIR);

$a = int(time / $n) % $k;

open(IMAGE, "$imgdir$file[$a]");
binmode(IMAGE);
$size=read(IMAGE,$image, -s IMAGE);
close(IMAGE);

if($file[$a] =~ /\.jpg$/){print "Content-type: image/jpeg\n\n";}
else {print "Content-type: image/gif\n\n";}
binmode(STDOUT);
print $image;
exit;

補足日時:2004/03/25 14:50
    • good
    • 0

Perlで指定時間ごとに表示したいhtmlファイルまでのパスを格納しておき、時間取得関数を使い、○時ならこれを表示するとIF文でかけばいいでしょう。



ただ、上記の方法を使うといくつか問題があります。まずCGIにアクセスないと駄目なため、アクセスするファイル名は「xxx.html」ではなく「xxx.cgi」になります。
更にアクセスがあったときの時間で判断しますから、3時59分にアクセスして、4時になった瞬間にパッと変わることはできません。4時になったときに再読み込み(リロード)すれば変わります。

この回答への補足

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

つまり、○時ならこれを表示とhtmlファイルごとに記述する必要があるのでしょうか?

できればディレクトリを指定するだけでファイルを勝手にランダムに表示するような仕様にしたいのですが・・

補足日時:2004/03/25 14:37
    • good
    • 0

仕様がいま1つイメージできません。



HTMLファイルを差し替えて表示する。と言うのは、表示中のページの一部を、リアルタイムで書き換える。と言う意味でしょうか?

CGIと言うのは、httpdの外部の言語(やシェル)を使って、HTMLを作り出す仕組みです。一度表示してしまったHTMLをリアルタイムで書き換えることはできません。JavaScriptの様なクライアントサイドで動作する仕組みを使用すればできますが。

CGIで行うためには、ページの再表示が必要ですね。再表示させるためには、JavaScriptなどを使ってタイマーをセットすれば良いのでは無いでしょうか。

なので、CGIのと言うよりも、JavaScriptの問題の様な気がします。

この回答への補足

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

JavaScriptも考えたのですが、携帯サイトにも対応させていのでCGIでやりたいのです。

htmlファイルはあらかじめ複数用意してディレクトリに格納しておきます。CGIでそのディレクトリにアクセスしてhtmファイルを時間指定でランダムに呼び出す形にしたいのですが・・

やっぱり無理でしょうか?

補足日時:2004/03/25 10:57
    • good
    • 0

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