homeホームHTMLに役立つヒントmsearch導入記m_andor.cgi

m_andor.cgi

 and検索、or検索を別々の入力欄に記入して検索させたい、という要望があるようなので、簡単な中間CGIを作りました。m_andor.cgiといいます。必要に応じて改造して使ってください。CGIを使わないJAVAscript版も用意しました。

目次

1.検索の流れ ▲ページトップ

 HTMLの検索フォーム(またはmsearchのconfig.datを変更して同様のページを出力させるようにする。)で検索キーワードを入力する。
    ↓
 m_andor.cgiが入力を受けてor検索を整形してmsearch.cgiに渡す。
    ↓
 msearch.cgiで検索して結果表示。
    ↓
 2度目以後の検索はmsearch.cgiで行う。

 という流れになります。

 もっと直接的な方法に、msearch.cgi自体を改造する方法があります。しかし、msearch.cgiを改造すると、バージョンアップの際にいちいち再改造が必要になります。

 中間CGIを使えば、msearch.cgiがバージョンアップしても、検索式の文法が変更されない限り再改造の必要がありません。ただし、CGIを2つ介することになりますので、サーバの負担は増えます。

2.検索HTMLの例 ▲ページトップ

 検索用HTMLの例を示します。このように、and検索用とor検索用のふたつの入力フィールドを用意します。

  1.  テキストフィールドのnameはそれぞれ「query_and」と「query_or」にします。m_andor.cgiはこのふたつを受け取る仕様になっています(他に1ページあたりの結果表示数「name="num"」も受け取れます)。
  2.  この検索HTMLとm_andor.cgiの置き場所が違う場合は、「action="m_andor.cgi"」の部分を相対パスで指定します。
  3.  「accept-charset="x-euc-jp"」とあるように、EUCでキーワードを渡すようにしてください。

 この3点が検索用HTMLの注意点です。

<form action="m_andor.cgi"accept-charset="x-euc-jp" method="post" enctype="x-www-form-urlencoded">

<p>and検索キーワード<input name="query_and" type="text" size="30"><br>
 (スペースで区切ってキーワードを複数指定すると、and検索となります)</p>

<p>or検索キーワード<input name="query_or" type="text" size="30"><br>
 (スペースで区切ってキーワードを複数指定すると、or検索となります)</p>

<p>(and検索とor検索は同時に指定できます。例:andに「aaa」、orに「bbb ccc」を指定すると、「bbbかcccを含み、aaaも含むページ」が検索されます。)</p>

<p><input name="name" type="submit" value="検索">
</form>

 上記のソースは次のようになります。下でテスト検索もできます。デザインは適当に変更してください。

and検索キーワード
 (スペースで区切ってキーワードを複数指定すると、and検索となります)

or検索キーワード
 (スペースで区切ってキーワードを複数指定すると、or検索となります)

(and検索とor検索は同時に指定できます。例:andに「aaa」、orに「bbb ccc」を指定すると、「bbbかcccを含み、aaaも含むページ」が検索されます。)

 なお、最初の検索後も同様な機能を持たせたいなら(検索結果画面にも同様の機能を持たせたいなら)、msearchのconfig.datに手を入れて、上のフォームを出力するようにする必要があります。

3.インストール方法 ▲ページトップ

