GIFの天使

情報システム 卒業制作
○システム名
星座別占い
○作成者
0672090 棚田 久美子
○目的
生年月日の入力で今日の運勢を占うことができる。また、2008 年上半期星座別の運勢を
見る事ができる。
○概要
12星座の運勢と今日の運勢を占う事ができるサイト。
○機能
「本日の運勢」では大吉、中吉、小吉、吉、末吉、凶、大凶で表示される。
「本日の運勢」はフリーソフトを利用し、背景や配色などを変えて作成しました。
「星座別の運勢」では、2008年上半期の総合運、LOVE 運、金運、仕事運が表示され
る。特に恋愛運を中心とした結果。
星座別の運勢ではCGIを使ってデザインなど12星座同時に変更が出来るようにする。
○動作環境
Unix、Apache、Perl
○参考文献
・立木冬儷、”守護天使占い”、CanCam,1月号、P425
431、(2008 年)
・フリーソフト フリーシェア フリーゲーム ダウンロードの今日の運勢 3.00
http://download.goo.ne.jp/software/category/win/amuse/fortune/
・タイトル風文字/HTML タグ素材集
http://copicopi.com/titlefont.html
○ファイルの構成
K:¥K06090¥PUBLIC_HTML¥CGI¥SOTUGYOU
01.gif
02.gif
03.gif
04.gif
astro.cgi 12星座別の CGI
astro.dat
hutago_1sp.gif
ite_1sp.gif
kabe_2242[1].jpg
kani_1sp.gif
mizugame_1sp.gif
ohituzi_1sp.gif
otome_1sp.gif
oushi_1sp.gif
sasori_1sp.gif
seiza.html 12星座別の運勢のページ
shishi_1sp.gif
tenbin_1sp.gif
top.htm トップページ
uo_1sp.gif
uranai.BAK
uranai.cgi 本日の運勢の CGI
uranai.html 本日の運勢のページ
yagi_1sp.gif
○Perl スクリプトのソース
Astro.cgi
#!/usr/local/bin/perl
require 'jcode.pl';
%param = &get_param;
if(!$param{zodiac}){
$param{zodiac} = 1;
}
# astro.dat からデータ取得
open(IN,"astro.dat") || &error("Cannot open astro.dat:$!");
while(<IN>){
($id,$seizamei,$title,$zentai,$love,$shigoto,$kin)
= split(/¥t/,$_);
if($id == $param{zodiac}){ last ;}
}
#HTML の表示
print "Content-type: text/html;charset=Shift_JIS¥n¥n";
print <<_HTML_;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>seizamei</title>
<link rel="stylesheet" href="../style1.css">
</head>
<body background="02.gif" text="#000000" link="#0000ff" vlink="#ff00ff" alink="#ff0000">
<font size="+1">
<TABLE border="0">
<h3>$seizamei</h3>
<p>
2008年の上半期
</p>
<p>
$title
</p>
<p>
$zentai
</p>
<h4>LOVE 運</h4>
<p>
$love
</p>
<h4>仕事運</h4>
<p>
$shigoto
</p>
<h4>金運</h4>
<p>
$kin
</p>
</body>
</html>
_HTML_
exit;
#################### 基本処理 ####################
sub get_param
{
local($query, $key, $data, %param);
if($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}else{
#
&error("unknown request method");
$query = $ENV{'QUERY_STRING'};
}
foreach(split(/&/, $query)){
($key, $data) = split(/=/, $_);
$data =~ s/¥+/ /g;
$data =~ s/%([¥da-f][¥da-f])/pack("C", hex($1))/egi;
&jcode'convert($data, 'sjis');
#$data =~ s/,/,/g;
$data =~ s/¥r//g;
$param{$key} = $data;
}
return %param;
}
sub error
{
print "Content-Type: text/html¥n¥n";
print <<"---EOF---";
<HTML><HEAD><TITLE>Information</TITLE></HEAD>
<BODY bgcolor="white">
<FONT color="red"> $_[0]</FONT>
<FORM method="GET" action="$top_page">
<INPUT type=SUBMIT value="最初のページに戻る">
</FORM>
</BODY></HTML>
---EOF--exit;
}
uranai.cgi
#!/usr/local/bin/perl -w
# =================================
# [sosite] Perl サンプル 占い
# =================================
use Time::Local;
##use Jcode;
###use Encode;
require 'jcode.pl';
my %inItem;
my $errMsg='';
my $uranaiMsg='';
# =================================
# メインルーチン
# =================================
# 入力情報取得
%inItem = &get_inItem();
# 入力チェック、占い
&uranai();
# 画面出力
&html_put();
exit();
# =================================
# 入力チェック
# =================================
sub uranai
{
#*** 現在の日時取得 ***
local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon++;
#=====================================
# 入力チェック
#=====================================
# 数値チェック
if (( $inItem{'yyyy'} =~ /^[0-9]+$/ ) &&
( $inItem{'mm'}
( $inItem{'dd'}
} else {
=~ /^[0-9]+$/ ) &&
=~ /^[0-9]+$/ )) {
$errMsg='数値を入れてください';
return (false);
}
# 日付の範囲チェック
if (( $inItem{'yyyy'} < 1900 ) || ( $inItem{'yyyy'} > $year ) ||
( $inItem{'mm'}
( $inItem{'dd'}
<1
<1
) || ( $inItem{'mm'}
) || ( $inItem{'dd'}
> 12
> 31
) ||
)) {
$errMsg='日付を確認してください';
return (false);
}
# その月の末日を計算(2 行目は閏年の計算)
local($lastday) = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$inItem{'mm'} - 1];
# 閏年を加算
$lastday += ($inItem{'mm'} == 2 && ($inItem{'yyyy'} % 4 == 0 && $inItem{'yyyy'} %
100 != 0 || $inItem{'yyyy'} % 400 == 0));
# 末尾チェック
if
($inItem{'dd'} > $lastday)
{
$errMsg='日付を確認してください';
return (false);
}
#=====================================
# 占い
#=====================================
local($keisan)=($year+$mon+$mday)-($inItem{'yyyy'}+$inItem{'mm'}+$inItem{'dd'});
srand($keisan);
$keisan=int(rand 100) + 1;
if
($keisan>95){$uranaiMsg='「大吉」';}
elsif($keisan>80){$uranaiMsg='「中吉」';}
elsif($keisan>60){$uranaiMsg='「小吉」';}
elsif($keisan>40){$uranaiMsg='「吉」';}
elsif($keisan>20){$uranaiMsg='「末吉」';}
elsif($keisan>05){$uranaiMsg='「凶」';}
elsif($keisan>00){$uranaiMsg='「大凶」';}
return (true);
}
# =================================
# 画面出力(テンプレート html を読み込み置換し出力する)
# =================================
sub html_put
{
local($outMsg);
if ($errMsg ne ''){
$outMsg='<B><FONT color="#ff0000">'."$errMsg".'</FONT></B>';
}else{
$outMsg='今日の運勢は<B><FONT size="+4">'."$uranaiMsg".'</FONT></B>です。
';
}
# テンプレートの読み込み
open HTML, 'uranai.html' or SR_Err("画面が開けません");
@html = <HTML>;
close HTML;
print "Content-type: text/html¥n¥n";
foreach (@html){
s/<!--yyyy-->/$inItem{'yyyy'}/g;
s/<!--mm-->/$inItem{'mm'}/g;
s/<!--dd-->/$inItem{'dd'}/g;
s/<!--MSG-->/$outMsg/g;
print;
}
exit();
}
# =================================
# エラープリント
# =================================
sub SR_Err
{
print "Content-type: text/html¥n¥n";
print "<html><head><head><body>¥n";
print $_[0];
print "¥n</body></html>";
exit();
}
# =================================
# 入力情報取得
# =================================
sub get_inItem
{
local(@itemtbl,$item,$key,$value,$indata);
if ($ENV{"REQUEST_METHOD"} eq "POST"){
read(STDIN,$indata,$ENV{"CONTENT_LENGTH"});
}else{
$indata=$ENV{"QUERY_STRING"};
}
@itemtbl=(split(/&/,$indata),split(/&/,join("&",@ARGV)));
%inItem=();
foreach $item (@itemtbl)
{
($key,$value)=split(/=/,$item);
$value=~tr/+/ /;
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$value=~s/</&lt;/g;
$value=~s/>/&gt;/g;
if ($value eq ()) { $value=""; }
##
# Jcode.pm
##
$value=Jcode->new($value, 'sjis')->h2z->sjis;
###
# Encode.pm
###
from_to($value, 'shiftjis', 'euc-jp');
###
Encode::JP::H2Z::h2z(¥$vakue);
###
from_to($value, 'euc-jp', 'shiftjis');
# jcode.pl: 半角カナを全角に変換
$kcode = &jcode::getcode(*value);
if($kcode eq 'sjis') {
&jcode::h2z_sjis(¥$value);
}
if($kcode eq 'euc') {
&jcode::h2z_euc(¥$value);
}
if($kcode eq 'jis') {
&jcode::h2z_jis(¥$value);
}
$inItem{$key}=$value;
}
%inItem;
}