ホームHTMLに役立つヒントADSLでMACサーバ・実験室 > JAVAscript & AppleScriptカウンタ

JAVAscript & AppleScriptカウンタ

 ここでは、JAVAscriptとAppleScriptを組み合わせたカウンタを紹介します。web共有でも動きます。

できあがりは 「ページビュー」 こんな感じです。


目次

処理の流れ ▲ページトップ

 考え方は単純で、AppleScriptを使ったCGIでアクセスをカウントしてカウンタファイルに書き出します。
 同時にJAVAscriptを吐き出し、それを読み込んで表示します。


AppleScriptの例 ▲ページトップ

 次のスクリプトを「スクリプト編集プログラム」にコピー&ペーストして、「別名で保存」→「classicアプリケーション」で保存します。「初期画面の表示をしない」「実行後に自動終了しない」にチェックし、名前は「counter.acgi」とでもします(拡張子が「.acgi」であればなんでもいいです。拡張子は「.cgi」でもいいですが、複数の呼び出しに対して並行処理ができません)。

 あ、そだ。なんでperlでなくAppleScriptかというと、MACperlの場合、5分間呼び出されないと終了してしまうので、立ち上がり動作分だけ遅くなるからなんです。AppleScriptのCGIなら「実行後に自動終了しない」オプションで立ち上がりっぱなしになりますので。

 これらのスクリプトでは高速化のために田中先生のTanaka's OSAX 2.01を使っています。インストールしておいて下さい。これ以前のバージョンのTanaka's OSAXについては試していませんので、動作するかわかりません。作者の田中求之さんに感謝いたします。

Tanaka's OSAX配布場所:http://mtlab.ecn.fpu.ac.jp/tanaka_osax.html

counter.acgi01 ver0.1 2003/11/30 

●特徴

最初のバージョン。単純にカウントアップするだけなのでもっとも動作が軽い。

 やっていることは単純で、CGIが呼び出されたらカウンタファイルを読み込んで、+1して書き戻し、新しい値をJAVAscriptでHTMLに書き戻しています。

●設定

property countFile : "indexCount" -- ★★★ カウントファイル名初期化 ★★★--------------設定必須」の部分はカウントファイル名です。適当に書き換えてください。

counter.acgi02 ver0.2 2003/12/1 

●特徴

引数をつけて1つのカウンタで複数のページのカウントができる。

引数の付け方は「埋め込むJAVAscriptの例」を参照。

●設定

set countFile to "indexCount" -- ★★★ カウントファイル名初期化 ★★★--------------設定必須」の部分はカウントファイル名です。適当に書き換えてください。後述のカウントファイル名の指定がない場合はこのファイル名が使われます。

counter.acgi031 ver0.31 2003/12/2 

●特徴

引数をつけて1つのカウンタで複数のページのカウントができる。

引数の付け方は「埋め込むJAVAscriptの例」を参照。

その日にアクセスしてきたIPアドレスを保存し、同じIPからのアクセスはカウントしない。その日のIPファイルかどうか判定し、削除する動作が重いので、速いマシンで使ってください。

●設定

set countFile to "indexCount" -- ★★★ カウントファイル名初期化 ★★★--------------設定必須」の部分はカウントファイル名です。適当に書き換えてください。後述のカウントファイル名の指定がない場合はこのファイル名が使われます。

「property iplog : "_ip" -- ★★★ IP保存ファイル名。空白にするとIPチェックしない。 ★★★--------------設定必須」の部分はIP保存ファイル名です。「カウントファイル名+IP保存ファイル名」がIP保存ファイル名になります。デフォルトでは「indexCount_ip」です。ここを空にするとIPをはじく機能は動作しません。

counter.acgi032 ver0.32 2006/10/3 

・0.31の高速化版。IPリストの有効性判定を改良し、ちょっとだけ速くなった。設定方法は0.31と同じ。


 次の部分はそのままで動作するはずなんですが、パスのある場所を自動取得できない環境があるようなので、その場合は手動でスクリプトをおいたパスを指定してください。

on run
set thisDir to (":" as alias) as string --パス取得
--自動取得↑がうまくいかない場合は↓手動で設定してね。
--set thisDir to "ここにパス" --スクリプトのあるパス ←行頭の「--」を削除してコメントを外し、パスを記述する
end run

 古いAppleScriptではon handle CGI requestが使えません。次の2箇所を書き換えてください。

●この部分を
on handle CGI request urlPath searching for getData with posted data postData from client IP address ipAddress

●こう書き換える。
on ヌevent WWWスsdocネ urlPath given ヌclass kforネ:getData, ヌclass postネ:postData, ヌclass Kcipネ:ipAddress

●閉じタグのこれを
end handle CGI request

●こう書き換える。
end ヌevent WWWスsdocネ

埋め込むJAVAscriptの例 ▲ページトップ

 カウンタを表示させたいところに次のJAVAscriptを埋め込みます。これでCGIの呼び出しと表示の両方をやってます。赤字はCGI名。ディレクトリが違う場合は「../cgi-bin/counter.acgi」などとしてください。

 埋め込むHTMLファイルの拡張子は「.html/.htm」でOKです。「.shtml」である必要はありません。

<script src="counter.acgi" type="text/javascript"></script>

 ver 0.2からはCGIに引数をつけてカウントファイル名を指定できるようになりました。これによって、ひとつのCGIで複数のカウンタを動かすことができます。引数は「cntFile=ファイル名」となります。「indexCount2」というファイル名の例を示します。

<script src="../counter.acgi?cntFile=indexCount2" type="text/javascript"></script>

 次のページではこのページと同じカウンタスクリプトが処理しています。


特徴と欠点 ▲ページトップ

 JAVAscript対応ブラウザでないと動作しないという点が欠点。

 かわりにcgiの処理工程が少ないので比較的高速に動作します。それに「SSIもどき」と異なり、acgiを呼び出すためのファイルを置く必要もありません。構造がシンプルって事ですね。

 ver.0.2からはひとつのCGIで複数のカウンタを置くことができるようになりました。

 ver.0.3ではその日にアクセスしてきたIPアドレスはカウントしないようになっていますが、動作が遅いです。


おまけ ▲ページトップ

 SSIっぽくしたいなら、JAVAscriptでファイルの修正日、日時の表示をやるといいでしょう。JAVAscriptはブラウザ依存なので、表示されないブラウザもありますが<(_ _)>

<p>このファイルの修正日2:
<script language="Javascript">
<!--
document.write(document.lastModified);
-->
</script>

<p>今日の日付:
<SCRIPT Language="JavaScript">
<!--
document.write(new Date());
-->
</SCRIPT>

このファイルの修正日:

今日の日付:


著作権など ▲ページトップ

 ご自由にお使い下さい。改造したり再配布してもOKです。

 おっと、例によって万一このソフトを使って被害を被っても、損害はいっさい保証しません。オウンリスクで使ってください。

 もしこのCGIをお使いだという奇特な方がいらっしゃったらお知らせください。リンクさせていただきます。


ホームHTMLに役立つヒントADSLでMACサーバ・実験室 > JAVAscript & AppleScriptカウンタ