Perl/CGI研究室 'PERL-LABO'

Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

アクセス元を知る、その2

研究内容

サイトの訪問者がどのページからやってきたのかを調べる研究です。

詳細

前回の研究では…

前回の研究で、 環境変数 HTTP_REFERER に、リファラーというものが入っていて、 リファラーというのは、 CGIプログラムを呼び出す前に訪問者が開いていたウェブページのURLなんだっていうことが分かりました。 これを利用して、ページビューカウンターのようなCGIプログラムを作成することもできますから、 なかなか便利なものです。

今回研究すること

今回は、CGIプログラムを呼び出したのがどこのページか?ではなくて、 訪問者様がどこから自分のウェブサイトに来たか?ということを調べる研究です。 これはサイト管理者としてはとても気になる情報ですよね。 アクセスカウンターとか付けて、少ないながらもいくらかのアクセスがあると、 どこから来てくれてるのかなぁ、と思ったりします。

では、どうやって、 訪問者様がどこから自分のウェブサイトに来たか?ということを知るのか、 ということです、環境変数の中にはそのような情報は入っていません。 環境変数の中にあるのはあくまでそのCGIプログラムにリンクしていたURLだけです。 CGIプログラムの中で「どこから自分のウェブサイトに来たか」という 情報を取得する方法は無さそうなのです。

実際のところ、CGIプログラムの中で取得できる訪問者様の情報というのは、 ここまでで研究した「リファラ(CGIプログラムのリンク元URL)」 「OS」「ブラウザ」「IPアドレス」「ホスト名」の他にはなさそうです。 強いて言うと「ブラウザで設定されている言語」というのがまだありますが、 これは今のところ興味無し!です。どうせ日本語ですから (^^; で、これら以外の情報については、CGIプログラムの中では取得できないわけですから、 CGIプログラムの中でこれら以外の情報を処理したい場合は、 外部から与えてやる必要があります。

外部から与える、というのはどういう意味かというと、例えば次のようにして CGIプログラム実行時にデータを渡してあげるんです。

<a href=nanchikacgi.cgi?渡すデータ>CGI実行!</a>

そして、ここで Javaスクリプト の出番です。 Javaスクリプトによって 訪問者様の情報を取得して、そのデータをCGIプログラムに渡すHTMLタグを生成する! ということなのです。 これが、ここから先のアクセス解析の基本的な考え方になります。

結果

Javaスクリプトでリファラーを取得

それでは今回の研究目標である、訪問者様がどこから自分のサイトに来てくれたのか、 ということを、Javaスクリプトを使って調べてみましょう。

Javaスクリプトでは、リファラーを取得することができます。 リファラーとは、既に出てきたように、そのページの前に見ていたページです。 CGIプログラムの場合は、そのCGIプログラムにリンクしているウェブページでしたね。 Javaスクリプトの場合、そのJavaスクリプトが書かれたウェブページの前に見ていたページのURLを取得できます。 それは、次のようにものです。

document.referrer

referer ではなくて referrer です。r が2つです。 環境変数だと REFERER で r は1つですけど、r が2つの方が正しいスペルなんだそうです。 間違えそうですね (^^; さて、Javaスクリプトで、リファラーをHTMLに動的に追加するようにしてみましょう。 HTMLファイルの中で、次のように書きます。

<script type="text/javascript">
<!--
document.write(document.referrer);
// -->
</script>

画面には、次のように表示されます。


なんて表示されていますか? このサイトのトップページからこのページに来られたのなら、http://www.perl-labo.org/ となっていると思います。 検索エンジンなどで直接飛んで来られた方は、その検索エンジンのページのURLになっていると思います。 サイト内を移動した場合は自分のサイト内のURLになるのでそれほど嬉しい情報ではありませんが、 他のサイトからリンクをたどって自分のサイトに訪問してくれた場合、リンク元のURLが入っていることになりますから、 それはまさに知りたい情報なのです。

このように、Javaスクリプトには「なにか情報を得る」ということと、 「動的にHTMLを生成する」ということができます。 これに「URLに ?〜 を付けてCGIプログラムに情報を渡すことができる」ということを合わせると、 Javaスクリプトで取得できる情報は、すべて、CGIプログラムに渡すことができることになります。 いやーJavaスクリプトというのもすごく便利なツールですね。 このサイトはPerl/CGIのサイトですが、Javaスクリプトの研究も避けては通れません (^^;

それでは、上に表示した、このページの前に開いていたページのURLをCGIプログラムに渡すという処理をしてみましょう。 例えば、IFRAMEタグを使った場合、次のようなスクリプトになります。

<script type="text/javascript">
<!--
document.write("<iframe src=test.cgi?" + document.referrer + "></iframe>");
// -->
</script>

画面には次のように表示されます。


ゴニョゴニョなんて書いてますが、実際はなにもしていません (^^;

作成したCGIプログラム

test.cgi
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "$ENV{'QUERY_STRING'} っていう情報が渡されてきたのでゴニョゴニョします。";

考察

これで、アクセス元が分かります

今回作ったCGIプログラムは渡された情報をなにも処理していませんが、 これで、リファラーランキングとかが作れる準備ができた感じですね!

Javaスクリプトで取得できる訪問者の情報に、どんなものがあるのかっていうのは まだ研究できていません。とりあえずリファラーについて研究しましたが、 他にもいろいろあるみたいです。これから研究していこうと思います。

研究メモ

  1. Javaスクリプトでは、アクセス元ウェブページのURLが document.referrer に入っています。
Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

Copyright (c) 'PERL-LABO' All Rights Reserved.  リンクフリーです。