3-1.ダウンロード ▲ページトップ

 m_andor.txtをクリックして、表示されたテキストを「m_andor.cgi」という名前で保存します。この時、漢字/改行コードはEUC/LFで保存してください。必ず漢字コード・改行コードをコントロールできるテキストエディタを使ってください。

 デバッグ用のルーチンもそのままというスクリプトなので、目障りだったらデバッグ部分とかさくっと削除してください。

 このスクリプトはクライアント(ブラウザ)に対して結果(画面)を出力しないため、本来なら「m_andor.pl」という名前にするのが正しいです。

 .plファイルでCGI動作を許しているサーバ(ちょっと言い方変ですが(^^;)では.plファイルにするといいでしょう。ここではperlスクリプトのお作法に反し、汎用性を考えてあえて.cgiとして説明をすすめます。

3-2.CGIの設定 ▲ページトップ

3-2-1. 最初の行をプロバイダの設定に合わせて「#!/usr/local/bin/perl」か「#!/usr/bin/perl」に変更してください。
3-2-2. m_andor.cgiは特に必要がない限りmsearch.cgiと同じディレクトリにおきます。msearch.cgiと別のディレクトリにおく場合だけ、次の2カ所の設定を変更する必要があります。

########### 設定開始 ###############
# msearch.cgiと同じディレクトリにおいて使うことが前提です。
# その場合は以下の設定は変更する必要はありません。
# 必要な場合だけ変更してください。

# msearch.cgiの位置を相対パスで。
# 同じディレクトリなら「./msearch.cgi」とする。
$msearch = "./msearch.cgi";

# jcode.plの位置を相対パスで。
# 同じディレクトリなら「./jcode.pl」とする。
$jcode = "./jcode.pl";

########### 設定ここまで ###############

3-3.パーミッションの設定 ▲ページトップ

 パーミッションは通常755にします。サーバによって制約がある場合はCGIの動作パーミッションにしてください。すでにmsearch.cgiが動いているなら、それと同じパーミッションでOKです。

3-4.使用方法 ▲ページトップ

 後は検索HTMLにブラウザでアクセスし、検索するだけです。

3-5.cfgファイル ▲ページトップ

 msearch ver.1.5で使うための設定ファイル「m_andor.cfg」を用意しました。クリックして表示されたテキストを「m_andor.cfg」という名前で保存してください(EUC/LFで)。呼び出し時に「msearch.cgi?config=m_andor」とすると呼び出せます。

4.m_andor.cgiのやっていること ▲ページトップ

 検索フォームを受け取り、「q_and」と「q_or」に記入されたキーワードを取り出し、q_orをor検索のために()で囲い、and検索と合体した上、URIエンコードしてmsearch.cgiに渡します。非常に簡単な作りです。

 詳しく知りたい場合はスクリプトを眺めてください。コメントをこれでもかと入れてありますから、だいたいわかるはずです。

 単機能なCGIですので、サーバの負担は軽いと思うんですが…。

 あ、検索HTMLの例ではメソッドをPOSTにしていますが、GETメソッドでも動作します。するはずです……テストしてないや。

 なお、「msearch導入記/スキン」でご紹介している簡単検索はこのCGIでは使えません。queryを受け取ったり、それをつなぐ機能がないからです。

5.JAVAscript版 ▲ページトップ

 中間CGIを使わず、JAVAscriptで直接msearch.cgiに引き渡す方法もあります。利点は余分なCGIを使わずにすみ、サーバの負荷が軽くなることです。

 逆に弱点は、JAVAスクリプトがOFF、またはサポートしないブラウザでは動作しないという点です。

 サンプルファイルをこちらに置きました。ソースを見てください。改造などはご自由にどうぞ。Macintosh版IEでしか動作検証していないので、動かなかったらごめん。

 やっていることは「m_andor.cgiのやっていること」と同じです。

 あらかじめ、AND検索用キーワード入力欄(name="query_and")、OR検索用キーワード入力欄(name="query_or")、それに隠しフィールドとしてhidden指定でキーワード欄(name="query")を作っておきます。

 「検索」がクリックされたら整形・合体してquery欄に入力してCGIに送信しています。

 なお、msearch.cgiのバージョンは問いません。すべてで動作するはず。

6.JAVAscript版/選択入力搭載 ▲ページトップ

 JAVAscript版に、さらに選択入力(簡単検索)を搭載したバージョンです。

 通常、ノーマルなmsearchを表示しておいて、検索近辺に「詳細な検索」としてこのページへのリンクをつけておくとよいのではないかと思います。こんな感じ。あ、下の検索窓は動作しません。「詳細検索」をクリックしてください。

 ※詳細検索

 googleやgooなどの大手検索サイトでもこういう手法を用いていますね。

 なお、「詳細検索」で表示されるページからは、実際に検索も可能になっています。テストしてみてください。

7.著作権・免責事項・履歴 ▲ページトップ

 m_andor.cgiはフリーウェアです。自由に使用・改変・改変したものを再配布してかまいません。僕の許可はいりません。スクリプト中の作者の表示を削除しても全然OKです。msearch.cgi本体に組み込むルーチンの叩き台にするのもOKです。

 お約束ですが、このCGI/JAVAscriptを使用して損害や不利益を被ってもいっさいの保証はありません。

 なお、もっと便利に修正したぞ、という場合はご報告していただけると嬉しいです。このページから配布ページにリンクさせていただきます。

2003/8/20 m_andorJS.html ver.0.1

 JAVAscript版の最初のバージョン。

2003/7/16 m_andor.cgi ver.0.2

 入力がなかった場合でも「()」が入ってしまうバグを修正(^^; 他にもバグってるかも。こんなに短いCGIなのになぁ。

2003/7/15 m_andor.cgi ver.0.1

 最初のバージョン。極めて単機能。


homeホームHTMLに役立つヒントmsearch導入記m_andor.cgi