♪ taitai studio Free Midi/Mp3 & Cgi & Ranking ... pr快適サーバへお引越し♪
Home »CGIスクリプト集 » Link&Rank

■ Link & Rank (ver3.21)

・ランキング機能付き自動登録型リンク集 [最終更新日:2004年5月2日]


0・最終更新情報

2004年5月2日
・新着サイトログファイルにデータが延々と溜まっていく不具合を修正。訂正部分について詳しくはこちら。

2004年4月20日
・カテゴリ別ランキングでランキングが乱れる不具合を修正。訂正部分について詳しくはこちら。

2004年3月18日
・ログファイル名を変更した際エラーが出る不具合を修正。訂正部分について詳しくはこちら。

2004年3月13日
・SSI表示でOUTも表示した際にテーブル表示が崩れるミスを修正。訂正部分について詳しくはこちら。

2004年3月8日
・初期設定でバックアップファイル名も変更できるように修正。
・同一IP排除機能の追加、簡易アクセス解析機能の追加。
・表示等の微調整

 3.1から3.2へのヴァージョンアップの際はconfig.cgiに追加項目があります。

2003年11月14日
 3.0から3.1へのヴァージョンアップの際はconfig.cgiも変更する必要があります。3.0時代のconfig.cgiに「$log_file = "data.log";」を追加するだけでOKです。

2003年9月8日
 Ver3.0β公開。CGI・ログファイルを分けて負荷を軽減(というか分散)、CGIの多重起動を防止。基本的な機能は旧ヴァージョン(2.41まで)と変わりはありませんが新ヴァージョン(3.0以降)と旧ヴァージョンとはログの互換性がありません

 β版につきバグを伴う恐れがあります。何か不具合を発見された方はどんどんお問い合わせ下さい。また定期的に手動でログファイルをバックアップされる事をおすすめします。

1・このスクリプトについて

 このスクリプトは"taitai studio"が参加しているランキングサイトをヒントに制作しました。通常の訪問者登録型のリンク集とランキングの機能を併せ持っています。

 今、巷に流布しているサイトランキングを簡単に自分で主催することが出来ます。またカテゴリ表示はランキングのみでなく新着順に表示することもでき、カテゴリ内検索もできるので普通に自動登録リンク集として利用することもできます。

ランキング機能

  1. IN/OUTをカウントしトータル/カテゴリ別で表示する。
  2. IPチェックで同一者の多重カウントを防止する。
  3. 一定期間(毎日・毎週・毎月)でカウントをリセットする。
  4. img、Javaスクリプト、iframe等によるINカウントの不正な水増し行為を防止(投票ページ)。
  5. IPを記録して連続投票を排除する。

サーチエンジン機能

  1. 全検索/カテゴリ検索が可能。
  2. 登録時に紹介文等とは別にキーワードを設定できる。(5つまで)
  3. 検索時にGoogleへ入力キーワードでリンクする。(オプション)
  4. ログを毎日自動的にバックアップする。(万が一ログが消えてもブラウザから復元可能)

 INカウントは登録されたサイトからこのスクリプトを呼び出します。従って、infoseek isweb、Biglobeのwww5サーバ等、外部からCGIへのアクセスを禁止しているサーバではこのスクリプトはご利用いただけません。(INカウントを無視するならちょっと改造すれば使えますけど・・・。)

 またLink&Rankに限らずランキングCGIはサーバにとって非常に高負荷です。ランキングCGIの設置をはじめから禁止しているところもあります。CGIの動作が重いサーバや大規模なランキングを想定されている場合には使用しないで下さい。

 カスタマイズに関しては「カスタマイズの手引き」で多少解説してあります。

W.S.C.R.評価 >>

2・サンプルとダウンロード

[サンプル(v3.21)] [ダウンロード(v3.21)]

β版につきバグなどの不具合が生じる可能性があることを予めご了承下さい。

 LHA形式で圧縮してありますので別途、解凍ツールが必要です。ご使用の前に必ず利用規定をご覧下さい。

 利用規定をお読みになっていない、または同意できない場合でも実際にご使用になられた時点で無条件に利用規定に同意したものとみなします。

もっと他にもCGIを探したい方は・・・
Click!!206 -Best CGI/Material Database- ・当サイトのオススメリンク集からもどうぞ。

