Rough English Here
 

アクセス集計用CGI

10/18, 2003: 更新停止
2/26, 2002: Version 1.23をリリース.googleのキャッシュ"cache:"の扱いを修正.
2/24, 2002: Version 1.22をリリース.検索エンジンのキーワードの抽出精度が向上.
2/22, 2002: Version 1.21をリリース.ページの最後にある「変更履歴」を参照してください.
2/7, 2002: ページを独立.
10/12, 2001: アクセスログの表示順などをちょっと修正.
10/11, 2001: アクセスログのReferrerに自動的にリンクする機能を追加 (thanks! > ハマケン)
10/10, 2001: "http://..../~username/"のようなURLで動作しない問題を修正. $paramlines変数を追加
10/9, 2001: パラメータ設定行の頭に空白があると正しく機能しない問題を修正. また,$topdirに関する説明を追加.
8/22, 2001: 「今日」「昨日」のカウント機能を追加
8/22, 2001: ページ公開
[002820]

内容が時代遅れになったため、今後このページは更新されません。ご了承下さい。

自分のサイトを運営していると,どのくらいのアクセスがあるのか気になってき ますね.で,アクセスカウンタを設置してみるんですが,トップページ以外から 入ってきたお客さんもカウントしたくなったり,どのページが人気あるのかとか, 検索エンジンにどんなキーワードを入れて自分のページにたどり着いたのか,な どいろいろ気になってきます.

