このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Title_searchの構文チェックが出来ない

発言者:naka_M
( Date Thursday, June 09, 2005 15:55:31 )


いつも拝見させて頂いてますが、投稿は初めてです。

68K/QPQでLAN内Serverを立て、GripGropでの全文検索を使用しているのですが、
もう少し早く検索できないものかと探していたところ、こちらのTitle_searchが目につき、
早速ダウンロードさせていただき、構文チェックをすると、
Expected メ,メ but found identifier.
と表示され、
set myKey to item 1 of (DecodeJArgs http_search_args)
の所で止まります。
私の方の何か設定が間違っているのか、AppleScript初心者の私にはどうしても分らずじまいです。
Title_searchでgoogleみたいな検索結果表示が得られるようにならないものかと思っております。

あと、このままではサブフォルダーまで検索して貰えないようですが、検索できるようにするには
どうしたらいいかもお教えいただけると助かります。

以上、よろしくお願いいたします。

田中求之 さんからのコメント
( Tuesday, June 14, 2005 10:17:52 )

スクリプトが Tanaka osax 1.x を利用しているのですが、これはインストールされていますか?
また、Tanaka osax 1.x は 2.x と互換性がありませんので、もしすでに 2.x を使用したスクリプ
トをお使いの場合には、スクリプトを書き換える必要があります(1.x と 2.x を同時にインストール
するとトラブルが起きます)。

なお、スクリプトが動いたとしても、検索速度にはあまり期待しないでください。

タイトルを高速で検索させたい場合は、タイトルとページの URL を記録したファイルを作って
おいて、そのファイルを検索して URL を割り出すというのが 68K でも、そこそこ速度がでる
方法ですね。かつてこの会議室でもその方法を用いていました。

naka_M さんからのコメント
( Monday, July 18, 2005 19:48:30 )

長い間返信せず、ほったらかし状態にしてしまい、大変申し訳ありません。
初心者のそのまた初心者問題に返事など頂けないだろうと、半ば諦めておりました。
今回来てみてビックリしております。また返信頂けて大変嬉しく思っております。

さて、問題ですが、Title_search には Tanaka's osax 1.x が必要だったんですね。
title_search.acgi ReadMe には Tanaka's osax のバージョンが書かれてなかったので、
もしかしたらと Tanaka's osax Extra 1.01 〜 1.04 等も試してみたのですが、
意味ありませんでしたね。

現在は GripGrop の全文検索で、Tanaka's osax 2.0.1 を使用しております。

ところで、HP内を探してみたのですが、Tanaka's osax 1.x は私には見つけられなかったのですが、
私の見つけ方が足りないのでしょうか?

>>なお、スクリプトが動いたとしても、検索速度にはあまり期待しないでください。
動いてくれるだけでも助かります。

>>タイトルを高速で検索させたい場合は、タイトルとページの URL を記録したファイルを作って
>>おいて、そのファイルを検索して URL を割り出すというのが 68K でも、そこそこ速度がでる
>>方法ですね。かつてこの会議室でもその方法を用いていました。
上記は、Title_search で出来ますでしょうか?

重ねて今回の失礼お侘びします。申し訳ありませんでした。
以上、よろしくお願いいたします。

田中求之 さんからのコメント
( Tuesday, July 19, 2005 15:52:16 )

では、Tanaka's osax 2.x 用の Title サーチのスクリプトを紹介することにしますが、仕様は

・自分の Web サイト内の全てのページ(拡張子が .html のページ)のタイトルを対象に
 検索を行う

・検索結果は、検索キーワードを含むページのタイトルをリンク付きで並べたもの

でよろしいでしょうか?なお、スクリプトを書き起こしますので、すこし時間をください。
(プログラミング&デバッグの時間が、なかなか取れないものですから)

naka_M さんからのコメント
( Wednesday, July 20, 2005 17:11:45 )

早速のお返事ありがとうございます。

勝手なお願い事ばかりで恐縮なのですが、
拡張子は .html に .htm も加えていただけると助かります。
後の条件は上記で結構です。

急ぎませんのでお時間のあるときで結構です。
お忙しい中、次から次に面倒なことばかり申しあげてすみません。
では、楽しみにお待ちしております。

naka_M さんからのコメント
( Friday, August 19, 2005 15:33:16 )

勝手なお願いをしておきながら催促するようで申し訳ないのですが、
↑上記、まだ掛かりますでしょうか?

