取扱説明書/CGI版
汎用リスト生成プログラム - Listgen

■もくじ

設定
●使用法
更に踏み込んだ使い方
トラブルシューティング
Listgen をCGI として使う場合には listgen_c.cgi を用います。
listgen_c.cgi をエディタで開いて下さい。

■設定

<1.perlのパス>
listgen_c.cgi の一行目のPerlへのパスををお使いのプロバイダに合わせて書き換えます。
もし、perlのパスが /usr/bin/perl だったら、
#!/usr/bin/perl
と書き換えて下さい。 頭の#!は消してはいけません。


<2.データファイルのあるディレクトリの名前>
データファイルを格納したディレクトリの名前を指定します。
データファイルを格納したディレクトリは listgen_c.cgi のあるディレクトリの中(配下)に無ければなりません。
セキュリティなどの関係から他のディレクトリにログファイルを入れた場合はここを変更します。
readme.html の通りにインストールしたのなら変更しないで下さい。


<3.定義ファイルのあるディレクトリの名前>
定義ファイルを格納したディレクトリの名前を指定します。
定義ファイルを格納したディレクトリは listgen_c.cgi のあるディレクトリの中(配下)に無ければなりません。
セキュリティなどの関係から他のディレクトリに定義ファイルを入れた場合はここを変更します。
readme.html の通りにインストールしたのなら変更しないで下さい。

■使用法
とりあえず、標準添付のサンプルファイルを使って使い方を掴んでみましょう。
def ディレクトリに link.def 、 data ディレクトリに link.csv , link_sogo.csv がコピーされているという前提で話を進めて行きます。

link.def と link.csv , link_sogo.csv を使って、けもの関係のリンク集を表示させてみましょう。
link.csv 又は link_sogo.csv を見れば分かると思いますが、けもの関係のリンクは区分を kemono に設定しています。
区分の説明は Listgen / 総合説明書 に書いてありますので、そちらをどうぞ。


【書式】
listgen.cgi?MODE=[表示モード]&DEF=[定義ファイル名]&FILE=[データファイル名]&CLASS=[指定区分]&SEARCH=[検索文字]&METHOD=[検索方法]

MODE=
[表示モード]
指定区分に該当する物を全て表示するか(通常表示)、その中で新着フラグの立った情報のみを表示するかを指定します。
通常表示は 0 、新着のみ表示は 1 を指定します。
DEF=
[定義ファイル名]
使用する定義ファイルの名前を指定します。
拡張子の .def は省略します。
例では link.def を呼び出すので DEF=link と指定します。
FILE=
[データファイル名]
使用するデータファイルの名前を指定します。
拡張子の .csv は省略します。

複数ファイルを指定する場合は
FILE=xxx&FILE=yyy&FILE=zzz…
という感じで FILE=[データファイル名] 節を足してゆきます。
そのとき、区切り文字の & を忘れないで下さいね。 コンピュータがオプションを認識できません。

例では link.csv と link_sogo.csv を呼び出すので FILE=link&FILE=link_sogo と指定します。
CLASS=
[指定区分]
データベースの中で、表示させたい区分を指定します。
複数区分を指定する場合は
CLASS=xxx&CLASS=yyy&CLASS=zzz…
という感じで CLASS=[指定区分] 節を足してゆきます。
そのとき、区切り文字の & を忘れないで下さいね。 コンピュータがオプションを認識できません。

例では kemono だけが欲しいので、純粋に CLASS=kemono と指定します。

特殊な区分に all があります。 all が指定された場合、全ての区分を表示します。
逆を言うと、データ側の区分に all を使ってはいけません。
SEARCH=
[検索文字]
※省略可
区分では細かいニーズに応えられない場合や、検索機能をユーザに使ってもらう場合はこれが必要になるでしょう。
複数の検索文字がある場合は
SEARCH=検索文字1+検索文字2+検索文字3…
という感じで +[検索文字] 節を足してゆきます。 ( + 文字を区切り文字に使います)
METHOD=
[検索方法]

※省略可
検索方法を or か and という文字列で指定します。
省略すると or を指定したことになります。

orはOR演算(○○または●●)、andはAND演算(○○かつ●●)を示します。

or を指定した場合、
[検索文字1] または [検索文字2] または [検索文字3] …
という感じで全ての文字列を比較し、どの条件が成り立っても(どれか一つが発見できれば)表示します。

and を指定した場合、
[検索文字1] かつ [検索文字2] かつ [検索文字3] …
という感じで全ての文字列を比較し、全ての条件が成り立たなければ(全て見つからなければ)表示しません。


■実地訓練
では、以上のルールに則って「けもの関連のリンクのみ」を表示させてみましょう。