こういう欲望を満たしてくれるCGIを探してみたのですが,これだ!っていうもの がなかったので自分で作ってみました.最近はこういうのを "Web Bug"などど呼 んだりするらしいですが・・・(^^;

ダウンロード
"countx.txt"をダウンロードして"countx.cgi"という名前で保存してください.

ファイル名サイズ日付ライセンス備考
countx-123.txt 17k 2/26, 2002 GPL アクセスカウンタ兼アクセスログ集計用CGI(Ver 1.23)
todayx.txt 2k 8/22, 2001 GPL 「今日」のアクセス数表示用CGI
yesterdayx.txt 2k 8/22, 2001 GPL 「昨日」のアクセス数表示用CGI

使い方
SSIが使えないサーバでは動作しませんのでご注意下さい.

〜 セットアップ 〜

  1. 上から"countx.txt"をダウンロードして"countx.cgi"という名前で 保存してください.

  2. 「今日」「昨日」のアクセス数の表示もしたい場合は "todayx.txt","yesterdayx.txt"もダウンロードして拡張子を".cgi"に変更 してください.

  3. "chmod 755 countx.cgi"などどして,ダウンロードしたファイルに実行パー ミッションを与えてください.

  4. もし,お使いのシステムに"Jcode.pm"がインストールされていない場合, "Jcode.pm"をインストールしてください.インストールできない場合は, ダウンロードページから"jcode.pl"(Kazumasa Utashiro氏作)を ダウンロードしてください. これは読み取りパーミッションだけあればOKです.

  5. "mkdir countx_data; chmod 777 countx_data"などとして, "countx_data"という名前のディレクトリを作り,httpdが書込めるように パーミッションを解放します.

  6. "countx.cgi"を編集して,Perlへのパス(1行目)や 以下で説明するパラメータを適切に設定します.

$topdirの指定がうまく行かないときは?

$topdirに指定すべきディレクトリがどこか分からなかったり, プロバイダによってはCGIがhtmlファイルのあるディレクトリを 操作できないように設定されているかもしれません.

このような場合は,countx.cgiがあるディレクトリに,"countx_top"などどいう 名前のサブディレクトリを作成し,$topdir="./countx_top"と指定してください. そして,"countx_top"以下にhtmlファイルと同じファイル名で,後述する パラメータだけを書いたファイルを用意してやります(面倒ですが, 他にうまい解決方法が思いつかないので・・・).
例えば,もしあなたのページが

index.html
about.html
story/story1.html
story/story2.html

のようなファイルから構成されていたら,countx_top以下に, index.html,about.html,countx_top/story以下にstory1.html, story2.html という名前のファイルを作成し,中身には以下で述べるパラメータだけを記述します.

〜 カウンタの設置 〜

カウンタを設置する場合は,まずHTMLファイルの初めから10行目以内 (この行数はcountx.cgi中の$paramlinesで変更できます)に,以下の ようにCGIに与えるパラメータを記述します.

<!-- countx?name=foo&showtop=1 -->

nameにはページの識別名(日本語や特殊な文字は使用できません)を与えます.省 略するとトップページとして扱われます.同じ識別名のページが複数あっても構 いません.

パラメータは"&"で区切ってください.与えるパラメータが無い場合は上記の行 は記述しなくても大丈夫です.

なお,count+xは"name"で与えられたページのカウントをするのはもちろんのこ と,トップページのカウンタも同時に回します.これによってどのページから入っ てきてもトップページのカウンタが回るようになっています.もちろん余分にカ ウントされる心配はありません.

次にカウンタの表示をしたい場所に,以下のような記述をしてください.

<!--#exec cgi="/cgi-bin/countx.cgi"-->

これでカウンタが表示されるはずです.

「今日」のアクセス数,「昨日」のアクセス数を表示するにはそれぞれ以下のよ うに記述してください(トップページのアクセス数のみ表示可能です).パラメー タを渡す必要はありません.

<!--#exec cgi="/cgi-bin/todayx.cgi"-->
<!--#exec cgi="/cgi-bin/yesterdayx.cgi"-->

〜 アクセスログの表示 〜

ページごとの集計やアクセスログを見るには,

http://www.yourserver.com/cgi-bin/countx.cgi?password="パスワード"

のように,パラメータに設定したパスワードを与えてアクセスしてください("" は不要です).
ページごとのアクセス数の一覧と,トップページのアクセスログを見ることがで きます.

ログに表示する項目はスクリプト内の"Report Customize"の変数の'1'と'0'で ON/OFFできるようになっています.

〜 検索エンジンキーワードの表示 〜

検索エンジンのキーワード一覧を表示するには,

http://www.yourserver.com/cgi-bin/countx.cgi?keywords=1

としてください.キーワードの色は"$searchcolor"でカスタマイズできます.

〜 「キリ番機能」について 〜

「キリ番機能」が有効になっていると,カウンタの値が"10000"や"7777"など いわゆるキリ番のときにカウンタを太字にして強調表示することができます(色も変えられます). キリ番機能を使いたくないときは"$use_kiriban = 0"としてください. また"$kiriban_color"でキリ番のときのカウンタの色を変更できます(デフォルトは青).

仕組み
機能を実装する上で一番悩ましかったのが,リンク元の取得です. 以下のような思考を経て,SSIのパラメータ渡しにたどり着きました.
  1. IMGタグを使ったCGIだとHTTP_REFERERにリンク元ではなく,CGIを呼び出し ているページのアドレスが入る.
  2. Java Scriptを使えばリンク元を取得できるが,Java ScriptがOFFになって るとダメだし,URLがエンコードされているとやっかい.
  3. SSIを使えば上記は解決可能だが,今度はSSIにパラメータを渡すのが難し い.特に最近のApacheはセキュリティ上の理由から直接パラメータを渡す ことができない.
  4. そこで,SSIを呼び出しているファイルを直接参照して,埋め込まれたパラ メータを読み出す方式を採ることにした.'DOCUMENT_URI'という環境変数 に呼び出し元へのパスが入るのを利用する.
Web関連のプログラムは制限がきつくてなかなか悩ましいですねぇ.

また,同一ホストからの連続アクセスをカウントしないために,以下のような仕 組みを使っています.

  1. 過去n個のログを調べて,同一ホストからのアクセスがあるか調べる.
  2. ホストがマッチしたら時刻を調べ,過去2時間以内のアクセスであればカ ウントしない,
厳密にやるのは難しいですが,とりあえずこのアルゴリズムで割とうまくいくよ うです.

それからcount+xではページごとにカウンタを設置した場合,そのページのカウ ントをするのはもちろんのこと,トップページのカウンタも同時に回します. これによってどのページから入ってきてもカウントされるわけです.連続アクセ スをカウントしないようになっているので,余分にカウントされる心配はありま せん.

おわりに
自分で使うために作ったCGIですが,もしかしたら使ってくれる人がいるかもし れないので,公開してみます.
ちょっとクセがあって分かりにくいとは思いますが・・・.感想や質問などあり ましたら掲示板にでも書込んでもらえると嬉しいです.
変更履歴
Version 1.10以前はファイル内の記述を参照してください.

Copyright © 2001-2002 KOMORIYA Takeru リンクはご自由に (参考) →Linux Lifeにもどる