もちろん、急ぎませんのでお時間のあるときで結構なのですが、
途中経過だけでもお知らせいただけたらと思っております。

以上、よろしくお願いいたします。

田中求之 さんからのコメント
( Monday, August 22, 2005 15:52:48 )

あ、すいません、忘れてました。スクリプトは書き終わっているので、
テストして問題がないようでしたら、インストールの仕方を書いた
ドキュメントを付けてアップします。

明日中にはアップできます。

すみません。

田中求之 さんからのコメント
( Monday, August 22, 2005 17:09:31 )

とりあえずスクリプトは動くようですので、ベータ版として登録しておきます。

このスクリプトは Tanaka's osax 2.x を使います。

TitleSearch2005.sit の中に TitleSearchCGI というスクリプトが入ってい
ますので、これをスクリプト編集プログラムで開いて下さい。

そして、[構文確認](Syntax check)を行ってスクリプトをコンパイル
してください。

構文確認が問題なく終わったら、ファイルメニューの「実行専用で保存」を
選び、「TitleSearchCGI.acgi」という名前のアプリケーションとして保存し
ます。この際、[実行後、自動的に終了しない]と[初期画面を表示しない]
の2つのオプションは、いずれもチェックして有効にしておいて下さい。

でき上がった TitleSearchCGI.acgi と title_search.html を web サーバ
に入れます。この CGI は、自分がいるフォルダー内(下位フォルダーも
すべて含む)の HTML ファイル(テキストファイルで、拡張子が .htm か 
.html のファイル)を検索対象にします。自分が利用したい位置に入れて下
さい。また、title_search.html も CGI と同じところに入れます。

TitleSearchCGI.acgi は、起動時に検索用のインデックスファイルを作り
ます。ですから、手動で起動して下さい。インデックス作成が終了すると、
CGI と同じフォルダに .index というテキストファイルが作られます。
このファイルに記録した情報をもとに検索します。

.index が作られたのを確認してから、title_search.html に Web でアクセス
すれば検索ができます。

検索ページは基本の FORM を書いただけのものですので、適当にカスタマイズ
してください。



→  TitleSearch2005.sit

田中求之 さんからのコメント
( Tuesday, August 23, 2005 12:13:52 )