ブラウザのURL入力欄に
http://www.hoge.net/~user/cgi-bin/listgen/listgen_c.cgi?MODE=0&DEF=link&FILE=link&FILE=link_sogo&CLASS=kemono
と入力します。
(あなたのプロバイダが www.hoge.net で、あなたのユーザ名が user の場合)

けものリンク集は表示されましたか? 上手く行かなかった場合はトラブルシューティングを読んで下さい。

上手く行ったら、ブラウザのソースを表示させてみて下さい。 そして、テキストの一番最後まで移動して下さい。
「結果報告」と題して、コメントとして各種情報が書き込まれているはずです。
何かおかしいことがあったときは、ここを一番最初に見る癖を付けるようにして下さい。




もうひとつ。
http://www.hoge.net/~user/cgi-bin/listgen/listgen_c.cgi?MODE=0&DEF=link&FILE=link&FILE=link_sogo&CLASS=kemono&CLASS=org
とすると、「link.csv と link_sogo.csv」から「kemono と org の区分の物だけ」を取り出します。



だめ押し(^_^;
http://www.hoge.net/~user/cgi-bin/listgen/listgen_c.cgi?MODE=1&DEF=link&FILE=link&FILE=link_sogo&CLASS=all
とすると、「link.csv と link_sogo.csv の中の全てのデータ」から「新着フラグの立った物だけ」を取り出します。



さて、上手く行ったら調子に乗っちゃう(で、ドツボにハマる…(^x^;)のが人間の性。 検索機能を試してみましょう。
先ほどの
http://www.hoge.net/~user/cgi-bin/listgen/listgen_c.cgi?MODE=0&DEF=link&FILE=link&FILE=link_sogo&CLASS=kemono
&SEARCH=イラスト
を足してみましょう。 つまりは
http://www.hoge.net/~user/cgi-bin/listgen/listgen_c.cgi?MODE=0&DEF=link&FILE=link&FILE=link_sogo&CLASS=kemono&SEARCH=イラスト
こういうコトです。

どうでしょう? 「けものリンク集」の中から「『イラスト』の文字を含むページのみ」が表示されましたか?
METHOD= を省略しましたが、検索語が一つの場合は意味がないので省略可能です(ただ、内部的には or 演算しています)。
こうやって条件を増やしてデータを絞り込んでゆきます。



今度は
&search=イラスト+ぷに&METHOD=and
にしてみましょう。 つまり、
http://www.hoge.net/~user/cgi-bin/listgen/listgen_c.cgi?MODE=0&DEF=link&FILE=link&FILE=link_sogo&CLASS=kemono&SEARCH=イラスト+ぷに&METHOD=and
と入力します。
「けものリンク集」の中から「『イラスト』と『ぷに』の文字を含むページのみ」が表示されましたか?



しつこいですが、もう一つ(^^;
FILE=link
を削除します。 つまり、
http://www.hoge.net/~user/cgi-bin/listgen/listgen_c.cgi?MODE=0&DEF=link&FILE=link_sogo&CLASS=kemono&search=イラスト+ぷに&METHOD=and
「けものリンク集」の中から「『相互リンク』で『イラスト』と『ぷに』の文字を含むページのみ」が表示されましたか?
link.csv を探さなくて良くなったので、少しだけ表示が早くなったはずです(体感できないかも知れないですが…)。
このように、サーバの負荷も考えながらデータファイルを作るのがベストです。



実際にはこのURLを<A>タグに指定してハイパーリンクとして使います。
閲覧者はハイパーリンクをクリックすることで即座に絞り込まれたデータを表示させることが出来ます。

■更に踏み込んだ使い方
CGI 版に限り、フォームを使った高度な利用が出来ます。

例えば、
<FORM action="cgi-bin/listgen/listgen_c.cgi" METHOD="POST">
 <CENTER><TABLE border="1">

  <TR>
   <TH>単語:</TH>
   <TD colspan="2">
    <INPUT size="20" type="text" name="SEARCH" maxlength="20"><BR>
    ※単語と単語の間は半角スペースで区切って下さい。
   </TD>
  </TR>

  <TR>
   <TH rowspan="2">条件:</TH>
   <TD>単語が一つでもあればよい</TD>
   <TD><INPUT type="radio" name="METHOD" value="or" checked></TD>
  </TR>

  <TR>
   <TD>単語は全てなければならない</TD>
   <TD><INPUT type="radio" name="METHOD" value="and"></TD>
  </TR>

  <TR>
   <TD colspan="3" align="right"><INPUT type="submit" value="検索"></TD>
  </TR>

 </TABLE></CENTER>
 <INPUT type="hidden" name="MODE" value="0">
 <INPUT type="hidden" name="DEF" value="link">
 <INPUT type="hidden" name="FILE" value="link">
 <INPUT type="hidden" name="FILE" value="link_sogo">
 <INPUT type="hidden" name="CLASS" value="all">
</FORM> 
こんなHTMLを用意したとします。
画面上には
単語:
※単語と単語の間は半角スペースで区切って下さい。
条件: 単語が一つでもあればよい
単語は全てなければならない
と表示されます。
フォームに関する細かい解説はあまりに大変なので、それは HTML 参考書に譲ることにします。

このフォームは訪問者が自由に検索単語を入力してリンク集から検索結果を取り出すものです。
ヒントのためにこのフォームが何をやっているのかを書いておきましょう。
  • 検索単語はパラメータ SEARCH にセット (一行入力欄に入力させる)
  • 検索条件はパラメータ METHOD に「or」又は「and」をセット (ラジオボタンで選択させる)
  • 隠しパラメータとして MODE=0 , DEF=link , FILE=link , FILE=link_sogo , CLASS=all を指定する
  • 検索 (submit) ボタンが押されたら "cgi-bin/listgen/listgen_c.cgi" にこれらの値をPOSTメソッドで送信する
これは結果的に
listgen.cgi?MODE=0&DEF=link&FILE=link&FILE=link_sogo&CLASS=all&SEARCH=○○○&METHOD=○○○
と同じ意味になります。
ラジオボタンで CLASS を選ばせたりすると、更に検索の幅が広がりそうですね。
(TINAMI とか Surfers Paradice のパチモノが割と簡単に作れそうです)


■Appendix - 検索単語の区切り文字について
「なぜ、検索単語を半角スペースで区切らせるんだろう」と思った方もおられるでしょう。
「半角スペース」はURLでは「+」として扱われます。 この変換はブラウザが勝手にやってくれます。
つまり、「女子大生 湯煙旅情 殺人事件」と入力した場合、「女子大生+湯煙旅情+殺人事件」と変換されます。
(漢字も記号に変換されるので、正確にはもっとグシャグシャの文字列になります)

おっ、と思った方、察しが良いですね。 「使用法」の『書式』を見てみましょう。 …良くできた仕組みでしょう?(^o^)
実際は「全角スペース」も区切り文字に使えるようにはしています。

■Appendix - POST か GET か?
Listgen は POST メソッドでも GET メソッドでも値を入力できるように作ってあります。
お好みの方をお使い下さい。

■トラブルシューティング
ちなみに、これらのエラーメッセージが表示されるということは、listgen_c.cgi 自体は正しく動作していることを意味します。
  • 「正しい表示モードを入力して下さい」と表示された

    通常表示の場合は 0 、新着表示の場合は 1 を指定しなければなりません。
    それ以外の数値を入力するとこのエラーが表示されます。


  • 「外部からの相対パス指定は許されていません 〜 」と表示された

    いたずら(パスワードハックなど)防止のため、 ../ などの相対パスを指定できないようになっています。
    つまり、データファイルと定義ファイルは、listgen_c.cgi で指定したディレクトリ以外におくことは出来ません。


  • 「指定された条件のデータは見つかりませんでした。 〜 」と表示された
    読んでの通りです。

    1. 区分の指定を間違えた(綴りミスなど)
    2. 本当にその区分が無い
    3. 検索条件を絞り込みすぎた


  • 「現在、新着はありません。」と表示された

    読んで字の如くです。 表示させたいデータファイルの新着フラグを 1 に設定するのを忘れていませんか?


  • 指定したはずのデータファイルが表示されていない 又は
    「指定された条件のデータは見つかりませんでした。 〜 」と表示された

    1. 指定されたデータファイルが本当に無い
    2. データファイルの指定を誤っている(綴りミスなど)
    3. データファイルのパーミッションが読みとり可能になっていない
      (データファイルのパーミッションは少なくとも(604)でなければいけません)

    ブラウザのソースを表示させ、最後の方に移動させて下さい。
    結果報告として、読み込みに失敗したファイルが記載されているはずです。


<それ以外>
  • Internal Server Errorと表示された

    1. listgen.cgi のパーミッションは実行可能(705)になっていますか?
    2. listgen.cgi は実行されましたが、プログラムにバグ・又はサーバの差異により正常に動きませんでした。
      入会しているプロバイダの名前と、Listgen のバージョン番号を添えて、サポート掲示板にてお知らせ下さい。


  • どーしてもダメ。 っていうか作った奴殺す。 時間返せ。
    極力頑張って下さい(⌒ω⌒; 大概は設置した人のミスです。
    どうしても駄目な場合は、入会しているプロバイダの名前と、Listgen のバージョン番号を添えて、サポート掲示板にてお知らせ下さい。

    正直、このスクリプトは使いこなすのが難しいので、インストールできなかった人は素直に諦めた方が良いかも…。 突き放すようで申し訳ないんですが。


©1999,2000 不可思議絵の具
(http://tech.millto.net/~fuka/)