« サイト内アクセスランキング/ページ毎のリンク元ランキング | Main | なぜ議論はループするのか:blog の場合 »

2004.03.01

人気ページ一覧/リンク元一覧表示機能公開

改名しました^^;
現在このサイトに設置しているような、「人気ページ一覧/リンク元一覧」を任意のサイトに適用できるソフトウェアの version 0.1 を公開します。

Version 0.1 のダウンロード(新しいバージョンがある場合はトラックバックにて辿れます)
注意:ココログ以外に CGI を設置できる web スペースが必要です。

特徴

現状の特徴は、以下です。

  1. ページ側への埋めこみが楽。
  2. カウントから除外するコードを簡単に追加可能。
  3. 同一視するページを指定可能。
    • 例えば、http://shin.txt-nifty.com/ と http://shin.txt-nifty.com/philosophical/ を同一視。
    • URL への "index.html" の有無などについても同一視が可能。
  4. リンク元ランキングについては一つのスクリプトでリアルタイム反映。
  5. リンク元ランキングを任意の箇所に埋めこみ可能。記事に埋めこめば、トップページの各記事毎に「この記事へのリンク元」を設置可能。
  6. サイト内アクセスランキングについては記録/集計を分けている。ランキング表示は軽い。
  7. リスティングする最大件数の指定が可能。
  8. 集計は密かに web からキック可能^^;。


まぁ、自分の欲しい機能が優先されているので、検索キーワードの表示などは対応していませんが(リンク元にリスティングされた検索エンジンからの URL をクリックすれば見れるし)、逆に、検索以外からの訪問者、つまり「読者」や、他のサイトからのご紹介などのカウントが見えるようになっています。


アーカイブ内容

ダウンロードして展開すると、以下の構造になります。

ディレクトリ属性用途
cgi
+-data777ログ置き場(ディレクトリ)
+-ref.pl644設定と実処理
+-refer_s.cgi755記録処理(兼リンク元一覧の表示)
+-show_referrer.cgi755このページへのリンク元一覧の表示(テスト/iframe 用)
+-show_referrer_s.cgi755このページへのリンク元一覧の表示(JavaScript 版)
+-show_statistics.cgi755人気ページ一覧の表示(テスト/iframe 用)
+-show_statistics_s.cgi755人気ページ一覧の表示(JavaScript 版)
+-update_statistics.cgi755人気ページ一覧の更新
README_sjis.txtたいしたことは書いてません:p
refer.js記録処理呼び出し用ヘルパー


設置方法

1. 設定の編集

ref.pl を編集します。テキストエディッタで開いて、以下の部分をご自身のサイトに合わせて修正してください。
以下はこのサイト用の修正例です。

# 集計対象とする URL
# この URL 配下から送られたデータしか処理しません。
my $my_url = "http://shin.txt-nifty.com/";

# 同一視する URL のリスト
# 左の URL へのリクエストは右の URL へのものとみなします。
# 完全マッチなので補正しそこねることもあるかもしれません。
my %equals = (
'http://shin.txt-nifty.com/', 'http://shin.txt-nifty.com/philosophical/',
);


2. CGI のアップロード

cgi ディレクトリ配下を丸ごと Web サーバの CGI 実行可能なディレクトリにアップロードしてください。
そして、各ファイルの属性を上記に示したように変更してください。

