Comments
Description
Transcript
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/</</g; $value=~s/>/>/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; }