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

会議室や新規メッセージの説明を追加したいのですが...

発言者:北村俊浩
( Date Monday, September 02, 1996 15:41:28 )


「EasyBBS DX」をカスタマイズし,BBSを開設しようと日夜努力している初心者
です。
「こんなに簡単にBBSが開設できてしまっていいのだろうか」と非常に感謝して
おります。

さて,今現在,トップページには「会議室名」と「発言数」のリストしか表示され
ないのですが,これに各会議室の「ROOM_header」を追加し,同じように,各新規
メッセージについては各発言者の「myBody」を追加したいのですが,どうすれば
よろしいでしょうか?

トップページの会議室名,新規メッセージタートルは,「Tanaka's osax」の中の
「getPageTitle」をお使いのようですが,このように「Tanaka's osax」で解決
できるのでしょうか。

よろしくご指導お願いします。

田中求之 さんからのコメント
( Monday, September 02, 1996 19:10:35 )

>さて,今現在,トップページには「会議室名」と「発言数」のリストしか表示され
>ないのですが,これに各会議室の「ROOM_header」を追加し,

これはトップページに各会議室の説明をつけ加えたいということですね?

この場合は、ROOM_header を読み込んで使うとページのレイアウトがおかしく
なりますから、むしろ各会議室の説明用のファイルを用意しておき、それを
読み込んで使うという方法がよいかと思います。

具体的には、以下のようになります。

1:各会議室のフォルダーの中に ROOM_note という名前のファイルを作り、
これにその会議室の説明を書いておくようにする。

2:トップページを作成している部分で、これを読み込んでページに織り込む
ようにする。スクリプトとしては、まず ROOM_note 読み込み用のハンドラー
として

on pickUpRoomNote(tgFldr)
  try
    set tgFile to alias (thisFldr & tgFldr & ":" & "ROOM_note")
    set myNote to readFromFile tgFile
  on error
    --- ROOM_note 
    set myNote to ""
  end try
  
  return myNote
end pickUpRoomNote

というハンドラーをスクリプトに追加します。そして、トップページの会議室
リストを作っている部分を

set rmList to {"<h4>以下の会議室が開催されています。</h4><P><h3><OL>"}
repeat with thisRoom in roomList
  set roomName to pickUpRoomName(thisRoom)
  set msgNum to countMsgNum(thisRoom)
  set roomNote to pickUpRoomNote(thisRoom) --- !!
  
  set end of rmList to "<LI><a href=\"bbs.acgi?r=" & thisRoom & "\">" & roomName & "</a> (発言数:" & msgNum & ")<br>" & roomNote & "<P>"
end repeat

という具合に書き換え、ROOM_note を読み込んで、それをリストに織り込んでいくわけ
です。


なお、もしこの方法で改造を行うときには、EasyBBS DX b3 をベースに行って
ください。b3 からは、ファイル名に .html がついていないとページとしては
カウントされませんので、ファイルを使った色々な仕掛けを織り込めるように
なっています。


>同じように,各新規
>メッセージについては各発言者の「myBody」を追加したいのですが

これはどういうことでしょうか?

北村俊浩 さんからのコメント
( Tuesday, September 03, 1996 09:39:54 )

田中先生、ご回答ありがとうございます。

アイデアのみならず、サンプルスクリプトまでお教えいただけるとは、誠に
ありがとうございます。早速、組み込んでみようと思います。


>>同じように,各新規
>>メッセージについては各発言者の「myBody」を追加したいのですが

>これはどういうことでしょうか?

表現がまずくて申し訳ございません。
ここで言った、新規メッセージについての各発言者の「myBody」とは、「新規
メッセージの投稿」の「メッセージ:」の事です。
各会議室と同様に、一つ一つのメッセージの説明を付けたいと思ったのです。
この場合、会議室のように説明用の別ファイルを持つのではなく、投稿された
「メッセージ」そのものをメッセージの説明として付けたいのです。
こんな感じで少しはおわかりいただけたでしょうか。

よろしくお願いいたします。

田中求之 さんからのコメント
( Tuesday, September 03, 1996 14:41:54 )

>各会議室と同様に、一つ一つのメッセージの説明を付けたいと思ったのです。

これは、各会議室のトップページ(BBSのトップページではなく)のことですよね?

つまり、会議室のトップページには最近発言/コメントされたもののリストが並び
ますが、このリストに、発言タイトル+最初の発言者のメッセージを を表示する
ようにしたいということと理解していいですか? (コメントまで含めるととんでも
なく長くなりますからね)。

