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

EasyBBS_アクセス状況の表示

発言者:nara
( Date Tuesday, November 12, 1996 14:49:37 )


現在REALMでセキュリティーを設定し、ユーザー名とパスワードで
参加できる会議室をEasyBBSを利用させていただき、運営しています。

その会議室に他の参加者がいつアクセスしたかが分かるよう別のページに書き込む
スクリプトに変えたいのですがEasyBBSに組み込む方法が分かりません。
どなたかお教えください。
(それぞれのusernameをrecentの表示のように時間を入れ、過去数十件だけが表記
されるようにしたいのですが...)
お願いします。

田中求之 さんからのコメント
( Tuesday, November 12, 1996 15:26:56 )

EasyBBS は、CGI が受け取れる情報の内、最低限必要なものしか受け取らないように
なっていますので、まずこの部分を変える必要がありますね。

そのうえで、username を記録していく処理を(基本的には Recent と同じ処理に
なります)ハンドラーで書くことになります。

チェックを行うのは、会議室のトップページでいいのですか? それとも、ページ毎に
チェックしますか? どの段階で username をチェックするかによって、チェック用の
ハンドラーを呼び出す場所がかわります。

username の記録用のハンドラーは、つぎのような感じになります。

on recordUser(username)
  
  if username ュ "" then
    
    set myDate to (DateList with asStr)
    set dx to (item 2 of myDate) & "/" & (item 3 of myDate) & " " & (item 4 of myDate) & ":" & (item 5 of myDate)
    
    set loginRec to "<TT>" & dx & "   </TT><B>" & username & "</B>さんがアクセスしました</B><P>" & crlf
    
    set myPage to readFromFile file "MacHD:servers:user_record" --- 記録用ファイルのパス
    
    set oldDEl to AppleScript's text item delimiters
    set AppleScript's text item delimiters to {LF}
    
    set yx to count text items of myPage
    if yx > 39 then
      set myPage to loginRec & (text items 1 thru 39 of myPage) as string
    else
      set myPage to loginRec & myPage
    end if
    
    writeToFile myPage to file "MacHD:servers:user_record"
    
    set AppleScript's text item delimiters to oldDEl
    
    
  end if
end recordUser


nara さんからのコメント
( Tuesday, November 12, 1996 16:20:07 )

うっ、早いコメントをありがとうございます。
鉄人28号みたいですね!(年がばれますね(笑))

できればrecentのページが読み出されるときにチェックできれば
良いのですが...


田中求之 さんからのコメント
( Tuesday, November 12, 1996 19:24:37 )

>できればrecentのページが読み出されるときにチェックできれば
>良いのですが...

これが一番現実的ですかね。会議室のトップページの表示は、AS 版の場合どうしても
遅くなりますので、みんな、Recent に直接アクセスするんですよねぇ(笑)
この会議室でも、Recent や Digest にブックマークしてアクセスしてる
人が多いみたいです(私だってそうだけど (^_^;; )

記録する処理自体はそれほど時間をとりませんから、トップと Recent の両方で
記録を取るようにしてもいいのではないでしょうか?


基本的には、トップページや Recent の処理を行っているハンドラーの
最後の return の手前で recordUser(username) を呼ぶようにして
おけばいいわけです。

nara さんからのコメント
( Wednesday, November 13, 1996 03:04:59 )

アップルスクリプトは未知の世界ですが、頑張ってみます。
コメントありがとうございました。

nara さんからのコメント
( Saturday, November 16, 1996 21:20:24 )

>EasyBBS は、CGI が受け取れる情報の内、最低限必要なものしか受け取らないように
>なっていますので、まずこの部分を変える必要がありますね。

given <<class user>>:usernameを入れてusername の記録用のハンドラーを
付け加えただけでは動きませんが、あと何が必要なのでしょうか?


田中求之 さんからのコメント
( Saturday, November 16, 1996 21:54:26 )

記録用のハンドラーを呼び出すスクリプトを適切な場所に追加しましたか?

nara さんからのコメント
( Sunday, November 17, 1996 17:06:35 )

  set AppleScript's text item delimiters to {return}
  set rmList to rmList as string
  set AppleScript's text item delimiters to {""}
  

  set myHeader to readFromFile file (thisFldr & "BBS_header")
  set myFooter to readFromFile file (thisFldr & "BBS_Footer")

  ---記録用のハンドラーを挿入するのはここでよろしいのでしょうか?
  
  return http_10_header & myHeader & return ツ
    & rmList & return ツ
    & myFooter
end BBS_top

済みません、私easyBBSDXになる前のバージョンを使っていました。
(ベータ版だったのかなぁー?)


nara さんからのコメント
( Sunday, November 17, 1996 17:10:26 )

on BBS_Recent()
  set myPage to readFromFile file (thisFldr & top_recent)
  set myHeader to readFromFile file (thisFldr & "BBS_header")
  set myFooter to readFromFile file (thisFldr & "BBS_Footer")

---recentの場合ここですね。
  
  return http_10_header & myHeader & return ツ
    & "<h4>最近の発言状況です</h4><p>" & return ツ
    & myPage & return ツ

何度も済みません。

田中求之 さんからのコメント
( Sunday, November 17, 1996 18:16:09 )

呼び出す場所はそこで正しいのですが、呼び出しを挿入するハンドラー、たとえば
BBS_Recent() に、ちゃんと username をパラメーターとして渡しておく必要が
あります。特に DX のリリース版(ベータ版でないもの)は、ハンドラーを細かく
分割した関係で、最初の ヌevent WWWスsdocネ で username を受け取るように
しても、それをパラメーターでちゃんと渡してやらなければならないのです。

この点は大丈夫ですか?

nara さんからのコメント
( Sunday, November 17, 1996 19:10:59 )

>この点は大丈夫ですか?

残念ながら、いいえです。御教授をお願いできますか?

田中求之 さんからのコメント
( Sunday, November 17, 1996 22:36:49 )

詳しく説明し出すときりがありませんので、ポイントだけ示します(EasyBBS DX の
正式版のスクリプトにもとづいて行います)。

ヌevent WWWスsdocネ ハンドラーで username を受け取れるようにしたのであれば、
このハンドラーの中で、各会議室のトップページと Recent のページの表示のため
に呼び出しているハンドラーに対して、username を渡してやるように変更します。

具体的には

return ROOM_Top()  -->  return ROOM_Top(username)

と

return ROOM_recent() --> return ROOM_recent(username)

という2カ所を変更しておきます。これにあわせて、ROOM_Top ハンドラーと
ROOM_recent ハンドラーの側で username を受け取れるように変更する
必要があります。

on ROOM_Top()   --->  on ROOM_Top(username)

と

on ROOM_recent()  -->  on ROOM_recent(username)

という2カ所(いずれもハンドラーの先頭部分)の変更を行います。

あとは、それぞれのハンドラーの中の return の手前の部分で  recordUser(username)
を呼び出すようにしておきます(この点は大丈夫ですよね)。

nara さんからのコメント
( Monday, November 18, 1996 04:31:22 )

ありがとうございます。後は自分でもできそうです。
お世話をおかけしました。