#!/home/1/motchie/bin/perl
$|=1; # スプールしない
# ライブラリのロード
use lib qw( /home/1/motchie/lib );
use LWP::Simple;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use Jcode;
use Email::Valid;
require 'get_title.pl';
require 'tcp.pl';
require 'web.pl';
require 'jcode.pl';
#require 'chkemail.pl';
require 'head.pl';
require 'foot.pl';
require 'cgi.pl';
require 'oops.pl';
# ---- 初期設定 ----
# URLのサーバの設定
$site = "http://www.motchie.com";
#$site = $cgi'SERVER_NAME;
# ログファイルのファイル名の指定
$logfile = "list.dat";
$mylog = "mylog.dat";
$myadd = "webmaster\@motchie.com";
$sendmail = "/usr/sbin/sendmail"; #sendmailのパス
if ($ENV{'REQUEST_METHOD'} eq "GET") {
if ($ENV{'QUERY_STRING'} eq "") {
&show_guestbook();
exit(0);
}else{
exit(0);
}
}
&cgi'Decode(); # デコード
# 変数名を短くする
$name = $cgi'TAGS{'name'}; #お名前
$place = $cgi'TAGS{'place'}; #お住まい
$url = $cgi'TAGS{'url'}; #HomePage URL
$address = $cgi'TAGS{'address'}; #E-mail Address
$title = $cgi'TAGS{'title'}; #Homepage Title
$memo = $cgi'TAGS{'comment'}; #Comments
$image = $cgi'TAGS{'image'}; #Selected Image
$add = $cgi'TAGS{'add'}; #E-mail Address を公開してもいいか
$ok_u = $cgi'TAGS{'ok_u'}; #URL を公開してもいいか
$method = $cgi'TAGS{'method'}; # 確認か書き込みか
$autoget = $cgi'TAGS{'auto_get'}; # TitleをURLから自動取得する
#------------------------------------------------------------------------------
# データ処理
#------------------------------------------------------------------------------
# イメージの処理
@images = ("home1.gif","kuma1.gif","star1.gif","earth1.gif","coara1.gif");
@size = ("32","40","40","32","40");
$imgsrc = $images[ $image-1 ];
$size = $size[ $image-1 ];
# E-mail Address の公開について
if ($address eq "" ||
$address eq "(お返事をお出ししますので、正確にお願いします。)") {
$add_comment = "持っていない";
} else {
if ($add eq "yes"){
$add_comment = "公開してもいい";
} else {
$add_comment = "公開しないでほしい";
}
}
# URL の公開について
if ($url eq "" || $url eq "(ない場合は、このままで結構です。)") {
$url_comment = "持っていない";
} else {
if ($ok_u eq "yes"){
$url_comment = "公開してもいい";
} else {
$url_comment = "公開しないでほしい";
}
}
# URL はあっても、タイトルがない
if (($url ne "" && $title eq "")||
($url ne "(ない場合は、このままで結構です。)" && $title eq "")) {
$title = $url
}
if($memo eq "(こちらにメッセージをお願いします。)\n") {
$memo = "";
}
#$memo =~ s/\n/
\n/g; # メッセージの改行をbr要素に。
&cgi'SecureHtml( *memo );
if($method eq "submit") {
&submit();
}
# エラー用「現在のページ」
$cur = << "EOF";
Let's Write!
> Oops!
EOF
#------------------------------------------------------------------------------
# 入力データのエラーチェック
#------------------------------------------------------------------------------
# 名前と住所は必須。なければ警告。---------------------------------------------
if ($name eq "" || $place eq "" ||
$name eq "(あだ名でも結構です。 必ずお書き下さい。)" ||
$place eq "(簡単に、必ずお書き下さい。)") {
$con = << "EOF";
お名前とお住まいは必ず入力してください。
お名前とお住まいを入力し直しておためし下さい。
Let's Write! (ご記帳ページ)へ戻る
EOF
&cgi'Header;
&oops($cur, $con);
exit(0);
}
# E-Mailアドレスが入力されていて、かつ正しくないアドレスだった。---------------
unless ($address eq "" || &email_check($address) ||
$address eq "(お返事をお出ししますので、正確にお願いします。)") {
$con = << "EOF";
E-mailアドレスが正しくありません。
正しいE-mailアドレスを入力し直しておためし下さい。
Let's Write! (ご記帳ページ)へ戻る
EOF
&cgi'Header;
&oops($cur, $con);
exit(0);
}
# URLが入力されていて、かつネット上に存在しない場合 ---------------------------
unless ($url eq "" || $url eq "(ない場合は、このままで結構です。)" ||
&check_url($url)) {
$con = << "EOF";
記入されたURLが指すページは、
インターネット上に存在しないか、アクセスできません。
有効なページを指すURLを入力し直しておためし下さい。
Let's Write! (ご記帳ページ)へ戻る
EOF
&cgi'Header;
&oops($cur, $con);
exit(0);
if ($autoget eq "auto_ok") {
$title = &get_title($url);
}
}
#------------------------------------------------------------------------------
# 確認画面の表示
#------------------------------------------------------------------------------
$des = "Guest Bookの確認ページです。";
$cur = << "EOF";
Let's Write! > Write Confirmation
EOF
$tit = "Write Confirmation";
$hea = "Write Confirmation";
&cgi'Header;
&head($des, $cur, $tit, $hea);
print << "EOF";
あなたが書かれた内容の確認を致します。
誤り/修正個所がある場合には、前のページに戻って、再度入力をお願いいたします。
この段階では、まだご記帳は完了していません。
内容が正しい場合は、[確認して記帳完了]ボタンを押して下さい。
- お名前:
- $name
- お住まい:
- $place
- E-Mail:
- $address
- E-Mailアドレスを
- $add_comment
- WebSite URL:
- $url
- WebSite URLを
- $url_comment
- WebSite Title:
- $title
- メッセージ
- $memo
- Image Icon:

