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

Web Scripter's Meeting 用スクリプト

発言者:田中求之
( Date Tuesday, December 03, 1996 17:45:33 )


この会議室を定期的にチェックする場合、前回にアクセスした以降にコメント/発言
されたものだけをリストアップする機能があれば便利なのに、というのは誰もが
感じることだと思います。

で、これを実現する機能をサーバーに組み込んでみました。といっても、サーバー側で
ユーザーの管理などは行いません( Cookie ヘッダーを使えば可能ですが、面倒なん
だもん)。ユーザーの側で、アクセスの際にスクリプトを使ってもらうことによって
実現します。つまり、スクリプトのプロパティとしてアクセスした時間を記録してお
いてもらうという方法です。

以下のスクリプトをアプリケーション形式にして保存し、アクセスの際にはこのアプ
リケーションを走らせるようにしてください。最初の1回目だけは5日間にコメント
/発言されたものをリストアップしますが、それ以後は、前回アクセスしたとき
(=このスクリプトを走らせたとき)以降に変更/追加されたものをリストアップ
します。

アプリケーションは通常の形式で結構です。StayOpen にする必要はありません。
実行の度に property の変更とセーブを行う必要がありますので、アプリケーション
形式でないとうまく働きませんので注意してください。

Netscape 用のスクリプトになっていますが、AppleScript で URL を指定
できるブラウザであれば、スクリプトをちょっと変更するだけで利用できるはず
です。

なお、 Tanaka's osax 1.0 を必要としますので注意してください。

---- Meeting Accesser ----
property lastAccess : ""

on run
  if lastAccess = "" then
    set lastAccess to DateToStamp ((current date) - 60 * 60 * 24 * 5)
  end if
  
  set myURL to "http://mtlab.ecn.fpu.ac.jp/webcon.mtxt?xStamp=" & lastAccess
  
  try
    
    tell application "Netscape Navigatorェ 2.02"
      activate
      OpenURL myURL
    end tell
    
    set lastAccess to DateToStamp (current date)
    
  on error
  end try
end run
-----

田中求之 さんからのコメント
( Tuesday, December 03, 1996 17:55:07 )

念のため補足しておくと、

http_search_args として xStamp= <タイムスタンプ> を渡すと、タイムスタンプで
指定された日付以降に更新されたメッセージを探すようになっているわけです。


稲垣@信州大学 さんからのコメント
( Wednesday, December 04, 1996 21:15:52 )

 さっそく使わせてもらいました。なかなか使いやすくていいですね。

 ただ、読んでいない記事があったときに、スクリプトを使ってもう一度アクセスすると、
・・・。やっぱり、記事が出てきませんでした。

 未読の記事のみ表示させることってできませんか?できると非常に便利なのですが。


田中求之 さんからのコメント
( Wednesday, December 04, 1996 21:34:42 )

> 未読の記事のみ表示させることってできませんか?できると非常に便利なのですが。

アクセスの履歴を管理する必要がありますので、ブラウザー+スクリプトの仕掛け
では無理ですね。

kimura さんからのコメント
( Thursday, December 05, 1996 09:27:45 )

田中先生
easyBBS を使わせていただき、感謝しております。
今回はまた、cgi でいろんなことができるのだなあと感心いたしました。
田中先生の試験問題だと思って、さっそく自分の easyBBDSR でも働くように組んでみました。
なんとか動くようにはなったのですが、BBS がずいぶん重くなったような気がしています。
試験問題の解答をばらしてしまっては皆さんの楽しみを取ってしまうことになりますので、少しだけおうかがいします。

1.
>http_search_args として xStamp= <タイムスタンプ> を渡すと、タイムスタンプで
>指定された日付以降に更新されたメッセージを探すようになっているわけです。
<タイムスタンプ> =lastAccess を受け取る方法がわからなくて、http_search_args から読み取ることにした。
2.
lastAccess 以降に modify されたファイルを modAfter で myList にした。
こうような方針でよろしいのでしょうか?
ただ、modAfter では df modAfter date alias ...とすると構文チェックで引っ掛かります。
df を取るとセーブできました。何に気をつけなければいけないのでしょう。

皆さまのじゃまにならない程度で、御教授ください。
よろしくお願いします。

田中求之 さんからのコメント
( Thursday, December 05, 1996 14:37:09 )

EasyBBS DX/SR の場合は、room_search ハンドラーに新たな処理を追加する
ことになります。

スクリプトの中に

  else if "days=" is in BBS_param then
     --- 最近N日間に投稿/コメントされたメッセージ

という部分があると思いますが、この手前に

  else if "xStamp=" is in BBS_param then
        
    set AppleScript's text item delimiters to {"="}
    set tgStamp to text item 2 of BBS_param
    set AppleScript's text item delimiters to {""}
    
    if tgStamp = "" then
      --- 記入ミス
      --- Top Page へ戻す
      return redirect_header & "/" & myRoom & "/room.bbs" & crlf & crlf
    end if
    
    try
      set xDate to StampToDate tgStamp
    on error
      return redirect_header & "/" & myRoom & "/room.bbs" & crlf & crlf
    end try
    
    --- 検索
    try
      set myList to dirLister alias msgFldr modAfter xDate
    on error
      set myList to {}
    end try
    
    if myList = {} then
      set myData to "<h4>" & (xDate as string) & "以降に投稿/コメントされたメッセージはありません</h4>"
    else
      set myData to (xDate as string) & "以降に投稿/コメントされたメッセージ一覧:<P><ul>" & crlf ツ
        & makeList(myList) & "</ul>"
    end if

という処理を追加することになります(今、さっとオンラインで書いたスクリプトですので
実際にこれで動くかどうかは試していません)。

で、呼び出しの際には  http://your.host/your_room/search.bbs?xStamp=96120412000
というような URL を使うことになります。


EasyBBS DX と SR は、グローバル変数の使用によるトラブルというバグを抱えていま
すので、年内に、これの修正を行った新しいバージョンを出します。その際に、この
タイムスタンプによる呼び出しも含めておきましょう。

kimura さんからのコメント
( Thursday, December 05, 1996 21:13:42 )

ありがとうございました。

私のは、
    if myCmd = "room.bbs" then
      
      if "xStamp" is in http_search_args then
        set lastAccess to ((characters 8 thru 19 of http_search_args) as string)
        return ROOM_Top2()
なんてのを入れて、
ROOM_Top2() なるハンドラーを新たに作ったものですから、
大層かさばりました。

http://your.host/your_room/search.bbs?xStamp=96120412000
で、検索を使えばスマートだったんですね。
ありがとうございました。
はまってしまわないかと気にしている今日この頃です。

田中求之 さんからのコメント
( Thursday, December 05, 1996 22:16:08 )

>検索を使えばスマートだったんですね。

DirListerを使っているのは、基本的に検索部分ですから、ここを拡張するのが
一番簡単です。すでに気がつかれたかもしれませんが、Tanaka's osax 1.0 の
リリースに合わせて、この会議室には日付による絞り込み(指定日以降/以前
にコメント/発言されたもの)の機能を追加してありますが、実は、これの
発展型として、今回タイムスタンプを組み込んだ訳です。