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"などど呼 んだりするらしいですが・・・(^^;
- SSIを使ったアクセスカウンタです
- ページごとのカウント数を集計できます
- すべてのページに設置することで,検索エンジンや直リンクからやってき た人を含めた「かなり正確な」来訪者数をカウントすることができます
- 「今日」「昨日」のアクセス数の表示もできます
- アクセス元,リンク元の情報などを記録できます
- 検索エンジンから来たときのキーワードを抽出可能です
- キリ番("10000"や"7777"など)のとき,カウンタを自動的に強調表示できます
- 同一ホストからの連続アクセスはカウントしません
- Jcode.pm(またはjcode.pl)を使って日本語を正しく処理します
ダウンロード
"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が使えないサーバでは動作しませんのでご注意下さい.〜 セットアップ 〜
- 上から"countx.txt"をダウンロードして"countx.cgi"という名前で 保存してください.
- 「今日」「昨日」のアクセス数の表示もしたい場合は "todayx.txt","yesterdayx.txt"もダウンロードして拡張子を".cgi"に変更 してください.
- "chmod 755 countx.cgi"などどして,ダウンロードしたファイルに実行パー ミッションを与えてください.
- もし,お使いのシステムに"Jcode.pm"がインストールされていない場合, "Jcode.pm"をインストールしてください.インストールできない場合は, ダウンロードページから"jcode.pl"(Kazumasa Utashiro氏作)を ダウンロードしてください. これは読み取りパーミッションだけあればOKです.
- "mkdir countx_data; chmod 777 countx_data"などとして, "countx_data"という名前のディレクトリを作り,httpdが書込めるように パーミッションを解放します.
- "countx.cgi"を編集して,Perlへのパス(1行目)や 以下で説明するパラメータを適切に設定します.
- $jcode_pl : Jcode.pmが使用できない場合,1を指定してください. ただしこの場合,文字コードがUTF-8に対応できないので,一部の検索エンジンの キーワードが正しく表示されないことがあります.
- $local_ip : ローカルホストのIPアドレスを指定します. ここで指定したIPアドレスからアクセスがあっても,カウントは行われません. 例えば"192.168.1."としておくと"192.168.1.*"からアクセスされたときには カウントをしません.
- $home : ホームページのURLを指定します. $home ="http://www.yourserver.com/~yourname"; のように,ファイル名を含まない形にしてください. ここで指定されたURLは,アクセスログのリンク元に表示されません.
- $topdir : htmlファイルを置く最上位のディレクトリを指定します(/home/httpd/htmlなど).
- $password : アクセスログを表示する際のパスワードを指定します.
- $digit : カウンタの表示桁数を指定します.
- $maxlog : アクセスログの保存件数を指定します.
$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にはページの識別名(日本語や特殊な文字は使用できません)を与えます.省 略するとトップページとして扱われます.同じ識別名のページが複数あっても構 いません.
パラメータは"&"で区切ってください.与えるパラメータが無い場合は上記の行 は記述しなくても大丈夫です.
- "hidden=1"とするとカウントだけしてカウンタの表示は行いません(この場合も 下記の"#exec cgi〜"はページ内のどこかに記述してください).
- "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のパラメータ渡しにたどり着きました.Web関連のプログラムは制限がきつくてなかなか悩ましいですねぇ.
- IMGタグを使ったCGIだとHTTP_REFERERにリンク元ではなく,CGIを呼び出し ているページのアドレスが入る.
- Java Scriptを使えばリンク元を取得できるが,Java ScriptがOFFになって るとダメだし,URLがエンコードされているとやっかい.
- SSIを使えば上記は解決可能だが,今度はSSIにパラメータを渡すのが難し い.特に最近のApacheはセキュリティ上の理由から直接パラメータを渡す ことができない.
- そこで,SSIを呼び出しているファイルを直接参照して,埋め込まれたパラ メータを読み出す方式を採ることにした.'DOCUMENT_URI'という環境変数 に呼び出し元へのパスが入るのを利用する.
また,同一ホストからの連続アクセスをカウントしないために,以下のような仕 組みを使っています.
厳密にやるのは難しいですが,とりあえずこのアルゴリズムで割とうまくいくよ うです.
- 過去n個のログを調べて,同一ホストからのアクセスがあるか調べる.
- ホストがマッチしたら時刻を調べ,過去2時間以内のアクセスであればカ ウントしない,
それからcount+xではページごとにカウンタを設置した場合,そのページのカウ ントをするのはもちろんのこと,トップページのカウンタも同時に回します. これによってどのページから入ってきてもカウントされるわけです.連続アクセ スをカウントしないようになっているので,余分にカウントされる心配はありま せん.
おわりに
自分で使うために作ったCGIですが,もしかしたら使ってくれる人がいるかもし れないので,公開してみます.
ちょっとクセがあって分かりにくいとは思いますが・・・.感想や質問などあり ましたら掲示板にでも書込んでもらえると嬉しいです.
変更履歴
Version 1.10以前はファイル内の記述を参照してください.
- Version 1.23
googleのキャッシュから来た場合の"cache:"の扱いを修正
- Version 1.22
検索エンジンのキーワードの抽出の方法を修正し,精度が向上
- Version 1.21
対応するサーチエンジンを増やした
- Version 1.20
「キリ番機能」を追加
画像検索のサーチエンジンに対応
- Version 1.10
Jcode.pmを使い,UTF-8をサポートするようにした
サーチエンジンからのキーワードを抜き出し,色を変えて表示するようにした
最近のサーチエンジンからのキーワードの一覧を表示する機能を追加
| Copyright © 2001-2002 KOMORIYA Takeru | リンクはご自由に (参考) | →Linux Lifeにもどる |