EOF
&foot();
exit(0);
sub submit() {
#------------------------------------------------------------------------------
# データファイルの作成
#------------------------------------------------------------------------------
# 日付を取得
($sec,$min,$hour,$mday,$month,$year,$wday) = localtime;
# 秒 分 時 日 月 年 曜日
$month++;
@week = ("日","月","火","水","木","金","土");
$wday = $week[ $wday ];
@num =("0","1","2","3","4","5","6","7","8","9");
if ( $month<=9 ) { $month = $num[$month]; }
if ( $mday<=9 ) { $mday = $num[$mday]; }
if ( $hour<=9 ) { $hour = $num[$hour]; }
if ( $min<=9 ) { $min = $num[$min]; }
if ( $sec<=9 ) { $sec = $num[$sec]; }
$year += 1900;
$date = "$year年$month月$mday日($wday) $hour時$min分$sec秒";
#ファイル読み込み(昔投稿ファイル避難)
&cgi'lock( '.data.txt' );
open(DATA, $logfile);
@lines = ;
close(DATA);
&cgi'unlock( '.data.txt' );
#ファイル上書き(新投稿)
&cgi'lock( '.data.txt' );
open(FILE, ">$logfile") || print "Error!";
print FILE <<"EOF";
Name:
EOF
# E-mail Address の公開について
if ($address eq "" ||
$address eq "(お返事をお出ししますので、正確にお願いします。)") {
print FILE "$name ";
} else {
if ($add eq "yes"){
print FILE "
$name ";
} else {
print FILE "$name ";
}
}
print FILE <<"EOF";
Address: $place
WebSite:
EOF
# URL の公開について
if ($url eq "" || $url eq "(ない場合は、このままで結構です。)") {
print FILE "No Web Page
\n";
} else {
if ($ok_u eq "yes"){
print FILE "
$title\n";
} else {
print FILE "No Web Page
\n";
}
}
print FILE <<"EOF";
At: $date (JST)
感想、メッセージ:
$memo
EOF
close(FILE);
&cgi'unlock( '.data.txt' );
#ファイル追加(昔投稿)
&cgi'lock( '.data.txt' );
open(IN,">>$logfile");
foreach $line (@lines) {
print IN "$line";
}
close(IN);
&cgi'unlock( '.data.txt' );
#------------------------------------------------------------------------------
# ログファイルの作成
#------------------------------------------------------------------------------
&cgi'lock( '.data.txt' );
open(MYLOG, ">>$mylog");
print MYLOG "-----------------------------------------\n";
print MYLOG "DATE : $date\n";
print MYLOG "REMOTE HOST : $ENV{'REMOTE_HOST'}\n";
print MYLOG "REMOTE ADDR : $ENV{'REMOTE_ADDR'}\n";
print MYLOG "HTTP USER AGENT : $ENV{'HTTP_USER_AGENT'}\n";
print MYLOG "-----------------------------------------\n";
print MYLOG "名前: $name\n";
print MYLOG "お住まい: $place\n";
print MYLOG "メールアドレス: $address\n";
print MYLOG " を: $add_comment\n";
print MYLOG "ホームページ : $url\n";
print MYLOG "タイトル : $title\n";
print MYLOG " を: $url_comment\n";
print MYLOG "メッセージ : \n$memo\n";
close(MYLOG);
&cgi'unlock( '.data.txt' );
#↑訪問者リストファイルに書き出す部分。
# URLがある場合は、タグを使ってリンクを張る。
#------------------------------------------------------------------------------
# ゲストブックに書き込みがあったことを自分にメールで知らせる
#------------------------------------------------------------------------------
open(MAIL,"| $sendmail $myadd");
# open(MAIL, ">>mail.txt");
print MAIL &print_jis(<= 5 && $hour <= 9) {
$greeting = "おはようございます";
} else {
if ($hour >= 10 && $hour <=18) {
$greeting = "こんにちは";
} else {
$greeting = "こんばんは";
}
}
# メールを出す。
open(MAIL,"| $sendmail $address");
print MAIL &print_jis(<Let's Write! > Write Complete!
EOF
$tit = "Write Complete!";
$hea = "Write Complete!";
&cgi'Header;
&head($des, $cur, $tit, $hea);
print << "EOF";
ご記帳が完了しました。
ご記帳、ありがとうございました。
ご記帳されたところを閲覧します。
EOF
&foot();
exit(0);
}
# ゲストブックの表示をする関数
sub show_guestbook {
$des = "Guest Bookを表示するページです。";
$cur = << "EOF";
Guest Book
EOF
$tit = "Guest Book";
$hea = "Guest Book";
&cgi'Header;
&head($des, $cur, $tit, $hea);
print << "EOF";
今までにみなさまに書いていただいた一覧です。
まだの方は、ぜひご記帳ください。
EOF
&cgi'lock( '.data.txt' );
open(DATA,"$logfile");
while() {
print;
}
close(DATA);
&cgi'unlock( '.data.txt' );
&foot();
}
# URLがアクセスできるかどうかを見る関数
sub check_url
{
my ($url) = shift;
my $ua = new LWP::UserAgent;
my $req = new HTTP::Request('HEAD', $url);
my $res = $ua -> request($req);
if ($res->is_success) {
return(1);
}else{
return(0);
}
}
sub print_jis{
local($value) = @_;
&jcode'convert(*value, 'jis');
$value;
}
sub title_autoget {
my( $url_title ) = shift;
return Jcode->new(&get_title( $url_title )) -> euc;
}
sub email_check {
my ( $add ) = shift;
Email::Valid->address( -address => $add,
-mxcheck => 1 ) ? return(1) : return(0);
}