refer.js は、ココログ上でも別の Web サーバ上でも構いませんので、URL で参照可能な場所にアップロードしてください。
アップロードせずに、ここに設置したものの URL(=http://shin.txt-nifty.com/philosophical/refer.js) をそのまま参照しても構わないかと思います。


3. サイト側の設定

3-1. Web ページへ記録処理の設置

ココログの方は 3-4 へ進んでください。
以下のような行を任意の箇所に追加します。

<script type="text/javascript" src="http://shin.txt-nifty.com/philosophical/refer.js"></script>
<script type="text/javascript">refer("{CGIを設置したサイト}/cgi-bin/refer_s.cgi");</script>

サイト内のあらゆるページで表示される箇所(サイドバーなど)、あるいは、集計対象としたい各ページ上に記述を追加します。
リンク元ランキングを表示しますが、記録を兼ねているので同一ページ上に複数回この記述が現れないようにご注意ください。


3-2. 人気ページ一覧の表示処理

とりあえずは、飛ばしても構いません。
「人気ページ一覧」を表示するなら、サイト内のあらゆるページで表示される箇所(サイドバーなど)、あるいは、表示対象としたい各ページ上に以下の記述を追加します。

<script type="text/javascript" src="{CGIを設置したサイト}/cgi-bin/show_statistics_s.cgi"></script>

注意:UTF-8 以外の Web サイトへの設置に関して
上記の script による人気ページ一覧表示では、Web サイトが UTF-8 なページでなければ正常に動作しません。
UTF-8 以外のページに「人気ページ一覧」を表示したい場合は代わりに以下のような iframe の指定を追加してください。

<iframe frameborder="no" width="100%" height="120" src="{CGIを設置したサイト}/cgi-bin/show_statistics.cgi"></iframe>


3-3. リンク元一覧の表示処理の追加

飛ばしても構いません。
もし、一ページ中に複数のリンク元一覧を表示したい場合(blog 記事本文に埋めこみたい場合など)は、blog 記事中に以下の記述を追加してください。

<script type="text/javascript" src="{CGIを設置したサイト}/cgi-bin/show_referrer_s.cgi?リンク元を表示したいページのURL"></script>

blog の場合、記録処理をサイドバーに記述して、記事中にここに書いた記述を行うことで、トップページやバックナンバー表示時に記事毎にリンク元一覧を表示することができます。この記事でも実験的に埋めこんでいます。


3-4. ココログの場合の設置方法

上記の記録処理/一覧表示処理をココログに設置する場合の具体例です。

まず、タイプが「リンク」であるマイリストの作成を行います。
マイリストの設定で、「メモの表示」を「テキスト表示」に設定します。
ダミーの URL を記述して新しいリンクを作成し、「メモ」欄に以下のような記述を追加します。

<h2>人気ページ一覧</h2>
<script type="text/javascript" src="{CGIを設置したサイト}/cgi-bin/show_statistics_s.cgi"></script>
<h2>このページへのリンク元</h2>
<script type="text/javascript" src="http://shin.txt-nifty.com/philosophical/refer.js"></script>
<script type="text/javascript">refer("{CGIを設置したサイト}/cgi-bin/refer_s.cgi");</script>

マイリストをサイドバーに表示するように設定します。


4. 「人気ページ一覧」の更新

「人気ページ一覧」を表示しない人には無関係です。
「人気ページ一覧」はアクセスログを定期的に集計して生成しています。
「人気ページ一覧」の更新は、update_statistics.cgi を起動することで実行できます。
cron を設定するのがよいです。

私は以下のような crontab ファイルを作成して、

1,31 * * * * cd /path/to/cgi/dir;./update_statistics.cgi

crontab ファイル名

で登録しています。上記は30分おきに実行という意味です。

また、ブラウザから http://サーバ/cgi-bin/update_statistics.cgi?dummy
のようにダミーパラメタを付加した URL を叩くと手動更新ができます。


以上で設置は完了です。以下はおまけです。


スタイルの調整

リンク元一覧には class="referrer-list" が指定されています。
人気ページ一覧には id="statistics" が指定されています。
内部の A 要素のスタイルの方が優先されてしまいますが、これを元に多少の調整が可能です。
この辺は後のバージョンで改修するかもしれませんけど。


除外するアクセスなどのカスタマイズ

ref.pl の最後の方に、
need_recording_access
need_recording_ref
normalize
といった関数があります。これらを修正すると、人気ページ一覧/リンク元一覧にリスティングする URL を調整できます。
今はかなり説明不足な気もしますが、わかりにくい点がありましたらご質問くださいませ_o_。


注意点/問題点

JavaScript がオフになっているクライアントのアクセスは集計されません。
そのクライアントには表示もされません。
SSI などが利用できない環境に導入できることを優先しているため、SSI 版は今のところ対応予定はありません。


将来

とりあえず、集計から除外すべき物をブラッシュアップします。自分によるアクセスを完全に除外するようにしようかと。
その後は一つのシステムで複数サイトの面倒を見れるようにしようかな…。


謝辞

JavaScript での UTF-8 エンコードには、JavaScriptにおけるURLエンコードの処理のコードを使わせていただきました_o_。


その他

perl なんて嫌いなんですが、配布(特にココログユーザ)を念頭に置くと perl で書くしかなかったので perl です。
perl なコードは怪しい所があるかもしれませんです。変数のスコープもよく知らないで書いてるし^^;。
というわけで perl 慣れしていないコードです。ツッコミありましたらよろしくお願いいたします_o_。
設定を一ヶ所にまとめたかったから、ref.pl にほぼ全ての処理を突っ込むことになってしまった…。require した先の変数も取り込めるんでしょうか?>識者
はっ!!…設定取得関数化すれば間違いなくうまくいくか…でも無駄に長くなるな…。

|

« サイト内アクセスランキング/ページ毎のリンク元ランキング | Main | なぜ議論はループするのか:blog の場合 »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/568/251276

Listed below are links to weblogs that reference 人気ページ一覧/リンク元一覧表示機能公開:

» 人気ページ一覧/リンク元一覧表示cgiがリリース [あそびをせんとやうまれけむ]
「ランキング」で記事にしたテスト中だったcgiの最初のバージョンがリリースされました。 現在このサイトに設置しているような、「人気ページ一覧/リンク元一覧」を任... [Read More]

Tracked on 2004.03.02 at 03:31 AM

» 人気ページ一覧/リンク元一覧表示機能 Version0.2 [philosophical ]
というわけで、改修いたしました。 version 0.2 [Read More]

Tracked on 2004.03.02 at 11:16 PM

» philosophical : 人気ページ一覧/リンク元一覧表示機能公開 [此処録ANNEX:ココログTIPS]
philosophical : 人気ページ一覧/リンク元一覧表示機能公開 [Read More]

Tracked on 2004.04.05 at 01:06 AM

« サイト内アクセスランキング/ページ毎のリンク元ランキング | Main | なぜ議論はループするのか:blog の場合 »