WEB拍手

 -CGIの知識なんかなくてもいってみよう-

>>BACK

WEB拍手とは、「気に入った」という感想を、匿名で気軽に伝えられるシステムのことです。
使い方はは簡単でを押すだけで「拍手」、つまり面白かったという気持ちを送ることが出来ます。(このボタンはダミーです)

WEB拍手の良いところは
・手軽に送れる
・匿名性が高く、名乗らなくて済む(メールより堅苦しくない)
・掲示板と違い、自分の発言が他の人から見えない(何ヶ月も自分の発言が残ったりしない)

等が挙げられます。

最初はこれを設置する気ありませんでした。
というか、すでにこのサイトには掲示板・メールフォーム・アンケートが完備されており、ここでさらにweb拍手までつけた日には寂しさのあまり感想がほしい人に見えそうだったので避けていました。

ところが何の因果か、オフラインで「付けないの?」と言われ、はじめて「自分でサーバに設置するタイプ」があると知ったのが事の始まり。
その時、

「レンタルだと『ついでに一言あればどうぞ(拍手だけでも送れます)』の文章は変えられない」

と言われたので、じゃあそこのところをカスタマイズしたい人のために、自鯖に上げるテストをしてみようと、早速cgiいじりに取り掛かりました。

まず、公式によると、自分で設置すると公式に広告収入が入らないので、あまりおすすめされていないようです。
また、公式の「更新報告」という機能が使えません。

しかし、今までの経験でweb拍手のサーバは重いということがわかっているので、そういうのが嫌な人はたぶん自鯖に設置したほうがいいです。実を言うと、「設置版ならあのウザい拍手の音がしない」というのも魅力。

今回は「レンタルではカスタマれないところを、CGIの知識なしにがんがん変えていこう」というテーマですから、レンタ版で制御されている部分をどんどん禁圧解除することにしました。

*レンタ版で禁圧されてる部分*
・送信後の画面は5種類まで
・一言で送れる文字数は50文字まで(これは、ある意味「何回かに分けて送らせることで、拍手率アップ」という意味かも……)
・ついでに一言どうぞ云々のあたり変更
・別窓で開くのウザい
・過去ログを消さない

これぐらいなら自分でも弄れそうなので早速トライ。

あ、もう1つ付けてみたい機能として、「ログをメールで送る」をやりたかったですが、そこはperlの知識がないと無理ですね。やっぱり。

そうそう、このページは「だまされて何の知識もなくCGIを体当たり設置をさせられた時のリプレイ」というのが趣旨なので、まじめに設置したーい!というような方はこことかここを参考にしたほうが絶対良いです。ちなみにiswebのパスは#!/usr/local/bin/perlなので、これさえわかれば公式サイトのパーミッションに従って最低限の設置はできますね。

*改造してみよう!*

web拍手は3つのcgiに書き換えを行います。わかりやすいように、cgiごとに色分けをします。
改造ポイントごとに、どれに何をしたら良いのかを書いていきたいと思います。

*今回やる改造*
・お礼を増やす
・連続クリックの上限をなくす
・外部スタイルシートを読み込む
・ボタン回りの言葉を変える

*上級編(五十三軍曹の知識だけではわからなかったところ)*
・1行フォームをテキストエリアにする
・解析画面で改行をかませて見やすくする

*できなかったところ*
・ログを2週間以上保存
・センドメールでログを送る

この他にも色々なカスタマイズがありますが、中にはやってはいけないとされている「魔改造」もあります
*魔改造編(不可能ではないが邪道とされている改造。スキル不足のため解説不能)*
・IP取得(CGI自体の改造)
・アクセス解析内臓(お礼画面に仕込む)

何故解析が邪道とされているかというと、拍手は匿名性がウリであり、誰が送ったのか判るようにするのはその本質に反するからです。
「いたずらされて困る」と言う人は、拍手の設置を諦めましょう。いたずらされやすいのを前提として、使いやすさのリスクを負うのが拍手です。どうしても嫌な場合は、公式からレンタルしましょう。いたずら防止のための連打制限などがあります。
また、パチパチシステムという類似スクリプトは、NGワードを指定できます。拍手で「氏ね」とか言われたくない人は、パチパチのほうを使いましょう。

お礼画面を増やす
自鯖設置最大のメリットだと思います。

変更するCGI
clap.cgi
clapinit.cgi

変更点
clap.cgi

#------メッセージ
$i = int(rand(
このかっこ内を増やしたいお礼の数に変更する));

print "<center>\n";

print "$message[$i]<br><br><br>\n";

clapinit.cgi

# 拍手送信後画面用お礼メッセージ1(タグ使用可)
$message[
0 ここは0からカウントする]='
<BR>
お礼の文章をここに入れる<BR>
<img src=
お礼画像のURLを入れる。その時「””」ダブルクォーテーションは使わない
width=
お礼画像の横ピクセル height=お礼画像の縦ピクセル border=0 alt=お礼画像>';



# 拍手送信後画面用お礼メッセージ増やしたい数(タグ使用可)
$message[
増やしたい数マイナス1の数]='<BR>
ありがとうございました!<BR>
<a href=このようにaタグを入れて、お礼画像からリンクをはる事も出来ます><img src=お礼画像のURL></a>';

連続クリックの上限をなくす
変更するCGI
clap.cgi