もっとCGIを学びたい方は・・・
Click!!Amazon.co.jpでCgi関連の参考書を探してみよう!

3・設置例

 ファイルはたくさんありますが初期設定はすべて「config.cgi」で行います。あとのCGIファイル(in.cgi、out.cgi、regist.cgi)は1行目のPerlのパスを書き換えるだけで基本的にはOKです。初期設定をしてファイルをアップロードしたらブラウザから「linkrank.cgi」へアクセスして下さい。

設置例 一般的な設置例です。
図のようにサーバに転送しパーミッション*をカッコ内の通りに変更します。

どのディレクトリにCGIを設置してもいいサーバや「cgi-bin」ディレクトリ直下に置かないと動いてくれないサーバなど様々ですので、プロバイダのホームページなどでCGIの動作環境を調べる必要があります。

(*・・・実行権、アクセス権、属性などの呼び方もあります)

・主な留意事項

 データファイル・カウントファイルはカテゴリ毎にそれぞれのディレクトリに独立しています。カテゴリ毎のディレクトリに格納されますので初期設定で指定したカテゴリ数と同じだけディレクトリが必要です。たとえばカテゴリが12個ある場合は00〜11のディレクトリが必要です。その場合は初期状態で「00」のディレクトリをディレクトリごと名前を変えてアップロードすれば簡単です。

 「ディレクトリの一覧表示を許可しているサーバ」とはindex.htmlがないディレクトリを指定してアクセスがあった場合、そのディレクトリ内のファイル一覧が表示されるサーバです。index.htmlがないディレクトリを指定してアクセスしても「Forbidden」を返すサーバではindex.htmlをいちいちアップロードしなくても問題はありません。

4・初期設定および補足説明

 初期設定に関しては基本的には「config.cgi」で行います。初期設定ファイルの各項目指定箇所にも補足説明がありますのでここでは特にわかりにくい部分を説明します。

 もともと自分のサイト用に作ったものなのでカスタマイズしにくいかもしれません。カスタマイズをお考えの方は「カスタマイズの手引き」のページもご参照ください。「見た目を変えたい」などカスタマイズに関するご質問には出来る限りお答えしますのでお気軽に「ご意見ご質問掲示板」をご利用ください。なお改造に関するご質問はご遠慮ください。

 ページ全体のスタイルに関してはスタイルシート(CSS)で指定できます。スタイルシートの指定は環境設定ファイル(config.cgi)の下のほう、「# ◇HTMLヘッダの指定」で指定してください。CSSを利用する事で見た目の雰囲気は変えられます。なお最初から指定してあるinput、bなどのclassに関してはそのまま残しておいて下さい。


#!/usr/local/bin/perl

1行目はPerlのパスです。サーバ(プロバイダ)ごとに違いますが多くは「#!/usr/local/bin/perl」または「#!/usr/bin/perl」です。その他のCGIファイル(linkrank.cgi、in.cgiなど)も変更がある場合はすべて変更してください。


# ◇<TITLE>で表示されるタイトル
$title = "リンク&ランク";
# ◇メインページでのタイトル表示 (画像などのタグ)
$main_title = <<EOF;
<img src="linkrank.png" width="94" height="42" alt="Link&amp;Ranking">

EOF

このスクリプトのタイトルを入れます。$titleは<TITLE>タグやメールの件名などで使います。
$main_titleは各ページのナヴィゲーションバーの上に使います。タイトル画像などのタグを入れてください。


# ◇背景色・背景画像
$bg_color = 'white';  # 背景色
$bg_image = '';     # 壁紙(URLを記入。使用しない場合はこのまま。)

背景色、壁紙(背景画像)を指定します。指定しない場合は空欄にしておきます。


# ◇管理用パスワード
$pass = '0123';

管理機能(ログの削除等)を使う時のパスワードです。


# ◇CGIスクリプトファイル名
$script = "linkrank.cgi";
# ◇ログファイル名
$log_file = "data.log";
# ◇CGIスクリプトへのパス
$script_path = "http://www.***.ne.jp/~user/cgi-bin";
# ◇メインページへのパス
$toppage = "linkrank.cgi";