これは、もちろん、可能です(スクリプトに不可能は無い、なんちゃって (^_^;; )

現在は、発言のリストアップを行う際に、ページのタイトル(発言のタイトル)を
抜き出すようにしていますが、この処理を行っている部分に、最初の発言のメッセージ
も抜き出すスクリプトを追加するわけです。

発言は、スクリプトによって生成されていますので、決まったパターンを持っています。
ですから、このパターンを利用して pickUpfrom を使ってページから最初の発言だけ
を抜き出すことができます。

北村俊浩 さんからのコメント
( Tuesday, September 03, 1996 15:57:50 )

田中先生:

午前中をかけて、教えていただいたスクリプトを組み込みカスタマイズすること
に成功いたしました。まず、お礼を申し上げます。ありがとうございました。
ちなみに、ソースは「easyBBS DX beta3」を使わせていただいております。


> これは、各会議室のトップページ(BBSのトップページではなく)のことですよね?

その通りです。
スクリプト全体を見て、「pickUpform」というのを使えばいいのかなと気が付い
てはいるのですが、どう利用すればいいのかがわかりません。
というよりは「ハンドラ」に出てくる変数(?)の意味やらがわかりません。
ここでは、「ハンドラ」は組まなくてもできるのでしょうか?
もし組まなくてもいいのなら、

  set afterFile to pickUpFrom beforeFile startOf ")</TT><P><HR><P>" endOf "<P><HR SIZE=4><P>" with Trim
  return afterFile

こんな感じでよろしいのでしょうか?
無知で申し訳ございません。


田中求之 さんからのコメント
( Tuesday, September 03, 1996 22:16:31 )

>というよりは「ハンドラ」に出てくる変数(?)の意味やらがわかりません。

色々な変数が入り乱れていますので、わかりにくいかもしれません。なにせ EasyBBS
を元に、継ぎ足し・拡張工事の連続でここまできてますので。

手を加える部分は、会議室のトップページを生成している部分なのですが、ここを
書き換えるには、気を付けないといけないことがあります。というのも、会議室の
トップページで発言のリストを作成しているハンドラーは、検索の際に該当する
発言のリストを作成しているハンドラーと同じものをつかっています。ですから、
このリストアップを行っている部分を改造すると、検索結果の表示の際にも
会議室のトップページ同様に、最初の発言の内容が表示されるようになり
ます。

これが嫌なのであれば、新たにトップページ用のリストアップ用のハンドラー
を書くことになります。


今回は、まだサンプルスクリプトは書きません。

まずは、発言のファイルから、最初の発言のメッセージを抜き出すスクリプトと
いうのを作ってみてください。それをとに、どこに、どのように、そのスクリプトを
組み込んでいったらいいのかを考えてみてください。

北村俊浩 さんからのコメント
( Wednesday, September 04, 1996 13:08:26 )

コメントありがとうございます。

 > <i>これが嫌なのであれば、新たにトップページ用のリストアップ用のハンドラー
 > を書くことになります。</i>

そうなんですよね。
流れはわかっているつもりなのですが,変数を使いこなせません。
ゆっくり時間をかけて考えてみます。

田中求之 さんからのコメント
( Wednesday, September 04, 1996 19:20:27 )

まずメッセージを抜き出すハンドラーは以下のようになります。

on pickUpMsg(myFile)
  set myMsg to item 1 of (pickUpFrom myFile startOf ("<P><HR><P>" & return) endOf "<P><HR SIZE=4><P>" with Trim)
  set AppleScript's text item delimiters to {return & return & "<pre>"}
  set myMsg to (text item 1 of myMsg)
  set AppleScript's text item delimiters to {""}
  return myMsg
end pickUpMsg

myFile は alias か FFSpec でファイルを指定します。

で、このハンドラーをスクリプトに追加しておいて、新たに会議室のトップページ用の
リストアップハンドラーを作ります。これは makeList ハンドラーをコピーして
書き換えるのが簡単です。とりあえず、名前は makeRTopList にしておき

on makeRTopList(myList)
  global msgFldr, myRoom
    
  set myData to {}
  repeat with myF in myList
    set tgF to alias (msgFldr & myF)
    set myTitle to getPageTitle tgF
    if myTitle = "" then set myTitle to myF
    set myMsg to pickUpMsg(tgF) ----- 追加
    
    set end of myData to "<li><b><a href=\"bbs.acgi?r=" & myRoom & "&" & myF & "\">" & myTitle & "</b></a><br>"
    set end of myData to "<TT>( " & ((modification date of (info for tgF)) as string) & " )</TT><br>"
    set end of myData to "<blockquote>" & myMsg & "</blockquote><P>" --- 追加
  end repeat
  
  set AppleScript's text item delimiters to return
  set myData to myData as string
  set AppleScript's text item delimiters to {""}
  
  return myData
end makeRTopList

にします。

最後に、会議室のトップページを作っている部分を書き換えます。

まず Read-Only 用の部分を以下のようにし

if myList ュ {} then
  set myData to myData & "以下のメッセージが登録されています<p><ul>" & return ツ
    & makeRTopList(myList) & "</ul><p>"
end if

さらに通常の会議室の部分を

if myList = {} then
  set myData to myData & "最近7日間に投稿/コメントされたものはありません</h4>"
else
  set myData to myData & "最近7日間に投稿/コメントされたメッセージ:</h4><ul>" & return ツ
    & makeRTopList(myList) & "</ul><p>"
end if

とします。いずれも makeList を呼んでいた部分を makeRTopList に切り替える
わけです。

以上のような作業でうまくいくと思います。

ただし、最初のメッセージが長いものであったりした場合、非常に見苦しいものになり
ますので、その点は注意してください。また、上のサンプルでは発言者を抜き出して
いません。

なお、ここに書いたスクリプトは、すべて実際には試していません。あくまでも参考の
ために書いたものです。うまくいかないときには、ご自分で修正の上使ってください。

北村俊浩 さんからのコメント
( Thursday, September 05, 1996 18:10:13 )

 > なお、ここに書いたスクリプトは、すべて実際には試していません。あくまでも参考の
 > ために書いたものです。うまくいかないときには、ご自分で修正の上使ってください。

了解しました。本当にありがとうございます。

私の方としましては、後「発言者」とその「日付」等も抜き出したいと思っております。
この辺りも、これらを参考に作らせていただこうと思っています。

Kazushi Takahashi さんからのコメント
( Thursday, September 05, 1996 19:57:32 )

北村俊浩さん こんにちは。
田中さんいつもお世話になってます。

> 
> 私の方としましては、後「発言者」とその「日付」等も抜き出したいと思っております。
> この辺りも、これらを参考に作らせていただこうと思っています。

わたしも同様のことを考え、スクリプトの修正で試行錯誤しました(いまもいろいろやってます。)

わたしがやってみたカスタマイズは、
 1.各会議室のメッセージタイトルの並び方を、新しいメッセージが上になるようにした。
 2.登録日時、登録者、最終発言日時、最終発言者を表示した。
 3.上記2.でコメントがない場合は「コメントはありません」と表示するようにした。
 4.未読のコメントが含まれているタイトルの色が変わるようにした。
などなどです。

これらのカスタマイズにより、読まなければいけないものとそうでないものが判別しやすくなっ
たと、好評を得てます。

わたしもまだまだわからないことばかり。北村俊浩さんもがんばってください。

北村俊浩 さんからのコメント
( Monday, September 09, 1996 15:11:18 )

田中先生、Kazushi Takahashiさん、こんにちは。

おかげさまで、各会議室のトップページにメッセージを表示することが
できるようになりました。

いろいろと表示させる項目を増やそうと思っていましたが、多すぎると
「レスポンスが悪い」「重たい」などと苦情が出ましたので、結局の所
メッセージだけにしました。
発言数がそれほど多くない状態ならいいのですが、ある程度増え出して
くるとさすがに時間がかかるようです。特に、PPPで接続している人
にとっては辛いとのことでした。
今後の改良点だと思っております。


Kazushi Takahashiさん、

 > これらのカスタマイズにより、読まなければいけないものとそうでないものが判別しやすくなっ
 > たと、好評を得てます。

すごいですね。
こういった、効果的なカスタマイズがなかなか知識がないと出来ませんよね。
ちなみに、私が自分自身で行ったカスタマイズは、

                1. 入力フォームの項目に「所属」「電子メール」を追加。
                2. 上記1.に関連して、全体的な表示レイアウトの変更。
                3. 「所属」「電子メール」に入力がない場合は、
                        それぞれ「無所属」「電子メールなし」を表示。
                        されに「電子メール」について、入力があれば「<a href="mailto: 〜 > 〜 </a>」」で表示。
                4. 入力フォームに、JavaScriptによる説明を付けた。
                5. 各会議室の発言に参加する際に、フォームの「Submit」で出来るようにした。

です。私も分からないなりにいろいろとやっておりますが、やればやるほど
レスポンスが悪くなっていくようで困っています。
先ほども書きましたが、いかにレスポンスを上げられるかが今後の課題だと思っています。


田中先生、本当にありがとうございました。
これからもお世話になることがあると思いますが、よろしくお願いします。


田中求之 さんからのコメント
( Monday, September 09, 1996 18:47:37 )

EasyBBS DX は、最終版では、スクリプトの構造が変わります。

カスタマイズが楽なように、機能ごとにハンドラーに分割し、また、それぞれの
ハンドラーについて、コメントを多めにつけ加えた Tech notes という説明の
ドキュメントも付けます(スクリプトと tech note はすでに公開済み)。

ですので、いろいろと手を入れるのが、多少は楽になっているのではないかと
思います。 …そのかわり、これまでのカスタマイズを移すのが面倒になって
しまっているかもしれませんが (^_^;;

Kazushi Takahashi さんからのコメント
( Monday, September 09, 1996 23:58:15 )

>ですので、いろいろと手を入れるのが、多少は楽になっているのではないかと
>思います。 …そのかわり、これまでのカスタマイズを移すのが面倒になって
>しまっているかもしれませんが (^_^;;

そのとおりです  ^_^。
小学生のころやらされた計算ドリルを思い出しつつ、繰り返しスクリプトを書
き直すのも自分のためかと...。

田中求之 さんからのコメント
( Tuesday, September 10, 1996 02:33:29 )

>小学生のころやらされた計算ドリルを思い出しつつ、繰り返しスクリプトを書
>き直すのも自分のためかと...。

スクリプト(プログラミング)って、やっぱ量をこなさないと身に付かないという
点はあると思います。私自身のことを振り返ってみて、HyperTalk にせよ、
AppleScript にせよ、なんとなく自分の思い通りに書けるようになってきた
なぁと感じたのは、トータルで2000行ぐらいは書いたかなという時期ですね。
(もちろん、同じようなものを繰り返し書いたのも含めてです)

自分で書いて、自分で悩んで、自分で解決していく、そして一方で色々なサンプル
を丹念に調べていく、と、やっぱスクリプトに王道はなし、と思っています。

北村俊浩 さんからのコメント
( Tuesday, September 10, 1996 11:08:12 )

 > AppleScript にせよ、なんとなく自分の思い通りに書けるようになってきた
 > なぁと感じたのは、トータルで2000行ぐらいは書いたかなという時期ですね。

それに比べて、今の私はその50分の1ぐらいかもしれません。
まだまだわからないことだらけのはずです。


前述の「Tech Note」はチェック済みです。(まだ読めていませんが...)
今後、これを頼りに頑張らせていただこうと思います。


P.S.

 > スクリプトに王道はなし、

確かにそうですね。
でも、先生ほどの人ならスクリプトに「王道」を見いだせると思うのですが...
今後、「AppleScript」の解説本の出版予定なんかはありませんか。
もしあるのでしたら、教えていただきたいのです。

田中求之 さんからのコメント
( Tuesday, September 10, 1996 13:56:36 )

>今後、「AppleScript」の解説本の出版予定なんかはありませんか。

本を書く予定はないし、書きたいとも思わないのですが、CGI のプログラミング
に関する雑誌の記事は書くことになってます。それと、今年の終わり( WebSTAR
2.0 が出てから)には『構築術』の改訂を行う予定ですが、そこでは CGI の
プログラミングについて、もう一度整理し直して、書き直すつもりでいます。

本を書くより、こうして会議室などで、色々な人とワイワイいいながら一緒に
考えていく方が好きなんですよ (^_^)

北村俊浩 さんからのコメント
( Tuesday, September 10, 1996 15:35:09 )

所で、

 > CGI のプログラミングに関する雑誌の記事は書くことになってます。

だそうですが、それってもしかして「Mac User」ですか。
今月号から、AppleScriptの記事が始まりましたがそれのことでしょうか。

 > 今年の終わり( WebSTAR2.0 が出てから)には『構築術』の改訂を行う予定ですが、
 > そこでは CGI のプログラミングについて、もう一度整理し直して、書き直すつもりでいます。

今から期待して待ってます (^o^)/
今現在やっていることと、私の持っている初版本とではかなり次元が違うような気がします。
店頭で見かけたときには、是非購入させていただきます。

田中求之 さんからのコメント
( Tuesday, September 10, 1996 16:01:07 )

>それってもしかして「Mac User」ですか。

ちがいます。連載などはしませんよ。雑誌名などは、記事が本当に書けるまでは
秘密ということで (^_^;;  …書けなかったら恥をかくから

北村俊浩 さんからのコメント
( Friday, September 13, 1996 17:49:38 )

 > 雑誌名などは、記事が本当に書けるまでは秘密ということで (^_^;;

了解しました。
でも、完成の後にはアナウンスしていただけますよね!?