|
|
03/16(Sun) 00:33
■ リンク元ランキング
■解説
- Web裏技さんのアクセス解析 webaxs.pl(オリジナル or 改造後のもの) で記録されたログデータ log.csvを使い、リンク元ランキング一覧を作成し、表示します。(サンプルはこちら)
- 「キーワード」でその訪問者がどのページからの来訪かを判定します。
「キーワード」(MySweetHomepageのmshなど)はリンク元URLの中のそのページが特定できる言葉を選びます。例えば、Infowebの場合リンク元には次のようなものがあります。
- http://village.infoweb.ne.jp/msh/home/whoswho.htm
- http://village.infoweb.ne.jp/msh/whoswho/whos001.html
- http://village.infoweb.or.jp/msh/whosimg/img001.html
3つのURLに共通の msh を「キーワード」に選びます。
- 1つのリンク元について、NAME/HTML定義部と判定部とがペアになってます。$NAME[4]、$HTML[4] 、$CNT[4]と配列番号の同じものが1セットです。あなたのページに合った内容に変更して使って下さい。
- 新しいリンク元を追加する時は、NAME/HTML定義部 $NAME[4] = 'MySweetHomePage';$HTML[4] = 'http://village.infoweb.ne.jp/msh/home/whoswho.htm'; とそれに対応する判定部 elsif ($ref =~/msh/) {$CNT[4]++;} を追加します。
下のスクリプトをマウスでドラッグし「コピー」「貼りつけ」でコピーできます。
#!/usr/local/bin/perl
#↑perlの存在するpathに書き換えてください。
#############################################################################
# リンク元ランキング pageview.cgi
# Copyright (c) 1998 菊池さん
#############################################################################
#
#-------------------------------------------------------------------#
# ログ記録ファイルのパス設定
$log = "./log.csv";
#-------------------------------------------------------------------#
# HTMLヘッダを出力
print "Content-type: text/html\n\n";
#環境変数取得
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$form{$name} = $value;
}
$disp = $form{'disp'};
#----------------------------------------------------------
# NAME/HTML定義部
# $CNT[i]に対応したページ名とURLの対応表です。
$NAME[0] = 'その他';$HTML[0] = '';
$NAME[1] = 'ブックマーク or URL直接入力';$HTML[1] = '';
$NAME[2] = 'file://';$HTML[2] = '';
$NAME[3] = 'MySweetHomePage';$HTML[3] = 'http://village.infoweb.ne.jp/';
$NAME[4] = 'Yahoo検索';$HTML[4] = 'http://www.yahoo.co.jp/';
$NAME[5] = 'InfoNavigator検索';$HTML[5] = 'http://infonavi.infoweb.ne.jp/';
$NAME[6] = 'InfoSeek検索';$HTML[6] = 'http://www.infoseek.co.jp/';
$NAME[7] = 'CSJindex検索';$HTML[7] = 'http://www.csj.co.jp/';
$NAME[8] = 'OCNサーチ';$HTML[8] = 'http://search.ocn.ne.jp/';
$NAME[9] = 'Real SnowBoardさん';$HTML[9] = 'http://www.realsnowboard.com/';
#----------------------------------------------------------
$len = @NAME; # 配列の要素数
# 現在時刻取得
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time + 9*3600);
# 上記のgmtimeで取得した$monには0から11までの数字が入るので修正処理
$month = ($mon + 1);
# 曜日変換処理
# $wdayには0から6までの数字が入り曜日に対応している
$y0="日"; $y1="月"; $y2="火"; $y3="水"; $y4="木"; $y5="金"; $y6="土";
$youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6) [$wday];
# 時刻を2桁に統一する処理
if ($mday < 10) { $mday = "0$mday"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
$date_now = "$month/$mday($youbi) $hour:$min";
# ログを配列@linesに読み込む
open(DB,"$log");
@lines = ;
close(DB);
# 各データを項目別に集計する
foreach $line (@lines) {
($hour,$ref,$rh,$hua,$dummy,$dummy2) = split(/\,/,$line);
$n++;
# 判定部 ----- 来訪経路の特定文字列の検索と集計
if ($ref eq '') {$CNT[1]++;}
elsif ($ref =~/file:/) {$CNT[2]++;}
elsif ($ref =~/msh/) {$CNT[3]++;}
elsif ($ref =~/yahoo/) {$CNT[4]++;}
elsif ($ref =~/infonavi/){$CNT[5]++;}
elsif ($ref =~/infoseek/){$CNT[6]++;}
elsif ($ref =~/csj/) {$CNT[7]++;}
elsif ($ref =~/search\.ocn/) {$CNT[8]++;}
elsif ($ref =~/geocities/ && $ref =~/2432/) {$CNT[9]++;}
else {$CNT[0]++;}
#----------------------------------------------------------
}
# 件数の多い順にソート
$i = 0; # データ列の作成
$sum = 0;
while ($i < $len){
$s = sprintf("%04d",$CNT[$i]);
if ($CNT[$i] eq "") { $CNT[$i]=0;}
$DATA[$i]= "$s\,$NAME[$i]\,$HTML[$i]\,$CNT[$i]\n";
$sum = $sum + $CNT[$i];
$i++;
}
@DATA = sort(@DATA); @DATA = reverse(@DATA); # ソート
# ここからHTMLの出力
print "リンクランキング\n";
print "\n";
print " $date_now \n";
print "\n";
print " \n";
print " | ";
print " |
\n";
print " ■ 総サンプル数:最新 $n アクセス \n";
print " \n";
print "順位 | ";
print "ページ名 | 件数 | \n";
# 1行出力
$j = 1;
foreach $line (@DATA) {
($s,$name,$url,$cnt) = split(/\,/,$line);
if ($disp eq "all" || $s >= 1) {
if ($url =~/http:\/\//) {
print "$j | "; }
print "$name | "; }
print "$cnt | \n"; }
else {
print "$j | $name | "; }
print "$cnt | \n"; }
$j++;
}
}
print " | 合計 | $sum | \n";
print " \n";
print "\n";
|
|
|