スクリプトのファイル、ログファイルへのパスです。もしファイル名を変えることがあったらここも必ず変えます。(Urlでは指定できません。)
CGIスクリプトへのパスは外部からのアクセスがある為必ずhttp://からのUrlで記述します。ディレクトリの最後のスラッシュは不要です。
メインページへのパスとは各ページで「トップ」をクリックした時にジャンプするページです。初期状態ではlinkrank.cgiのトップページへ移動しますが、自作のメインページやご自分のサイトのホームページにジャンプさせたい場合はここを変更してください。

注意・ログファイル名を変更する際は全てのディレクトリのログファイル名を合わせて下さい。


# ◇メインページ上部のコメント (タグや広告も可。上下のEOFは消さないように。)
$top_com = <<"EOF";
<br>
ランキング式自動登録リンク集です。たくさんのご登録待ってます♪<br>
<br>

EOF

メインページに表示させるメッセージです。EOFは消さないで下さい。


# ◇投票ページを使う (YES=1、NO=0)
# IMGやJavaScript、IFRAME等によるINカウントの不正な水増しを防ぎます。
$vote_key = 1;
# ◇リンクコードによるアクセス、または投票(ENTERをクリック)後のジャンプ先
$enter_jump = "";

不正にINカウントを水増しする事を予防するための投票ページの使用を選択します。投票ページ以外からのアクセスはカウントされません。すぐにメインページを表示させたい場合は0にします。
ENTERをクリックした後、移動するページをlinkrank.cgiのメインページ以外(ホームページ)にしたい時は$enter_jumpにそのUrlを指定してください(http://から)。なお、投票ページを使わない場合でもここでリンクコードからアクセスされ、INカウント処理後に移動させたいページを指定できます。


# ◇登録サイトのバナーサイズ
$bnr_wid = '88';
$bnr_hei = '31';

登録サイトのバナーのサイズを指定します。サイズを指定したくない場合は適宜改造してください。


# ◇自分のサイトのバナーを表示するタグ(登録完了メッセージで表示されます。)
$ad_bnr = '<img src="http://www.XXX.ne.jp/~user/image/banner.gif" width="88" height="31" border="0" alt="バナー">';

登録完了メッセージの画面でリンクコードとともに表示されます。
なお、デフォルトではバナーとともに「バナーをお使いいただける方はダウンロードしてお使いください。バナーへの直リンクはご容赦願います。」というメッセージが表示されます。気に入らなかったら適宜編集してください。(◇サブルーチン3:「新規登録処理」の下の方)


# ◇記事表示部設定
$main_wid = '640'; # 記事表示部全体の幅 (%指定も可)
$tl_wid = '100'; # バナーのテーブル幅
$msg_wid = '340'; # サイト紹介文のテーブル幅
$bd_color = 'navy'; # テーブルボーダー色、トップページ等のボーダー色
$tbg_color = 'white'; # 記事表示部のテーブル背景色

サイズはバナーサイズにあわせて適宜調整してください。テーブルボーダー色とは記事表示部の枠の色です。


# ◇トップページメニューパネルの色
$mn_color = '#ecf5ff';

メインページで「新着URL」「新規登録」などのメニューが表示されるテーブルの背景色です。


# ◇新着マーク (画像などのタグ)
$new_img = '&nbsp;<small><span style="color:red">NEW!</span></small>';

記事表示部で新着サイトに表示されるNEWマークです。デフォルトはテキストですが画像を使う場合はここに画像タグを入れます。


# ◇targetの規定値
$target = '_top';

登録サイトへのリンクとなるa要素のtarget属性を指定します。「_blank」なら新しいウィンドウで、「_top」なら全画面に表示されます。


# ◇ランキングのリセット (毎日=0、毎週=1、毎月=2)
$re_pace = 1;

ランキングのリセットを指定します。リセットされてもトータルのIN/OUTアクセスは保存されます。
但しランキングリセットはスクリプトへのアクセスを契機として行われます。
(たとえば「毎週」を選択した場合月曜日の1番最初のアクセス時にリセットされます。)
従ってアクセスがなかった場合はランキングのリセットは行われません。また正確に何曜日何時何分にリセットなど指定できません。


# ◇カテゴリ毎の最大登録件数
$url_max = 100;

登録件数がこれを超えると新規登録を中止します。自分で言うのもなんですけどけっこうサーバ負荷が高いスクリプトなのでほどほどに・・・。


# ◇ファイルロック処理をする(する=1、しない=0)
$lock_use = 1;
# ◇ロックファイルへのパス
$lockfile = "./linkrank.lock";

IN/OUTアクセス時にはカウントをログファイルへ保存するため登録件数が増えてくるとログファイルへの書き込み処理も増えてきます。
使用する場合はロックファイル名を記入します。ロックファイル自体はスクリプト側で自動生成、削除しますので用意する必要はありません。


# ◇バックアップ用コントロールファイル
$cntr_file = "control.dat";

コントロールファイルはバックアップやランキングリセットの為に日付を管理するファイルです。
1日1回最初のアクセスがあった時に自動的に現行ログがバックアップファイルに保存されます。でもご自分でこまめにバックアップをとることをおすすめします。


# ◇カテゴリ指定 (括弧内の数字は0から連番で)
$cates[0] = 'コンピュータ・インターネット';
$cates[1] = 'エンターテインメント';
$cates[2] = 'ビジネス・サービス';
$cates[3] = '社会・情報';

カテゴリを指定します。[ ]の数字は0から続けてください。レイアウト上、カテゴリは偶数個にしたほうがいいです。カテゴリを増設した場合はその分ログファイル等を格納するディレクトリが必要となります。
またカテゴリの増やしすぎはトータルランキング表示、全検索等の処理に時間がかかったりサーバに負荷を与える原因となりますのでカテゴリは絞ってください。


# ◇登録者へのメール通知 (しない=0、する=1)
$mail = 1;
# ◇sendmailのパス (プロバイダのホームページ等で確認してください。)
$sendmail = '/usr/lib/sendmail';
# ◇メール通知する時の設定
$admin_mail = 'user@***.ne.jp'; # 管理者のメールアドレス
$admin_name = "管理人"; # 管理者の名前
$admin_url = 'http://www.***.ne.jp/~user/'; # 管理者のホームページ

登録通知メールに関する設定です。sendmailのパスはプロバイダのホームページ等で確認してください。sendmailが使えないサーバではメールによる自動登録通知できません。
なお登録通知メールをカスタマイズしたい場合はregist.cgiの下の方にメール送信のサブルーチンがありますので変更してください。


# ◇登録時の注意事項 (上下のEOFは消さないように)
$attention = <<"EOF";
・登録は<span class="b">サイト運営者ご本人のみ</span>でお願いします。他薦では登録しないで下さい。<br>
・「バナー」および「キーワード」以外は全て必須項目です。<br>
・登録時のEメールアドレス、パスワード情報は登録後のメンテナンスに必要になります。<br>
・管理者の権限で登録いただいたサイトを削除させて頂く場合があります。ご了承ください。
EOF

新規登録時に表示される注意事項メッセージです。ご自分のサイトに合うようにお好きに書き換えて頂いて結構です。
最後のEOFは残しておいてください。消すとエラーになります。


# ◇登録拒否したいIP
@deny = ('111.222.333.44','','','','',);

管理モードで登録者のIPアドレスが表示されます。いたずらがあったときなど登録されたくない人のIPを調べて例のように記入してください。


# ◇同一IP排除機能の使用 (YES=1、NO=0)
$ip_mode = 1;

# ◇同一IP排除機能に利用するログファイル名
$ip_dat = "./ip.dat"; # 本日分
$ip2_dat = "./ip2.dat"; # 前日分

# ◇同一IP排除機能を使う際、全てのIPを記録する (YES=1、NO=0)
$ip_all = 1;

同一IP排除機能に関する設定です。同一IP排除機能とは投票の際にIPを記録して丸1日そのIPからの投票を無効にする機能です。

まず、$ip_modeで使用の有無を指定します。使用しない場合は次のログファイルは不要です。なお使用しない場合は直前1件のIPを記録して連続投票を排除します。

また、デフォルトではカウントが有効な時のみIPを記録しますが$ip_allを1に指定すると全ての投票に対してIPを記録します。IPと同時に参照元(referer)、ユーザーエージェントを記録しますので不正を試みるユーザーを発見する際に役立ちます。但しサーバ負荷の原因となるので一定期間の調査以外では使用しないほうがよいでしょう。投票ページに外部のアクセス解析を埋め込むには「カスタマイズの手引き」をご覧ください。

なお、カウントログは簡易アクセス解析として管理モードから閲覧できます。


# ◇検索時のキーワードをgoogleへ受け渡す (YES=1、NO=0)
$link_google = 1;

ユーザーがキーワード検索を利用した際、結果表示に入力されたキーワードでのGoogleへのリンクを表示するかしないか選択してください。


# ◇SSI使用時の設定
$ssi_view = 10; # SSIで表示する件数
$tl_length = 40; # 長いサイト名はこれを超えるとカット (半角換算)
$view_out = 0; # OUTカウントも表示する (YES=1、NO=0)

taitai studioのトップページのようにSSIで別ページに上位サイトを表示する機能です。
登録サイトのタイトルがあまりにも長くて困る場合は$tl_lengthの値を調節してください。指定文字数以降が「...」になります。
デフォルトではINカウントのみの表示ですが$view_outを1にするとOUTカウントも表示されます。

なおSSIの記述ですが、ランキングを挿入したい個所に

<!--#include virtual="/cgi-bin/linkrank/linkrank.cgi?mode=t_rank&view=1"-->

などと記述してください。挿入するページからのlinkrank.cgiへの相対パスを記入し
.cgiに続けて?mode=t_rank&view=1と指定します。サーバによってSSIの仕様は違うので確認してください。


# ◇ランキング一覧への広告等の挿入
$ins_view = 0; #ランキング一覧に広告などを挿入 (トータルランキングにだけ=1、新着にも=2、カテゴリにも=3、使用しない=0)
$ins_sep = 10; #何件ごとに区切るかを指定
$ins_html = <<"EOF"; # 挿入するHTMLを<!-- ココに挿入 -->の部分に記述して下さい。
<!-- ココに挿入 -->
EOF

ランキング表示などを一定件数で区切って途中に何か挿入する機能です。バナー広告や区切り線などを挿入できますが処理は少し重くなります。
$ins_viewを1にすれば、トータルランキングだけ、2にすればトータルと新着、3は上記に加えてカテゴリ表示でも挿入されます。
何件ごとに区切るかを指定して<!-- ココに挿入 -->の代わりにHTMLタグなどで指定してください。(デフォルトでは20件表示で10件ごとに区切られるように設定されています。)


・謝辞・・・以下参考にさせて頂いた書籍、サイト様

Perlでつくる楽しいCGI」 「Kentとつくろう!PerlでCGI
...Kent WebのKentさんの著書です。これを読めば基本がバッチリ理解できます。サイトでは公開されていないオリジナルスクリプトも収録されています。

CGIのための実践入門Perl 三島俊司さん (技術評論社) Perlの基礎知識をいちから学べます。
CGI&Perlポケットリファレンス 藤田郁さん+三島俊司さん
(技術評論社)
関数や演算子をひとつひとつ丁寧に解説してあります。taitaiのバイブル。
The Room 夢さん ランキングCGIがあります。(パクってません!!多分。。。)
K-COLLECT 川原千種さん 今回はこちらの「PerlEditor」を使用させて頂きました。

Click!!Amazon.co.jpでCgi関連の参考書を探してみよう!


・更新履歴

2004年3月18日 ... ログファイル名を変更した際エラーが出る不具合の修正
2004年3月13日 ... SSI表示でテーブルが崩れるミスを修正
2004年3月8日 ... 初期設定でバックアップファイル名も変更できるように修正。
   同一IP排除機能の追加、簡易アクセス解析機能の追加。
   表示等の微調整
2003年11月10日 ... 登録内容を編集した際、新着サイト表示モードに反映されないのを修正。
   登録URLに「?」「=」が含まれるとうまくリンクできないのを修正。
   初期設定でログファイル名を指定できるように修正。
2003年9月18日 ... 処理・ログファイルを振り分け負荷を分散。
2002年4月5日 ... ランキング表示途中にタグを挿入出来る機能を追加。
2001年11月14日 ... SSIオプションの追加。
2001年8月20日 ... 投票ページを追加。デザインの変更。
2001年7月30日 ... カテゴリランキングが正常に表示されないバグを修正。
2001年5月26日 ... ページの移動が出来ないバグを修正。
2001年4月18日 ... 「Link&Rank」配布開始

失敗しないレンタルサーバ選び ・・・
ドメイン取得やレンタルサーバ選びについてまとめてみました。ドメインの取得やサーバ移転をお考えの方は参考にご覧下さい。

[カスタマイズの手引き]

・ホーム ・サイトマップ ・ひとつ前へ ・このページの先頭へ
Copyright © 2000-2008 taitai studio. All Rights Reserved.