######################################################################## # # fan_exam.cgi ver.20030108 # 「ファン度調査」用perlスクリプト # by JTCY(http://jtcy.obzaiya.com)(jtcy@obzaiya.com) # First Created: 2003/01/01 18:33 # Last modiried: 2003/01/09 0:36 # ######################################################################## -------------------------------------------------- ■ 1 ■ はじめに・動作環境 -------------------------------------------------- Mystery Laboratoryさん(http://www5b.biglobe.ne.jp/~mystery/)の「本格ミ ステリファン度調査」を嚆矢とした「ファン度調査」というのがちょっと流行っ ています。ある特定の(書籍や名探偵といった)リストに対して、既読かどうか、 知っているかどうかをたずねる、というものです。これに使われているスクリプ トは、既存のアンケート系CGIを使っている物が多いようです。しかし、複数回 答の処理や項目の管理など、ファン度調査向きでない点もあるように見受けられ ました。そこで、自分の勉強を兼ねてファン度調査に特化したperlスクリプトを 書いてみることにしました。 「ファン度調査」のために作りましたので、ファン度調査に適したいくつかの 機能があります。また、勉強のため、ご意見やご要望などにはできるだけ対応し ていく予定です。 このプログラムはperlスクリプトです。perlのバージョンは5を想定しています。 スクリプトの記述の文字コードにはeucを利用しています。euc以外にコードを 変更すると、正しく動作しなくなる可能性があります。 -------------------------------------------------- ■ 2 ■ メリットとデメリット -------------------------------------------------- ●2.1● メリット ▼2.1.1▼ CSV形式で項目の管理が可能 たとえば書籍だと、著者・出版社・価格などの項目が表になっていると便利な のですが、既存のものだと項目→票数の一対一対応しかできないため、この部分 が醜くなってしまうきらいがありました。fan_exam.cgiはcsvで複数項目を管理 できます。また、項目の初期設定も、設定ファイルにEXCELで編集できる CSV(Camma Sepalated Values)形式を採用しているため、簡便です。 ▼2.1.2▼ 項目別昇順・降順ソートが可能 前項の各項目は、昇順・降順それぞれでソートすることができます。著者名な ど漢字を利用する項目には、読み仮名を設定し、その順にソートするすることも 可能です。 ▼2.1.3▼ 全投票中のパーセンテージ表示 既存のアンケートCGIのパーセンテージ表示は、全ての得票の合計値に対する パーセンテージを計算するため、「アンケート回答者のうち何パーセントに当て はまるのか」といった情報が読みとれません。fan_exam.cgiは投票者数を記憶し、 投票者のうち何人が投票したかを表示するので、パーセンテージが直感的でわか りやすくなっています。 ▼2.1.4▼ 書店サイトに自動リンク ISBNコードを項目中に含めると、自動で書店サイトの書籍紹介にリンクを張ります。 現在、amazon.co.jpへのリンクに対応しています。その他の書店サイトにも、 要望があり次第対応します。 ▼2.1.5▼ HTML表示部を自由に変更可能 HTMLの表示にはテンプレートファイルを読み込む形を取っているので、背景画像・ スタイルシートその他のHTMLのデザインは自由に変更できます。 ●2.2● デメリット(兼 To Do) ▼2.2.1▼ 処理が遅い アルゴリズムが最適化されていないため、冗長な計算を何回も繰り返してい るため、処理に時間がかかります。場所によっては、管理者から注意されるかも 知れません。 (※スクリプトを見直して、そこそこ速くなるようにはしたつもりですが、リス トの量が1000行を越えるような大量のデータの場合は、ちょっとつらくなるかも 知れません。) ▼2.2.2▼ EUCでしか表示できない 表示に使っている文字コードはeuc-jpのみです。shift JISやUNICODEでの出 力は対応していません。 (※要望があり次第対応します。) -------------------------------------------------- ■ 3 ■ ファイル構成 -------------------------------------------------- 以下のファイルを用意してください。カッコ内はパーミッションです。 (構成例) ./ (0777) ├/lockdir (0777) │└examlock (0666) │ ├jcode.pl (0644) ├fan_exam.cgi (0755) ├fan_exam.tpl (0644) ├booklist.csv (0666) └image.png (0644) ●lockdir(ディレクトリ) ロックファイルを保存しておくためのディレクトリです。 名前の変更は不可能です。 ●examlock(ロックファイル) ロックの状態を記録するためのファイルです。中身は何でも構いません。 空で結構です。 このファイルの名前は変更できません。このファイルの中身を変更する必要は ありません。 ●jcode.pl(インクルードファイル) 日本語を処理するための機能がつまったperlスクリプトファイルです。 jcode.plはKazumasa Utashiroさんの著作物です。(http://srekcah.org/jcode/) このファイルの名前は変更できません。このファイルの中身を変更してはいけ ません。 (※変更する場合にはjcode.plとは異なる、という明示的な説明が必要です。 詳しくは上記jcode.plオフィシャルサイトをごらん下さい。) ●fan_exam.cgi(実行ファイル) CGI本体のファイルです。 名前は自由に変更できますが、拡張子が.cgiか.plでないと動かないプロバイ ダが多いかと思います。 場合によって、ファイルの先頭部分を変更する必要があります。変更の詳細に ついては後述します。 ●fan_exam.tpl(テンプレートファイル) HTMLの表示のしかたを決定するファイルです。 名前は変更できますが、変更した場合には実行ファイルの先頭にある設定部分 を変更する必要があります。 内容は変更することができます。内容の変更の詳細については後述します。 ●booklist.csv(リストファイル) アンケートの項目を設定したファイルです。CSV形式で書き込みます。 名前は変更できますが、変更した場合には実行ファイルの先頭にある設定部分 を変更する必要があります。 内容は変更しないと使い物になりません。内容の変更の詳細については後述し ます。 ●image.png(画像ファイル) グラフの表示に使う画像ファイルです。 名前は変更できますが、変更した場合には実行ファイルの先頭にある設定部分 を変更する必要があります。 内容を変更する場合には、画像編集ソフトを使ってください。画像のフォーマ ットはPNG形式である必要はありません。 -------------------------------------------------- ■ 4 ■ 実行ファイルの設定部分 -------------------------------------------------- 実行ファイルには、一部設定をしなくてはいけない部分があります。 設定は、全て $nantoka = 'hogehoge'; の'hogehoge'の部分を変更します。 値の両端にあるのは'(シングルクオート)です。値のあとには;(セミコロン)を付 けなくてはなりません。 ●fan_exam.cgiの中身●(冒頭部の抜粋、先頭の数字は行番号) > 1:#!/usr/local/bin/perl 「#!」に続けて、perlを動かすパスのある場所を指定しなくてはいけません。 普通は/usr/local/bin/perlですが、プロバイダによって異なる場合がありま す。 >16:#グラフを示すのに使う画像ファイルの場所 >17:$image_uri = './image.png'; image.pngのある場所を指定します。相対パス指定でも、絶対パス指定でも、http://から始まるURI型の指定でも構いません。 画像ファイルの名前を変更した場合、それに合わせて値を変更する必要があります。 >19:#最初に呼び出した時のソート順/'-1r'で得票の多い順 >20:$default_query = '-1r'; デフォルトの表示の時に何を基準にソートするかを指定します。リストファイ ルの項目番号(0始まり)で指定します。デフォルトで昇順、「r」を付けると降 順になります。 >22:#テンプレートファイルの場所 >23:$template_file = 'fan_exam.tpl'; テンプレートファイルがある場所を指定します。絶対パス・相対パスでの指定 が可能ですが、http://から始まるURI型では指定できません。 テンプレートファイルの名前を変更した場合、それに合わせて値を変更する必 要があります。 >25:#リストファイルの場所 >26:$book_file = 'booklist.csv'; 項目を指定したリストファイルの場所を指定します。 リストファイルの名前を変更した場合、それに合わせて値を変更する必要があ ります。 >28:#テーブルの詳細設定 >29:$table_top = '