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

HyperCardによるACGIについて

発言者:木寺康嘉
( Date Friday, September 26, 1997 04:17:01 )


長文申し訳ありません。どうしてもわからない事があり、アップさせて
いただきました。

現在、HyperCardでAppleEventを使ったACGIの作成をめざしております。
丁度、このサイトにFormCGIというスタックを見つけ参考にしております。
しかし残念ながらAppleEventに関して理解できない私には、折角のサンプル
スタックを解析することすらできません。

お暇がありましたら是非ご教授ください。


    HyperTalk2.3活用リファレンスを参照してスクリプトを書きました。
なを、FormからACGIへアクセスする方法はサンプルスクリプトを参考
にさせていただきました。
 私が書いたAppleEventハンドラの中のbeepコマンドを実行しているの
ですが・・・肝心のデータが、うまく取り出せません。
request AppleEvent dataの結果itはEmptyです。(リファレンスの中では
この中にデータが入っていることになっているのですが???)

下記のスクリプトとフォームスクリプトを添付しました。
何処がおかしいのかご教授いただければ幸いです。

※リファレンスのReuestコマンドのwith KeyWordの意味とReplyコマンド
の意味がわからないのでこの辺に問題がありそうな気もします・・・?

ブラウザはIE 3.01(68K)を使っています。クラスとIDは、Requestコマンド
で調べたところclassはaevtでEventIDはodcoでした。

--スタックに書いたスクリプト
on AppleEvent class, eventID,sender
  if class & eventID = "aevtodoc" then
  request AppleEvent data
--URL→日本語変換は省略
  put it into bg fld "from http"
end AppleEvent

--HTML(フォーム)--
<html>
<title>cgi</title>
<body>
<form method = "POST" action = "hyper.acgi">
<input type ="text" name = "mytext">
<input type = submit value ="送信">
</form>
</body>
</html>

※resultコマンドの部分をサンプル「FormCGI」スタックの猿真似
でwith Keyword "post"で実行してみましたが、やはりデータは取得
できませんでした。一体何処に問題があるのでしょうか???

何卒よろしくお願い申しあげます。

広島県福山市 木寺保嘉 (kidera@air.linkclub.or.jp) 

田中求之 さんからのコメント
( Friday, September 26, 1997 11:15:53 )

CGI に対して Web サーバーから送られてくる AppleEvent は、 class = WWWス,
ID = sdoc です。また、FORM から送られてきたメッセージは、 keyword "post" 
のデータになります。ですから、以下のようなハンドラーによって Web サーバーから
送られてきたデータを受け止めることになります。

on appleEvent class, eventID, sender
  if class & eventID = "WWWスsdoc" then --- 木寺さんのスクリプトはここが間違っています

    request appleEvent data with keyword "post"
    put it into myPostArgs
    
    --- この時点で、myPostArgs の中に、FORM に記入されたデータが入っている
    --- ので、以下、これをデコードし、処理する
    
    
    ---- 処理の最後には、HTTP ヘッダー付で reply を返すのを忘れないこと!
    reply "HTTP/1.0 200 OK" & CRLF & "MIME-Version: 1.0" & CRLF ツ
    & "Content-Type: text/html" & CRLF & CRLF ツ
    & "<TITLE>Thank you</TITLE>" & CRLFツ
    & "<BODY BGCOLOR=" & quote & "#FFFFFF" & quote & ">" & CRLF ツ
    & "<H2>メッセージをありがとうございました</H2>"
    
  else
    pass appleEvent
  end if
  
end appleEvent


なお、HyperCard での AppleEvent の処理方法の基本的な考え方については、
ずっと以前に作った HyperCard Tips & Hints 集である「HyperCard の散歩道」
というスタックに簡単に書いてありますので、これをごらんください。


→  HyperCard の散歩道

木寺康嘉 さんからのコメント
( Saturday, September 27, 1997 00:32:15 )

ご回答いただきましてありがとうございます。

動作いたしました!(^_^)
IEに付属しておりました「パーソナルWebサーバー」でスタックを
動かしていたのが間違いだったようです。MacHTTP 2.2をインストール
して、その後、先生のご指示に従い、AppleEventのクラスを修正
いたしましたところ、無事に動きました。
(ほとんどFormCGIのスクリプトですので当然ですが・・・)

 初めてHyperCardのスタックを作成した時のような感激が呼び
戻りました。とても爽快な気分です。
 これからAppleEventに関する学習を行っていきたいと思います。
(これから散歩道をダウンロードさせていただきます。楽しみです!)

それから、FormCGIスタックのスクリプトはとても勉強になりました。
HyperTalkも記述の仕方で、とても洗練されたようになるんですね!
とても短いスクリプトですが、そこから学ぶものはとても大きかった
です。(まだ解析中ですが・・・)

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

広島県福山市(備後はいいとこ!)木寺保嘉

田中求之 さんからのコメント
( Saturday, September 27, 1997 00:44:58 )

無事に動いて何よりです。

HyperCard の CGI を本格的に使うには、色々と制約も多いのですが、一方で
HyperCard ならではの CGI が作れることも確かです。色々と遊んでみてください。

なお、MS パーソナル web サーバーでも CGI は動くはずなのですが、この点は
私の方では未確認です。 Quid Pro Quo 1.02 をお使いになるのがいいですよ。
MacHTTP には、ちょっと荷が重すぎると思います。