Perl/CGI研究室 'PERL-LABO'

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

ダウンロードカウンターの研究

研究内容

配布しているCGIスクリプトのダウンロード数をカウントする研究です。

結果

実用的なクリックカウンターを

Location でジャンプする、ID別にカウントを行う、といったことを 研究してからだいぶ時間が経ちました。 この間にID別のカウント処理を行うライブラリが完成、 また、自作のCGIプログラムを配布するまでになりました。 そこで、リンククリック解析の研究に立ち戻り、 集大成としてダウンロードカウンターを作成しようと思います。

リンクをクリックしたときに処理を行う方法

ダウンロード数を記録するには、ダウンロードのリンクをクリックしたときに カウントを増やす処理を行う必要があります。 そのために、ダウンロードのリンクを直接 lzh ファイルなどの目的のファイルにするのではなく、 CGIプログラムにします。そしてCGIプログラムの中でカウント処理を行ってから、 Loaction ヘッダを使って目的のファイルにジャンプするようにします。 ダウンロードするファイルが複数ある場合は、IDのようなものをCGIスクリプトに渡すことで ジャンプ先を変えることができます。…これは、既に研究済みですね。

カウントするには

数を数えるという処理は得意です (^^ ページビューカウンターから始まった、一定期間のカウントとトータルのカウンタを記録する counters.pl。 このライブラリは複数のもののカウントを行うのに利用できます。 今回も、このライブラリを利用することにしましょう。

作成したCGIプログラム

download.cgi
#!/usr/bin/perl

require 'getformdata.pl';
require 'counters.pl';
require 'html.pl';

# IDとジャンプ先
%map = (
	"plabcounter",	"plabcounter100.lzh",
	"pvcounter",	"pvcounter100.lzh",
	"refcounter",	"refcounter100.lzh",
	"searchword",	"searchword100.lzh",
	"plabanalyzer",	"plabanalyzer100.lzh",
);

# ファイル名など
$fname = "dat_downcounters.cgi";

%form = plab::getformdata();

if ($form{'v'} ne "graph") {
	$id = $form{'id'};
	if ($id eq "") { $id = "(NULL)"; }
	if (! exists($map{$id})) {
		print "Content-type: text/html\n\n";
		print "ID:$id は存在しません。";
		exit;
	}
	plab::incl_counters($fname, $id, 1, 3, 7);
	print "Location: $map{$id}\n\n";
}
else {
	print "Content-type: text/html\n\n";
	plab::printhtmlheader("ダウンロードカウンター");
	print "<div>\n";
	print "ダウンロードカウンター \n";
	print "</div><br>\n";
	$logno = $form{'log'};	# 表示するログ番号
	plab::view_counters($fname, 3, $logno, 0);
	plab::printhtmlfooter("");
}

実行結果

当サイトで配布しているCGIプログラムのダウンロード履歴です。

ダウンロード履歴

解説

プログラムについて

以前行ったリンククリック解析の研究と、ライブラリのおかげで難しいことはなにもありませんでした。 プログラムも短いです。

でもちょっと不満もありますね。 画面に表示されるのが、プログラムの中で使用している各CGIスクリプトを表すIDになっています。 私はこれでも分かりますが、訪問者さんにとってはなんのことか分からない暗号に近いですよね。 これを、分かりやすいように正式名称にしたいです。 それに、クリックしたらそのCGIスクリプトのダウンロードページが開くようにリンクにしたいです。 数をカウントするのに便利な counters.pl ライブラリですが、 そこが問題。今の機能では実現できません。改良の余地ありです。

あともう1つの不満は、counters.pl ライブラリでは過去のカウントを見ることができないこと。 仮にですけど、配布しているCGIスクリプトが将来もっとたくさんの人にダウンロードしてもらえるように なったとしたら、昔はアクセス少なかったけど今はこんなにダウンロードしてくれてる…と感激できるように、 過去のダウンロード履歴も残したいですよね。目的が不順?(^^; でもその辺も改良の余地ありという感じです。

他のサイトでも利用できますよね

このサイトではダウンロードといえばCGIスクリプトですが、 それ以外でもなにかダウンロードするものを置いているサイトでは役に立つCGIプログラムだと思います。 素材屋さんなどは、人気のある素材がランキングにできたり。 欲しい方おられたら掲示板から連絡してください。 でも素材の場合は「画像をファイルに保存」だからCGIプログラムの呼び出しにならないか…。

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

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