スクリプトを少し修正したものと差し替えておきました。一番大きな変更点は
MacOS 8.1 以前でもちゃんとコンパイルできるようにしたことです(CGI の
ハンドラーを古い書き方にしておくのを忘れてた (^_^;; )

また、

http://...../TitleSearchCGI.acgi?update

(serach_args に update)でインデックスの更新を行います。さらに、

http://...../TitleSearchCGI.acgi

のように、単純にただにCGI にアクセスすると、検索用のフォームを返す
ようにしておきました。

使い方(インストールの方法)はかわりません。

naka_M さんからのコメント
( Tuesday, August 23, 2005 18:49:22 )

お時間無き中、お手数おかけしまして、申し訳ありませんでした。

早速ダウンロードさせて頂きました。
結果、御報告いたします。

勝手なお願いばかりでしたのに、対応して頂いて本当に有り難う御座居ました。
大事に使わせていただきます。

naka_M さんからのコメント
( Wednesday, August 24, 2005 18:15:16 )

早速インストールし、動かしてみました。

結果、構文チェックも問題なく行われ、無事変換でき、最初エラーが出たのですが、
メモリー割当てを増やすと無事 .indexファイルも作成してくれました。

GripGropでの全文検索では、10分以上当たり前のように
掛かっていた検索時間が 10秒前後となり、これには驚きでした。
確かに検索の方法が違うとはいえ、このスピードは有難いです。

また、GripGrop+GripCGIでキーワードを入れずにタイトルだけでの検索をさせようとすると、
うまく検索してくれなかったので、見たい語句が入っているファイルのタイトル名さえ忘れ、
どこに置いたか定かではないファイルの検索予測がたてられるのは何より有難いです。

ただ、TitleSearch2005を起動するたびに .index ファイルを更新してるようなんですが、
これを1度作成したら、新たに命令あるまで終了、起動を繰り返しても
新規作成、更新をしないようにして貰えないでしょうか?
私のところでは .indexファイルを作成するのに5〜6時間かかりますので、
お忙しい中、再三のお願いで申し訳ありませんが、よろしくお願いいたします。

田中求之 さんからのコメント
( Thursday, August 25, 2005 11:49:55 )

>これを1度作成したら、新たに命令あるまで終了、起動を繰り返しても
>新規作成、更新をしないようにして貰えないでしょうか?

では run ハンドラーを以下のように書き換えてください。こうするとイン
デックスファイルが見つからない場合のみ、起動時に作成を行います。

on run
  set thisPath to (":" as alias) as string
  try
    set iDate to MT Get Info file (thisPath & myIndexName) about modification_date
  on error
    makeIndex()
  end try
end run


また、起動時にインデックスファイルの更新された日付を調べて、あまりに
古かった場合には自動的に更新を行わせることも、以下のようなスクリプト
にしておけば可能です(以下の場合は60日以上更新されていなかったら、
起動時に更新する)。

on run
  set thisPath to (":" as alias) as string
  try
    set iDate to MT Get Info file (thisPath & myIndexName) about modification_date
    set xDate to (current date) - (86400 * 60) --- xDate は60日前の日付
    if iDate < xDate then
      makeIndex()
    end if
  on error
    makeIndex()
  end try
end run

naka_M さんからのコメント
( Thursday, August 25, 2005 19:10:57 )

早速、スクリプトを書き換えてコンパイルし、LAN上の Serverで使いはじめました。
検索スピードが格段に上がったので大変喜んでおります。
大事に使わせていただきます。

最後に、お手数なお願いにもかかわらず細かな御指導いただきまして、
本当に有り難う御座居ました。

田中求之 さんからのコメント
( Wednesday, August 31, 2005 12:32:38 )

スクリプトが使い物になったようでよかったです。

補足として、スクリプトの冒頭部分の property について説明しておきます。

スクリプトの冒頭部分に 
property serachLimit : 50
property myIndexName : ".index"
property myForm : (省略)

という3つのプロパティを定義していますが、最初の serachLimit は検索結果数の上限を
決めるものです。50 にしてありますので、検索して該当するページが50 ページ見つかった
ら検索を打ち切ることになります。このような制約を設けているのは、CGI からサーバへの
返答のデータが 32K を越えてはならないという縛りがあり、それに引っかかるのを防ぐ
ためです。たぶん、100 ぐらいに設定しても大丈夫だとは思いますが、使用になる環境・
状況によりますので、変更される場合には十分にテストしてください。

myIndexName は、インデックス用ファイルのファイル名を定めています。ここで定めた
名前のファイルを CGI と同じフォルダに作成し使用します。もし .index 以外の名前に
する必要が出た時などは、このプロパティを変更してください。

myForm は CGI が返すシンプルな検索用フォームのページの HTML です。検索用の
ページを作って使う方が見栄えとかもよいのですが、もし CGI の返す検索フォームを
使うことにした場合には、このプロパティを変更すれば、検索ページのレイアウトなど
を変更できます。ただし、アップルスクリプトの文字列データをベタに記述する時には
文中の " や半角の \ の前に\を付ける(\でエスケープする)必要があります。

以上、なにかの際に参考になればと思い、書いておきます。

naka_M さんからのコメント
( Tuesday, September 06, 2005 18:53:22 )

お気遣いの数々、恐縮しております。

TitleSearchCGI.acgi は、本当に助かっております。
GripGropでの全文検索では、10分以上当たり前のように掛かっておりましたから
検索しようとするだけで勇気がいりました。(^_^;; )

>property myIndexName : ".index"
>property myForm : (省略)
上記については今のところそのまま使用しております。

> property serachLimit : 50
これについては現在、こちらのページ内にある filedb_paged のようにならないかと考えております。
検索したタイトル一覧を1ページにつき何件かずつ表示するのは、filedb_paged と同じですが、
これに検索したページのページトップから HTMLタグを抜いた本文100文字ぐらいを
リンク処理されたタイトルの下に表示させ、検索結果の表示を google のようにならないかと
思案し始めております。

HTMLタグを抜いた本文100文字は、連続してない文でもOKにし、文の接続部分には「。」でも入れ、
.index ファイル作成時に一緒に書き込むようにしておくことで、検索の幅が持たせられるんじゃないか
と思ってます。

こうなってきますと、こちらのページに沢山あるスクリプトを読み解くスキルが欲しいです。
市販本を片手にどこまで出来るのか分りませんが、こちらのページで更に勉強させて頂きながら
スクリプトの改造を頑張ってみようと思っております。

また、泣き言が書いてありましたらお助け下さい。
あらためて、有り難う御座居ました。