変更点
#====================さらに送るフォーム&メッセージ
if ($kaisuu <
ここの回数を変更する){

print '<font size=2>いたずら防止のため、(変更した回数より1マイナスした数)回以上連続で拍手を送れないようになっています。</font>';

を好きな回数に書き換えます

外部スタイルシートを読み込む
変更するCGI
clapinit.cgi

変更点
#--------------
# HTMLヘッダー
#--------------
sub header{

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',"\n";
print '<html lang="ja"><head>',"\n";
print "<title>$title</title>\n";
print "<LINK rel=stylesheet href=外部スタイルシートURL type=text/css>\n";
print "</head>\n";
}


外部ではなく、直接記述もできます。

ボタン周りの言葉を変える
変更するCGI
clap.cgi

変更点
#====================さらに送るフォーム&メッセージ

if ($kaisuu < 16){

$kaisuu ++;

print "<FORM action=$base method=POST>\n";
print '<INPUT type="submit" value="もっと送る"><br><br>',"\n";
print "<input type=hidden name=kaisuu value=$kaisuu>\n";
print '<font size=2>ここに、もっと送るボタンの下に<BR>表示させたい言葉を<BR>適度に改行し手入れる事が出来ます<br>',"\n";
print '<TEXTAREA rows=3 cols=40 name=hitokoto></TEXTAREA><br>',"\n";
print '</FORM>',"\n";
}else{

print '<font size=2>いたずら防止のため、
変更した回数回以上連続で拍手を送れないようになっています。</font>';

}

print "<br>\n";

1行フォームをテキストエリアにする
変更するCGI
clap.cgi
clapinit.cgi

変更点
#====================さらに送るフォーム&メッセージ

if ($kaisuu < 16){

$kaisuu ++;

print "<FORM action=$base method=POST>\n";
print '<INPUT type="submit" value="もっと送る"><br><br>',"\n";
print "<input type=hidden name=kaisuu value=$kaisuu>\n";
print '<font size=2>リンク切れ・誤字の報告、簡単な感想等<BR>一言あればご利用ください。<BR>(匿名でどうぞ。拍手だけでも送れます)<br>',"\n";
print '<TEXTAREA rows=3 cols=40 name=hitokoto></TEXTAREA><br>',"\n";
print '</FORM>',"\n";
}

clapinit.cgi
#------------------
# フォームデコード
#------------------
sub decode {
local($buf, $key, $val);

if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
}
%in=();
foreach (split(/&/, $buf)) {
($key, $val) = split(/=/);
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

# S-JISコード変換
&jcode'convert(*val, "sjis", "", "z");

# タグ処理
$val =~ s/&/&amp;/g;
$val =~ s/"/&quot;/g;
$val =~ s/</&lt;/g;
$val =~ s/>/&gt;/g;
$val =~ s/\0//g;

# 改行処理
if ($key eq 
元の"comment"を、"hitokoto"に書き換え) {
$val =~ s/\r\n/<br>/g;
$val =~ s/\r/<br>/g;
$val =~ s/\n/<br>/g;
} else {
$val =~ s/\r//g;
$val =~ s/\n//g;
}
$in{$key} .= "\0" if (defined($in{$key}));
$in{$key} .= $val;
}
$pass = $in{'pass'};
$hitokoto = $in{'hitokoto'};
$kaisuu = $in{'kaisuu'};
}


解析画面に改行をかませて見やすくする
変更するCGI
kaiseki.cgi

変更点
#----------------------メッセージ表示
print "今日送られたメッセージ<br>\n";
print "<table border
width=解析画面のテーブル幅を指定>\n";

for ($i=0 ; $i<=$#mes ; $i++){

($mesday,$meshour,$message) = split(/<>/,$mes[$i]);

print "<td><p align=\"right\">$meshour時</p></td>\n";
print "<td>$message</td><tr>\n\n";

$sousinmessage = "$sousinmessage\n$message";

}

print "</table><br>\n";

実際の改造ソース
clap.cgi
clapinit.cgi
kaiseki.cgi

わかんないところはソースをダウンロードして確認して下さい。
正直改造してる本人もわかってません。

あと、最近拍手のログ飛びが良く起こります。
改造したせいなのか、iswebの鯖と相性が悪いのか、別の理由なのかはよくわかりませんが、ロックしてもログが壊れて拍手回数が0になります。
幸い、コメントは消えないのですが、公式を見ても原因不明。
ログを壊したくない人は、あんま改造とかしないのが吉。

魔改造とかは自力でどうぞ。でも個人的意見を言わせて貰えば、アクセス解析はどうよ。

拍手レスの是非

拍手レス、好きな人多いですね。
五十三軍曹は、しない派です。だって、匿名ですもの。ただ、いい話を聞かせてもらったときは「拍手でこんなこと教えてもらいました。ありがとう」って日記に書いたりしますが。

拍手レスキライな人もいますので、閲覧者をサイトから遠ざけてもいいという覚悟はするべきでしょう。かく言う自分も、日記が好きだったサイトが、拍手レスのみで日記を埋めるようになってから、そのサイトを見限った経験があります。

拍手レスは、コメントを入れた本人とサイトオーナー以外にとって、ネタの判らない楽屋オチです。うまく万人向けネタに出来る人はいいですが、そうでない場合は部外者にとって「入り辛い空気」になってしまうことがあります。どちらを取るかの選択が肝心。

2004/9/24

………あまりにもweb拍手ログが飛ぶので、痺れを切らしてパチパチに乗り換えました。
なんなんですかiswebベーシック。金払ってるのに。それゃ月500円だがさ。こんな軽いCGI落とされると……orz

>>BACK