・RSS作成機能付き新着情報管理システム [最終更新日:2006年11月12日]
2006年11月12日
version1.0β公開。(十分な動作確認はしていますがベータ版につき何らかのバグが発生する恐れがあります。)
このスクリプトはサイトの更新履歴などの新着情報を簡単に管理できる管理者限定掲示板です。掲示板と連動してRSSを出力できるのでRSSによる情報配信も簡単に可能です。サイトの更新の度にいちいち新着情報のページを更新してアップロードしたりする手間が省けます。また、HTML出力、SSI表示、モバイル表示など様々なオプション機能を利用可能です。
-特徴-
サンプル (ログは当サイトの新着情報を使用しているためテスト登録はできません。)
LHA形式で圧縮してありますので別途、解凍ツールが必要です。ご使用の前に必ず利用規定をご覧下さい。
利用規定をお読みになっていない、または同意できない場合でも実際にご使用になられた時点で無条件に利用規定に同意したものとみなします。
もっと他にもCGIを探したい方は・・・
206 -Best CGI/Material Database-
当サイトのオススメリンク集からもどうぞ。
もっとCGIについて学びたい方は・・・
Amazon.co.jpでCgi関連の参考書を探してみよう!
| >index.htmlなど > >easyinfo.cgi (755) ・・・ プログラムファイル >easyinfo.log (666) ・・・ データファイル >easy_config.cgi (755) ・・・ 初期設定構成ファイル >easy_old.log (666)* ・・・ 過去ログデータファイル >rss.xml* ・・・ XMLファイル >ifno.html* ・・・ HTMLファイル >point1.png等* ・・・ マーク画像 >jcode.pl (644) ・・・ 日本語コード変換ライブラリ 「*」は任意 |
一般的な設置例です。 図のようにサーバに転送しパーミッション*をカッコ内の通りに変更します。 どのディレクトリにCGIを設置してもいいサーバや「cgi-bin」ディレクトリ直下に置かないと動いてくれないサーバなど様々ですので、プロバイダのホームページなどでCGIの動作環境を調べる必要があります。 タイトル画像、オススメマークは同梱されていますが別の画像を利用されても構いません。 (*・・・実行権、アクセス権、属性などの呼び方もあります) |
| ▼CGI関連のオススメ書籍 | |||
| CGIのための実践入門Perl 三島 俊司 / 技術評論社 基本が丁寧に解説されています。1からしっかり勉強するにはコレ。 |
CGI&Perlポケットリファレンス 藤田 郁、三島 俊司 / 技術評論社 わからない事はすぐに調べられる。taitaiのバイブル。 |
||
| はじめての人のためかんたんPerl/CGI入門 紙谷 歌寿彦 / 秀和システム 超初心者向けに掲示板の仕組みなどCGIの基本を解説。 |
KENTとはじめるCGI-厳選Perlスクリプト集 KENT / ソフトバンクパブリッシング サンプルに沿って基本を解説。Kent-Web未公開スクリプトも。 |
||
詳細な初期設定は構成ファイル(easy_config.cgi)で行います。
■ easyinfo.cgiの初期設定#!/usr/local/bin/perl
Perlのパスです。プロバイダごとに違います。
# ◇コード変換ライブラリ取り込み
require './jcode.pl';
日本語文字コードライブラリ「jcode.pl」へのパスです。CGIファイルと同一ディレクトリにある場合はこのまま。
# ◇設定ファイル取り込み
require './easy_config.cgi';
初期設定ファイルのパスです。初期設定は全てこの設定ファイルで指定します。
■ easy_config.cgiの初期設定#◆ 基本設定
# ◇管理用パスワード(英数字で)
$pass = '0123';
# ◇戻り先 (http://からでもOK)
$home = "../";
# ◇CGIスクリプトファイル名
$script = "easyinfo.cgi";
# ◇ログファイル名
$logfile = "easyinfo.log";
# ◇ログ(現行ログ)最大登録件数
$log_max = 20;
管理パスワードは半角英数字で指定します。文字数に特に制限はありません。
$log_maxでeasyinfo.logに登録される記事数を指定します。指定値を超えた場合は古い記事から過去ログに移動、または消去されます。なお、RSSの出力は現行ログからのみ行うこととします。
# ◇カテゴリ機能を使う (カテゴリ分けの機能を使わない場合は0)
$valid_cate = 1;
# ◇カテゴリ指定 (括弧内の数字は0から連番で)
$cates[0] = '写真のコーナー';
$cates[1] = '音楽のコーナー';
$cates[2] = '映画のコーナー';
・
・
記事のカテゴリを設定します。$catesの後の数を[0]からの連番とすればカテゴリの増減は可能です。なおカテゴリ機能を使わない場合は$valid_cateを「0」にします。
# ◇method形式 (POSTまたはGET)
$method = 'POST';
# ◇ページのタイトル
$page_title = '新着情報';
# ◇ページ背景色
$page_bgcolor = '#ffffee';
# ◇ページ背景画像 (壁紙を使う場合のみ指定。)
$page_bimg = '';
# ◇タイトルの色
$mt_color = "#ffcc00";
# ◇タイトルの文字サイズ
$mt_size = '120%';
# ◇タイトルに画像を使う場合はタイトルに画像のパス。(http://からでもOK。)
$timg = '';
# ◇タイトル画像のサイズ指定。 (画像を使う場合のみ。)
$timg_wid = ''; # 横幅
$timg_hei = ''; # 高さ
methodはフォームのデータを送信する際の形式です。通常はこのままでOKです。なお、旧J-PHONE端末では"POST"は使えませんがPOSTに指定されていてもスクリプト側でGETに変更します。$page_titleは<title>タグや各ページの一番上に使用しますページ背景色、背景画像は使わない場合は「''」として下さい。 タイトル画像は使う場合のみ記入します。ただし、タイトル画像を使う場合でも$page_titleを<img>のalt属性、モバイル表示時のタイトルとして使用します。
# ◇タイトル下のメッセージ (HTMLタグ使用可能。改行は<br>で。)
$message = <<"EOF";
当サイトの新着情報です。RSSにも対応しています。
EOF
トップページに表示される紹介文です。"EOF";の下の行からEOFの上の中にメッセージなどを記述します。上下のEOFと同じ行には何も書かないように。HTMLタグ使用可能です。なお改行は反映されませんので<br>を使ってください。
# ◇メニュー部分のマーク (画像のタグや「■」などの記号等。)
$point1 = '<img src="point1.png" width="12" height="12"
border="0"> ';
# ◇記事タイトルのマーク
$point2 = '<img src="point2.png" width="12" height="12"
border="0"> ';
Home、Searchなどのメニューリンクの画像、各記事の前につく画像を指定します。画像のタグではなく「■」「◇」などの記号でもOKです。なおモバイル表示の場合は各キャリア独自の絵文字が使われます。
# ◇記事表示部の幅
$a_width = '80%';
# ◇記事のフォントサイズ
$a_size = '90%';
# ◇記事背景色
$a_bgcolor = "#ffffff";
# ◇記事ボーダー色
$a_bdcolor = "#ffcc00";
# ◇記事にURLがある場合のターゲット ( "_top"で全画面、"_blank"で新規ウィンドウ)
$win_target = "_blank";
記事表示部の幅、記事のフォントサイズはpx、%などの単位を付けて指定します。カラーは#から始まる16進数のコード、またはwhite、redなどの色名で指定します。なおモバイル表示の場合は反映されません。URLのターゲットはリンクをクリックした際に新しいウィンドウを開くか同一ウィンドウ(全画面)で開くかを指定します。
# ◇1ページ毎の最大表示件数(過去ログ表示、検索結果表示の時)
$page_max = 10;
過去ログ表示時、検索結果表示時の1ページ毎の記事表示件数です。なお現行ログは$log_max(現行ログ登録件数)の件数分全て表示されますがモバイル表示時は上で指定した$log_maxではなくこの数値の件数が表示されます。
# ◇HTMLヘッダおよびBODYの要素指定
# ココでスタイルシートなどを指定します。
# 上下のEOFは消してはいけません。
$head = <<"EOF";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
・
・
EOF
# ケータイ表示のHTMLヘッダ
$m_head = <<"EOF";
<html lang="ja">
<head>
・
・
EOF
HTMLヘッダを指定します。ここでスタイルシートの指定、外部CSSファイルの読み込み等自由に記述できますが上下のEOFを消さないように注意してください。なおモバイル表示の際とヘッダ指定が別にしてあります。(ケータイではスタイルシートに殆ど対応していない為。)
# ◆HTML書き出しに関する設定
# ◇HTML書き出し機能を使う (HTML表示を使わない場合は0)
$valid_html = 1;
# ◇ HTMLファイル名
$html_file = "info.html";
# ◇ HTMLファイルから見たこのスクリプトが置いてあるディレクトリのパス
# HTML書き出しを利用する際、書き出されるHTMLファイルからスクリプトへリンクがはられる場合があります。
# CGIファイルとHTMLファイルが違うディレクトリにある場合はHTMLから見たCGIファイルのあるディレクトリの相対パスを、
# 相対パスが分からない場合はhttp://からでもOKです。
$script_dir = "./";
# ◇ CGIファイルから見たHTMLファイルが置いてあるディレクトリのパス
# CGIファイルと同じディレクトリに置く場合はこのまま。
# http://からではなく「../」「../../」など相対パスで指定して下さい。
$dir = './';
#↑必ずこのCGIスクリプトが置いてあるディレクトリからの相対パスで指定して下さい。よくわかんない人は解説ページをご覧下さい。
# ◇ CGIのページから「Topへ戻る」のリンクはHTMLのページにする (CGIのメインページにする場合は0)
# 検索結果や過去ログページなどCGIからの戻り先をCGIのトップページではなくHTMLにすることが出来ます。
$return_html = 1;
HTML書き出しオプションを使用する際の設定です。HTML書き出しを使用しない場合は$valid_htmlの値を「0」にします。
作成されるHTMLファイルから検索などでCGIへリンクされますので、リンク作成のために$script_dirでスクリプトが置いてあるディレクトリを指定します。これはHTMLファイル(info.html)から見たCGIのディレクトリ指定です。ルートディレクトリ直下のcgi-binディレクトリにある場合は「cgi-bin/」とします。また「http://www.sample-url.com/user/cgi-bin/」などとhttp://から指定できます。最後が必ず「/」で終わるように。
次にHTMLファイルがあるディレクトリを指定します。これはスクリプト本体(easyinfo.cgi)が置いてあるディレクトリから見た位置を指定します。こちらはhttp://からは指定できないので必ず相対パスで指定してください。CGI、HTMLともに同じディレクトリの場合は「./」でOK。スクリプトは「cgi-bin」ディレクトリに、htmlファイルはその上のディレクトリにある場合は「../」とします。
$return_htmlを「1」にすることで、CGIのページ(過去ログ、検索)からTopへ戻るをクリックした際にCGIのトップページではなく作成されたHTMLファイルに戻るように指定できます。
# ◆ 過去ログに関する設定
# 過去ログを残す
$valid_past = 1;
# 過去ログファイル
$past_log = 'easy_old.log';
# 過去ログ検索を有効にする (過去ログは検索させない場合は0)
# 過去ログが膨大になってきた場合の過去ログ検索はサーバに負担がかかります。
$search_old = 1;
過去ログオプションを使用する際の設定です。過去ログ機能を使わない場合は$valid_pastを「0」にします。この場合は$log_maxを超える記事は古いものから消去されます。
過去ログは過去ログファイルに延々と溜まっていく仕様ですので過去ログの量があまりにも膨大な場合、検索時にサーバに負荷がかかりますので過去ログ検索をOFFにすることが出来ます。過去ログ検索をしないようにするには$search_oldの値を「0」にして下さい。
# ◆RSSに関する設定
# ◇RSS作成機能を使う (RSSを使わない場合は0)
$rss_out = 1;
# ◇RSS書き出し件数
$rss_items = 15;
# ◇RSSファイルのパス
$rss_file = "./rss.xml";
# ◇RSSファイルのURL (最後が.xmlで終わるようにファイル名までいれて下さい。)
$rss_url = "http://www.sample-url.com/user/rss.xml";
# ◇RSSフィードのタイトル
$rss_title = "私のサイトの新着情報";
# ◇RSSフィードのメインページへのリンク
$rss_main_url = "http://www.sample-url.com/user/";
# ◇RSSフィードの説明
$rss_desc = "私のサイトの新着情報をご紹介します。";
# ◇RSSリーダーが参照するロゴの設定
# ロゴのURL。http://から.gifまたは.jpgまたは.pngで終わるように。
# ロゴを使わない場合は空(""の状態)にしておく。
$logo_url = "";
# ◇ロゴのサイズ指定
$logo_width = "";
$logo_height = "";
# ◇このCGIのRSS説明ページに使うRSSアイコンのタグ (使わない場合は「''」で。)
$rss_icon = '<img src="./rssicon.png" width="16" height="16"
alt="rss" border="0"> ';
RSS作成オプションを使用する際の設定です。RSS作成機能を使わない場合は$rss_outの値を「0」にします。なお、EasyInfoで作成されるRSSフィードはヴァージョンが「RSS 2.0」、エンコーディングは「Shift-JIS」となっています。RSSのヴァージョンには0.9、1.0、他にはATOMというフォーマットなどあり、また文字コードも「UTF-8」が主流ですが、easyinfo.cgiで作成されるRSSフィードは国内主要ポータルサイトのRSSリーダーで動作確認し正常に読み込める事を確認しています。
RSS書き出し件数は$log_maxより少ない件数を指定します。(RSS出力は現行ログから行います。) RSSファイルのパスは相対パスで指定します。RSSファイルをCGIと同じディレクトリ置く場合はこのまま、1つ上のディレクトリに置く場合は「../」とします。また、RSSフィードのメインページへのリンクはRSSリーダーが参照するメインページのURLとなりますのでサイトのトップページなどを指定して下さい。
ロゴはRSSリーダーが参照する情報です。RSSリーダーによってはロゴを表示させることも出来ますのでサイトのロゴ画像のURLを記入します。ロゴのサイズはRSS2.0の仕様では144x400まで、デフォルトは88x31となっていますが特に拘らなくても大丈夫そうです。
最後の$rss_iconはこのスクリプトのRSS説明ページで使うアイコンです。使わない場合はタグを消して「''」として下さい。
# ◆SSI表示に関する設定
#SSIで表示させる記事件数
$sitems = 5;
# 日付の表示形式
# 0 = yyyy/mm/dd 2006/11/01
# 1 = yy/mm/dd 06/11/01
# 2 = mm/dd 11/01
# 3 = yyyy年mm月dd日 2006年11月01日
# 4 = yy年mm月dd日 06年11月01日
# 5 = mm月dd日 11月01日
$sday = 0;
# 日付の後に時間をつける (つける場合は1、つけない場合は0。)
$stime = 0;
# タイトルが長い場合は残りをカットする (カットしない場合は0、する場合は半角換算で指定文字数を。)
$scut = 0;
# タイトルをリンクさせる
$slink = 1;
SSIで登録された記事を別ページに表示させる事ができます。これによりトップページなどで新着情報を表示させることが出来てとても便利です。まぁ、新着情報くらいでいちいちCGIを起動させてサーバに負担をかけなくてもトップページを書き直せば済む話なんですが・・・。
SSIで表示させられるのは日付、タイトルです。日付の書式は6タイプから選らんで下さい。また日付の後に時間を表示させるか否かを指定できます。タイトルが長すぎる場合は途中でカットすることができます。何文字以上はカットするかを半角換算で数値を指定してください。カットをしない場合は「0」です。記事をリンクさせるかどうかも選べます。
「たかが新着情報のページのためにCGIが起動するのはイヤだ!」というサーバ思いの方のためにHTML書き出し機能がついています。閲覧がHTMLファイルになるのでサーバ負荷を軽減できます。HTML書き出し機能を使い、CGIとHTMLを別ディレクトリに置く際はパスの指定がややこしいので以下を参考にして下さい。なお、CGIスクリプトとHTMLファイルを同一ディレクトリに置く場合はパスは"./"でOKです。
>info.html >easyinfo.cgi |
ルートディレクトリ、サブディレクトリに関わらず同一ディレクトリの場合は、 $script_dir、$dirともにパスは「./」です。 |
>info.html > >easyinfo.cgi |
この位置関係の場合、HTMLファイルから見てスクリプトのあるディレクトリは 「cgi-bin」ディレクトリなので、$script_dirは「./cgi-bin/」または「cgi-bin/」です。 また、CGIファイルから見てHTMLファイルは1つ上のディレクトリにあるので $dirは1つ上のディレクトリを指す「../」にします。 |
| >index.htmlなど > >info.html > >easyinfo.cgi |
この位置関係の場合、HTMLファイルから見てスクリプトのあるディレクトリは 「cgi」なので、$scriptは「./cgi/」または「cgi/」です。 CGIから見たHTMLファイルの位置関係は2番目の例と同様1つ上なので $dirは「../」です。 |
ほとんどの環境では上記のような指定でいけるのですが、hi-hoのような複雑な環境では少し改造が必要です。hi-hoの場合、$script_dirを「../cgi-bin/user/アカウント/」、$dirを「../html/」とすればとりあえず使えますが、このままCGIからの戻り先をHTMLにすると変なところに飛ばされるので戻り先をHTMLにしない(初期設定の$return_htmlを0にする)、もしくはeasyinfo.cgiの「$go_to = "$dir$html_file";」の部分(数箇所あります)を「$go_to = "http://www.□□□.hi-ho.ne.jp/アカウント/info.html"」などと書き換える必要があります。
このスクリプトの大きな特徴として簡単にRSSを作成できる機能が備わっています。RSSとはウェブログやニュースサイトの見出しやサマリーを配信する技術です。気になるサイトのRSSをRSSリーダーに登録しておけばいつでも更新が確認できるというものです。
EasyInfoのRSSオプションを使うと、記事投稿や編集と同時に自動でRSSが作成・更新されます。RSSには様々なヴァージョンがありますが、easyinfo.cgiで作成されるRSSは「RSS 2.0」で、文字コードは「Shift-JIS」です。ほとんどのRSSリーダーに対応しています。
初期設定に出てくる、RSSフィードのタイトル($rss_title)、RSSフィードのメインページへのリンク($rss_main_url)、RSSフィードの説明($rss_desc)、ロゴの設定($logo_url)はすべてRSSリーダーが参照する情報です。RSSリーダーによってはロゴを指定していても参照しないものもあります。その他の設定はCGIで参照する情報です。RSSパスは上のHTMLファイル書き出し機能のパス記述例を参考にして指定してください。
RSSが作成されたらRSSの公開をお知らせする「RSS Auto-Discovery」のリンクタグをトップページなどの<head>内に埋め込みましょう。
<link rel="alternate" type="application/rss+xml" title="RSSのタイトル" href="RSSのURL">
RSS Auto-DiscoveryによりRSSリーダーが簡単にRSSフィードを見るけられるようになります。Mozilla Firefoxの場合はアドレスバーに
が表示され「ライブブックマーク」の利用も可能になります。→
なお、新規投稿時、記事編集時に「この記事はRSS出力を行わない」にチェックを入れた場合とURLの入力が無い場合は記事のRSS出力はおこなわれません。
RSS 2.0についてもっと詳しく知りたい方はRSS 2.0の仕様書の和訳をfutomi's CGI Cafeさんで公開されているので参考にしてみて下さい。
SSIで別のページに登録情報を表示させることが出来ます。SSIの記述は
<!--#include virtual="/cgi-bin/easyinfo/easyinfo.cgi?mode=ssi"-->
などと記述してください。挿入するページからのeasyinfo.cgiへの相対パスを記入し.cgiに続けて?mode=ssiと指定します。サーバによってSSIの仕様は違うので確認してください。
モバイル表示機能については特に設定して頂くことなく使えます。NTT DoCoMo「iモード」、au「EZweb」、SoftBank「Yahoo!ケータイ」に対応しています。対応しているというか見ることが出来るという程度ですが・・・。ケータイからEasyInfoにアクセスするとキャリアを判別して処理を振り分けます。
ちなみに、基本はcHTMLですので各キャリアとの互換性に頼っています。auのWAP2.0非対応端末、旧J-PHONE端末等ではちゃんと表示されないかもしれません。ここ2〜3年に発売された機種であれば多分OKです。ドコモのFOMA90xシリーズ、mova50xシリーズ、auのWINシリーズ、vodafone 3Gシリーズの携帯電話端末で正常に動作することを確認しています。
初期設定でPC表示の場合、見出し等にマーク画像を設定できますが、ケータイで表示する際は各キャリアの絵文字を使います。絵文字を変えてみたい方は、◇サブルーチン11:「User Agentの取得」で絵文字を指定していますので研究してみて下さい。
本文中に「&」、「'」を使った場合は強制的に「&」「'」に変換されます。RSS(XML文書)に先述のような本来実体参照で記述すべき文字が含まれていると構文エラーとなりRSSパーサが解釈できず、結果、折角のRSSもムダになってしまいます。ただし拡張性を考慮して「"」、「<」、「>」に関しては制限をかけていません。スクリプトで制限をかけていない「"」、「<」、「>」を地の文に使用する際は必ず「"」、「<」、「>」と記述してください。RSS出力時には本文内に使用したHTMLタグは全て除去されます。また先述の5つの実体参照文字以外の実体参照の使用もRSSの構文エラーとなりますので使用しないで下さい。
投稿記事の編集時はスクリプトの都合上、「&」は「&」に変換されますので再度「amp;」を付け足して下さい。
なお、RSS出力機能を全く使わない方で実体参照強制変換が使いにくく感じる方は、サブルーチン12:「デコード」の「# 改行・実体参照処理」のところで変換処理を行いますので文頭に「#」をつけて処理をしないように変更して下さい。・・・とはいっても「"」や「&」を地の文で使うことはいちおHTML構文エラーなので・・・。
| ・更新履歴 | |||||
|
新着情報を"taitai studio通信"(メールマガジン)、RSSで配信しています。是非ご利用下さい。
失敗しないレンタルサーバ選び ・・・
ドメイン取得やレンタルサーバ選びについてまとめてみました。ドメインの取得やサーバ移転をお考えの方は参考にご覧下さい。
| ・ホーム ・サイトマップ ・ひとつ前へ ・このページの先頭へ |
| Copyright © 2000-2008 taitai studio. All Rights Reserved. |